 это действие самостоятельно.

<img src="/img/deployment/https/https.svg">

**TLS-сертификаты** не привязаны к IP-адресу, но **связаны с именем домена**.

Так что при обновлении сертификатов программа должна **подтвердить** центру сертификации (Let's Encrypt), что обновление запросил **"владелец", который контролирует этот домен**.

Есть несколько путей осуществления этого. Самые популярные из них:

* **Изменение записей DNS**.
    * Для такого варианта Ваша программа обновления должна уметь работать с API DNS-провайдера, обслуживающего Ваши DNS-записи. Не у всех провайдеров есть такой API, так что этот способ не всегда применим.
* **Запуск в качестве программы-сервера** (как минимум, на время обновления сертификатов) на публичном IP-адресе домена.
    * Как уже не раз упоминалось, только один процесс может прослушивать определённый порт определённого IP-адреса.
    * Это одна из причин использования прокси-сервера ещё и в качестве программы обновления сертификатов.
    * В случае, если обновлением сертификатов занимается другая программа, вам понадобится остановить прокси-сервер, запустить программу обновления сертификатов на сокете, предназначенном для прокси-сервера, настроить прокси-сервер на работу с новыми сертификатами и перезапустить его. Эта схема далека от идеальной, так как Ваши приложения будут недоступны на время отключения прокси-сервера.

Весь этот процесс обновления, одновременный с обслуживанием запросов, является одной из основных причин, по которой желательно иметь **отдельную систему для работы с HTTPS** в виде прокси-сервера завершения TLS, а не просто использовать сертификаты TLS непосредственно с сервером приложений (например, Uvicorn).

## Резюме


#Criptografia utilizando cifra de César
#Deslocamento tipo inteiro
deslocamento = int(input("Digite o deslocamento: "))
#Texto tipo string
texto = input("Digite o texto a ser criptografado: ")
texto_criptografado =""
#For = para
for letra in texto:
#if = se
#a função isupper() verifica se todos os caracteres na string estão em maiúsculas
    if letra.isupper():
#A função chr() em Python retorna uma string que representa um caractere cujo ponto de código Unicode é o inteiro especificado
#A função ord() em Python retorna o número que representa o código Unicode de um caractere específico.
#A função lower()transforma todos carcteres em minusculo
        letra_criptografada = chr((ord(letra.lower())+deslocamento - 97)%26+65)
#elif = senão se
#A função islower() em Python verifica se todos os caracteres de uma string estão em minúsculas. Ele retorna True se todos os caracteres forem minúsculo.
    elif letra.islower():
        letra_criptografada = chr((ord(letra)+deslocamento-97)%26+97)
#else = senão
    else: letra_criptografada = letra
    texto_criptografado += letra_criptografada
#Imprimir
    print("Texto criptografado:", texto_criptografado)


buffer miss.
//
// Function:
//	Do a virtual fetch of the PTE, and fill the DTB if the PTE is valid.
//	Can trap into DTBMISS_DOUBLE.
//	This routine can use the PALshadow registers r8, r9, and r10
//

        HDW_VECTOR(PAL_DTB_MISS_ENTRY)
Trap_Dtbmiss_Single:
        mfpr	r8, ev5__va_form      	// Get virtual address of PTE - 1 cycle delay.  E0.
        mfpr    r10, exc_addr           // Get PC of faulting instruction in case of error.  E1.

//	DEBUGSTORE(0x45)
//	DEBUG_EXC_ADDR()
                                        // Real MM mapping
        mfpr    r9, ev5__mm_stat	// Get read/write bit.  E0.
        mtpr	r10, pt6		// Stash exc_addr away

pal_dtb_ldq:
        ld_vpte r8, 0(r8)             	// Get PTE, traps to DTBMISS_DOUBLE in case of TBmiss
        nop				// Pad MF VA

        mfpr	r10, ev5__va            // Get original faulting VA for TB load.  E0.
        nop

        mtpr    r8, ev5__dtb_pte       	// Write DTB PTE part.   E0.
        blbc    r8, invalid_dpte_handler    // Handle invalid PTE

        mtpr    r10, ev5__dtb_tag      	// Write DTB TAG part, completes DTB load.  No virt ref for 3 cycles.
        mfpr	r10, pt6

                                        // Following 2 instructions take 2 cycles
        mtpr    r10, exc_addr           // Return linkage in case we trapped.  E1.
        mfpr	r31,  pt0		// Pad the write to dtb_tag

        hw_rei                          // Done, return

//
// DTBMISS_DOUBLE - Dstream Double TBmiss Trap Entry Point
//
//
// DTBMISS_DOUBLE - offset 0280
// Entry:
//	Vectored into via hardware trap on Double TBmiss from single
//      miss flows.
//
//	r8   - faulting VA
//	r9   - original MMstat
//	r10 - original exc_addr (both itb,dtb miss)
//	pt6 - original exc_addr (dtb miss flow only)
//	VA IPR - locked with original faulting VA
//
// Function:
// 	Get PTE, if valid load TB and return.
//	If not valid then take TNV/ACV exception.
//
//	pt4 and pt5 are reserved for this flow.
//
//
//

        HDW_VECTOR(PAL_DOUBLE_MISS_ENTRY)
Trap_Dtbmiss_double:
        mtpr 	r8, pt4			// save r8 to do exc_addr check
        mfpr	r8, exc_addr
        blbc	r8, Trap_Dtbmiss_Single	//if not in palmode, should be in the single routine, dummy!
        mfpr	r8, pt4			// restore r8
        nop
        mtpr	r22, pt5		// Get some scratch space. E1.
                                        // Due to virtual scheme, we can skip the first lookup and go
                                        // right to fetch of level 2 PTE
        sll     r8, (64-((2*page_seg_size_bits)+page_offset_size_bits)), r22  // Clean off upper bits of VA
        mtpr	r21, pt4		// Get some scratch space. E1.

        srl    	r22, 61-page_seg_size_bits, r22 // Get Va<seg1>*8
        mfpr	r21, pt_ptbr		// Get physical address of the page table.


up.form.submitting': 'ගිණුම සෑදීම...',
  'signup.form.alreadyHaveAccount': 'දැනටමත් ගිණුමක් තිබේද?',
  'signup.form.signInHere': 'මෙහි ඇතුළු වන්න',
  'signup.form.passwordStrong': 'ශක්තිමත් මුරපදය',
  'signup.password.minLength': 'අවම වශයෙන් {minLength} අකුරු',
  'signup.password.uppercase': 'අවම වශයෙන් එක් විශාල අකුරක්',
  'signup.password.lowercase': 'අවම වශයෙන් එක් කුඩා අකුරක්',
  'signup.password.numbers': 'අවම වශයෙන් එක් ඉලක්කමක්',
  'signup.password.specialChar': 'අවම වශයෙන් එක් විශේෂ අකුරක්',
  'signup.validation.firstName.required': 'මුල් නම අවශ්‍ය වේ',
  'signup.validation.firstName.minLength': 'මුල් නම අවම වශයෙන් අකුරු 2 ක් විය යුතුය',
  'signup.validation.lastName.required': 'අවසන් නම අවශ්‍ය වේ',
  'signup.validation.lastName.minLength': 'අවසන් නම අවම වශයෙන් අකුරු 2 ක් විය යුතුය',
  'signup.validation.email.requ


，被“58112”头头指使青年徒工抓走，被棍棒打得周身青肿。

   7月5日　报社“58112”宣传组印发《群魔乱舞，鬼蜮成灾——广西日报“五洲震荡”等组织是什么货色》的打印传单，说“五洲震荡”50多人（当时实际不止此数），其中40多人有所谓“政治问题或严重问题”，具体点了18个人的名，强加上“叛徒”、“反动党团骨干”、“伪军官”、“对党不满分子”、“杂家”等诬陷不实之辞。还凭空捏造说，在何家松的保护下，“三反分子钟林得意忘形，亲自跑到‘4·22’指挥部表丑态，凭着一纸声明，马上得到‘解放’”。钟林当时通过写《思想汇报》，就一些传单、广播诬蔑他支持“4·22”一事，向报社军管小组表态，提出抗议。

   7月11日　报社“58112”致电中央文革、周总理，要求“4·22”执行广西两派10点协议，撤离报社。

   7月20日　“4·22”办的《广西日报》刊载新华社电稿《解放军领导机关和驻京三军指战员决心完成毛主席交给的伟大历史任务》，第一次提出，人民解放军“始终把全歼党内最大的一小撮走资本主义道路当权派和军内一小撮反革命修正主义分子当作是头等重要的伟大历史任务”。

   7月25日　“4·22”办的《广西日报》刊登新华社关于“七·二〇”事件报道，消息中提出“把混进党里政府里军队里一小撮走资本主义道路当权派全部揪出来”的口号。从这时起至7月31日，“4·22”的《广西日报》刊载的中央两报一刊社论，连续不断地提出“揪”党内军内一小撮走资本主义道路当权派。

   7月26日　“58112”办的《炮声隆》发表社论《坚决打倒贺龙、陈再道》。

   8月5日　“联指”指挥部酝酿攻打和占领“422”控制的报社大�


tream GetInputStream(TcpClient tcpClient)
        {
            return GenerateStreamFromString(this.Request.ToString());
        }

        protected override Stream GetOutputStream(TcpClient tcpClient)
        {
            return new MemoryStream();
        }

        protected override HttpResponse RouteRequest(Stream inputStream, Stream outputStream, HttpRequest request)
        {
            this.Response = base.RouteRequest(inputStream, outputStream, request);

            return this.Response;

        }

        private Stream GenerateStreamFromString(string s)
        {
            MemoryStream stream = new MemoryStream();
            StreamWriter writer = new StreamWriter(stream);
            writer.Write(s);
            writer.Flush();
            stream.Position = 0;
            return stream;
        }
    }
}


t[] docMap; // use getDocMap()

		internal SegmentMergeInfo(int b, TermEnum te, IndexReader r)
		{
			base_Renamed = b;
			reader = r;
			termEnum = te;
			term = te.Term();
		}

		// maps around deleted docs
		internal int[] GetDocMap()
		{
			if (docMap == null)
			{
				// build array which maps document numbers around deletions
				if (reader.HasDeletions())
				{
					int maxDoc = reader.MaxDoc();
					docMap = new int[maxDoc];
					int j = 0;
					for (int i = 0; i < maxDoc; i++)
					{
						if (reader.IsDeleted(i))
							docMap[i] = - 1;
						else
							docMap[i] = j++;
					}
				}
			}
			return docMap;
		}

		internal TermPositions GetPositions()
		{
			if (postings == null)
			{
				postings = reader.TermPositions();
			}
			return postings;
		}

		internal bool Next()
		{
			if (termEnum.Next())
			{
				term = termEnum.Term();
				return true;
			}
			else
			{
				term = null;
				return false;
			}
		}

		internal void  Close()
		{
			termEnum.Close();
			if (postings != null)
			{
				postings.Close();
			}
		}
	}
}


es">substyles
	are provisional features.

       Release 3.2.4

	Released 17 January 2013.

	Caret line highlight can optionally remain visible when window does not have focus.
	Feature #964.

	Delegate mechanism for notifications added on Cocoa.

	NUL characters in selection are copied to clipboard as spaces to avoid truncating
	at the NUL.
	Bug #1289.

	C++ lexer fixes problem with showing inactive sections when preprocessor lines contain trailing comment.
	Bug #1413.

	C++ lexer fixes problem with JavaScript regular expressions with '/' in character ranges.
	Bug #1415.

	LaTeX folder added.
	Feature #970.

	LaTeX lexer improves styling of math environments.
	Feature #970.

	MySQL lexer implements hidden commands.

	Only produce a single undo step when autocompleting a single word.
	Bug #1421.

	Fixed crash when printing lines longer than 8000 characters.
	Bug #1430.

	Fixed problem in character movement extends selection mode where reversing
	direction collapsed the selection.

	Memory issues fixed on Cocoa, involving object ownership,
	lifetime of timers, and images held by the info bar.
	Bug #1436.

	Cocoa key binding for Alt+Delete changed to delete previous word to be more compatible with
	platform standards.

	Fixed crash on Cocoa with scrollbar when there is no scrolling possible.
	Bug #1416.

	On Cocoa with retina display fixed positioning of autocompletion lists.

	Fixed SciTE on Windows failure to run a batch file with a name containing a space by
	quoting the path in the properties file.
	Bug #1423.

	Fixed scaling bug when printing on GTK+.
	Bug #1427.

	SciTE on GTK toolbar.detachable feature removed.

	Fixed some background saving bugs in SciTE.
	Bug #1366.


place_dialog->whole_word, replace_dialog->match_case);
  });

  replace_dialog->Bind(wxEVT_FIND_REPLACE, [replace_dialog, replace](wxFindDialogEvent & event) {
    replace_dialog->whole_word = (event.GetFlags() & wxFindReplaceFlags::wxFR_WHOLEWORD) == wxFindReplaceFlags::wxFR_WHOLEWORD;
    replace_dialog->match_case = (event.GetFlags() & wxFindReplaceFlags::wxFR_MATCHCASE) == wxFindReplaceFlags::wxFR_MATCHCASE;
    replace_dialog->find_string = event.GetFindString();
    replace_dialog->replace_string = event.GetReplaceString();
    replace(xtd::drawing::point(replace_dialog->GetPosition().x, replace_dialog->GetPosition().y), xtd::convert_string::to_string(replace_dialog->find_string.c_str().AsWChar()), xtd::convert_string::to_string(replace_dialog->replace_string.c_str().AsWChar()), false, replace_dialog->whole_word, replace_dialog->match_case);
  });

  replace_dialog->Bind(wxEVT_FIND_REPLACE_ALL, [replace_dialog, replace](wxFindDialogEvent & event) {
    replace_dialog->whole_word = (event.GetFlags() & wxFindReplaceFlags::wxFR_WHOLEWORD) == wxFindReplaceFlags::wxFR_WHOLEWORD;
    replace_dialog->match_case = (event.GetFlags() & wxFindReplaceFlags::wxFR_MATCHCASE) == wxFindReplaceFlags::wxFR_MATCHCASE;
    replace_dialog->find_string = event.GetFindString();
    replace_dialog->replace_string = event.GetReplaceString();
    replace(xtd::drawing::point(replace_dialog->GetPosition().x, replace_dialog->GetPosition().y), xtd::convert_string::to_string(replace_dialog->find_string.c_str().AsWChar()), xtd::convert_string::to_string(replace_dialog->replace_string.c_str().AsWChar()), true, replace_dialog->whole_word, replace_dialog->match_case);
  });

  if (location.has_value())
    replace_dialog->SetPosition({location.value().x, location.value().y});

  return reinterpret_cast<intptr>(replace_dialog);
}

void replace_dialog::close(intptr dialog) {
  if (!dialog || !wxTheApp) return;

  reinterpret_cast<wxReplaceDialog*>(dialog)->Hide();
}

void replace_dialog::destroy(intptr dialog) {
  if (!dialog || !wxTheApp) return;

  auto data = reinterpret_cast<wxReplaceDialog*>(dialog)->GetData();
  reinterpret_cast<wxReplaceDialog*>(dialog)->Destroy();
  delete data;
}

void replace_dialog::show(intptr& dialog) {
  if (!dialog || !wxTheApp) return;

  auto& old_dialog = *reinterpret_cast<wxReplaceDialog*>(dialog);
  dialog = create(old_dialog.hwnd, xtd::drawing::point(old_dialog.GetPosition().x, old_dialog.GetPosition().y), xtd::convert_string::to_string(old_dialog.GetTitle().c_str().AsWChar()), xtd::convert_string::to_string(old_dialog.find_string.c_str().AsWChar()), xtd::convert_string::to_string(old_dialog.replace_string.c_str().AsWChar()), (old_dialog.style & wxFR_NOWHOLEWORD) != wxFR_NOWHOLEWORD, (old_dialog.style & wxFR_NOMATCHCASE) != wxFR_NOMATCHCASE, old_dialog.whole_word, old_dialog.match_case, old_dialog.find_next, old_dialog.replace, old_dialog.dialog_closed);
  old_dialog.Destroy();

  reinterpret_cast<wxReplaceDialog*>(dialog)->Show();
}
#define __XTD_FORMS_


(11), function(actor, triggerflee)
	if actor.Owner == USSR and actor.Type ~= "badr" and actor.Type ~= "u2" and actor.Type ~= "camera.spyplane" then
		Trigger.RemoveProximityTrigger(triggerflee)
		Media.DisplayMessage(UserInterface.GetFluentMessage("convoy-truck-escaping"))
		EscapeCamera = Actor.Create("camera", true, { Owner = USSR, Location = TruckAlarm.Location })
		Media.PlaySoundNotification(USSR, "AlertBleep")
		Utils.Do(TruckEscape, function(waypoint)
			StolenTruck.Move(waypoint.Location)
		end)

		Trigger.AfterDelay(DateTime.Seconds(5), function()
			EscapeCamera.Destroy()
		end)

		Trigger.OnIdle(StolenTruck, function()
			Utils.Do(BackupRoute, function(waypoint)
				StolenTruck.Move(waypoint.Location)
			end)
		end)
	end
end)

Trigger.OnEnteredFootprint(({ TruckEscapeWest.Location } or { TruckEscapeEast.Location }), function(actor, triggerlose)
	if actor.Owner == Greece and actor.Type == "truk" then
		Trigger.RemoveFootprintTrigger(triggerlose)
		actor.Destroy()
		USSR.MarkFailedObjective(DestroyTruck)
	end
end)

Tick = function()
	Greece.Cash = 50000
	Germany.Cash = 50000
end

WorldLoaded = function()
	USSR = Player.GetPlayer("USSR")
	Germany = Player.GetPlayer("Germany")
	Greece = Player.GetPlayer("Greece")

	InitObjectives(USSR)

	DestroyTruck = AddPrimaryObjective(USSR, "destroy-stolen-convoy-truck")
	DefendCommand = AddPrimaryObjective(USSR, "defend-forward-command-center")

	Camera.Position = DefaultCameraPosition.CenterPosition

	MissionStart()
	ActivateAI()
end


in.Template, &out.Template, c); err != nil {
			return err
		}
		if in.VolumeClaimTemplates != nil {
			in, out := &in.VolumeClaimTemplates, &out.VolumeClaimTemplates
			*out = make([]api.PersistentVolumeClaim, len(*in))
			for i := range *in {
				if err := api.DeepCopy_api_PersistentVolumeClaim(&(*in)[i], &(*out)[i], c); err != nil {
					return err
				}
			}
		} else {
			out.VolumeClaimTemplates = nil
		}
		out.ServiceName = in.ServiceName
		return nil
	}
}

func DeepCopy_apps_PetSetStatus(in interface{}, out interface{}, c *conversion.Cloner) error {
	{
		in := in.(*PetSetStatus)
		out := out.(*PetSetStatus)
		if in.ObservedGeneration != nil {
			in, out := &in.ObservedGeneration, &out.ObservedGeneration
			*out = new(int64)
			**out = **in
		} else {
			out.ObservedGeneration = nil
		}
		out.Replicas = in.Replicas
		return nil
	}
}
// +build !ignore_autogenerated

/*
Copyright 2016 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// This file was autogenerated by conversion-gen. Do not edit it manually!

package v1alpha1

import (
	"github.com/Mirantis/k8s-AppController/pkg/client/petsets/apis/apps"
	api "k8s.io/client-go/pkg/api"
	v1 "k8s.io/client-go/pkg/api/v1"
	conversion "k8s.io/client-go/pkg/conversion"
	runtime "k8s.io/client-go/pkg/runtime"
)

func init() {
	SchemeBuilder.Register(RegisterConversions)
}

// RegisterConversions adds conversion functions to the given scheme.
// Public to allow building arbitrary schemes.
func RegisterConversions(scheme *runtime.Scheme) error {
	return scheme.AddGeneratedConversionFuncs(
		Convert_v1alpha1_PetSet_To_apps_PetSet,
		Convert_apps_PetSet_To_v1alpha1_PetSet,
		Convert_v1alpha1_PetSetList_To_apps_PetSetList,
		Convert_apps_PetSetList_To_v1alpha1_PetSetList,
		Convert_v1alpha1_PetSetSpec_To_apps_PetSetSpec,
		Convert_apps_PetSetSpec_To_v1alpha1_PetSetSpec,
		Convert_v1alpha1_PetSetStatus_To_apps_PetSetStatus,
		Convert_apps_PetSetStatus_To_v1alpha1_PetSetStatus,
	)
}

func autoConvert_v1alpha1_PetSet_To_apps_PetSet(in *PetSet, out *apps.PetSet, s conversion.Scope) error {
	SetDefaults_PetSet(in)
	if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil {
		return err
	}
	// TODO: Inefficient conversion - can we


9384765625, 0.255859375, 0.2998046875, false, false},
	},
	["interface/questionframe/warboardbackground"] = { -- 1823937
		["warboard-background"] = {597, 502, 0.0009765625, 0.583984375, 0.001953125, 0.982421875, false, false},
	},
	["interface/questsharing/questsharingassets"] = { -- 3064322
		["QuestSharing-QuestPane-ModifiersBG"] = {74, 42, 0.791015625, 0.935546875, 0.6171875, 0.9453125, false, false},
		["QuestSharing-QuestLog-Replay"] = {19, 16, 0.173828125, 0.2109375, 0.78125, 0.90625, false, false},
		["QuestSharing-QuestPane-ModifiersReplayIconOff"] = {20, 20, 0.494140625, 0.533203125, 0.8359375, 0.9921875, false, false},
		["QuestSharing-QuestLog-Details-ModifiersBG"] = {58, 26, 0.494140625, 0.607421875, 0.6171875, 0.8203125, false, false},
		["QuestSharing-QuestLog-Loot"] = {20, 20, 0.130859375, 0.169921875, 0.78125, 0.9375, false, false},
		["QuestSharing-QuestLog-Details-ModifiersReplayIconOff"] = {20, 20, 0.052734375, 0.091796875, 0.8359375, 0.9921875, false, false},
		["QuestSharing-Dialog-Portrait"] = {64, 64, 0.001953125, 0.126953125, 0.0390625, 0.5390625, false, false},
		["_QuestSharing-Dialog-Line"] = {8, 2, 0.0, 0.015625, 0.0078125, 0.0234375, true, false},
		["QuestSharing-QuestPane-ModifiersLootIconOff"] = {20, 20, 0.611328125, 0.650390625, 0.6171875, 0.7734375, false, false},
		["QuestSharing-ReplayIconOn"] = {20, 20, 0.611328125, 0.650390625, 0.7890625, 0.9453125, false, false},
		["QuestSharing-QuestLog-Details-ModifiersLootIconOff"] = {20, 20, 0.001953125, 0.041015625, 0.796875, 0.953125, false, false},
		["QuestSharing-QuestLog-Padlock"] = {24, 29, 0.224609375, 0.271484375, 0.7578125, 0.984375, false, false},
		["QuestSharing-ReplayIcon"] = {32, 29, 0.724609375, 0.787109375, 0.6171875, 0.84375, false, false},
		["QuestSharing-QuestLog-Background"] = {288, 51, 0.314453125, 0.876953125, 0.0390625, 0.4375, false, false},
		["QuestSharing-QuestLog-ButtonHighlight"] = {44, 44, 0.314453125, 0.400390625, 0.6171875, 0.9609375, false, false},
		["QuestSharing-QuestLog-Button"] = {44, 44, 0.224609375, 0.310546875, 0.3984375, 0.7421875, false, false},
		["QuestSharing-QuestLog-ButtonPressed"] = {44, 44, 0.880859375, 0.966796875, 0.0390625, 0.3828125, false, false},
		["QuestSharing-Padlock"] = {24, 29, 0.001953125, 0.048828125, 0.5546875, 0.78125, false, false},
		["Ques


)(v0)
	REG_L	a6, (MCONTEXT_GREGOFF + 10 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	a7, (MCONTEXT_GREGOFF + 11 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
#endif

	REG_L	s0, (MCONTEXT_GREGOFF + 16 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	s1, (MCONTEXT_GREGOFF + 17 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	s2, (MCONTEXT_GREGOFF + 18 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	s3, (MCONTEXT_GREGOFF + 19 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	s4, (MCONTEXT_GREGOFF + 20 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	s5, (MCONTEXT_GREGOFF + 21 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	s6, (MCONTEXT_GREGOFF + 22 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	s7, (MCONTEXT_GREGOFF + 23 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
#if ! defined (__PIC__) || _MIPS_SIM != _ABIO32
	REG_L	gp, (MCONTEXT_GREGOFF + 28 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
#endif
	REG_L	sp, (MCONTEXT_GREGOFF + 29 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	fp, (MCONTEXT_GREGOFF + 30 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	ra, (MCONTEXT_GREGOFF + 31 * MCONTEXT_GREGSZ + MCONTEXT_GREGS)(v0)
	REG_L	t9, (MCONTEXT_GREGOFF + MCONTEXT_PC)(v0)

	move	v0, zero
	jr	t9

99:
#ifdef __PIC__
	PTR_LA	t9, JUMPTARGET (__syscall_error)
	RESTORE_GP64_STACK
	PTR_ADDIU sp, FRAMESZ
	cfi_adjust_cfa_offset (-FRAMESZ)
	jr	t9

#else  /* ! __PIC__ */

	j	JUMPTARGET (__syscall_error)
#endif /* ! __PIC__ */
PSEUDO_END (__swapcontext)

weak_alias (__swapcontext, swapcontext)


xoffset. The xoffset avoids the need of shifting the
   * scanlines into place.
   */
  public final native int getXOffset();

  public native final int getBytesPerLine();
  public native final int getBitsPerPixel();

  public native final int getImageByteOrder();
  public native final int getBitmapBitOrder();
  public native final int getBitmapUnit();
  public native final int getBitmapPad();

  // True/Direct Color specific:
  public native int getRedMask();
  public native int getGreenMask();
  public native int getBlueMask();

  /**
   * Set a pixel value at a given position in the image. This method
   * is slow. Don't use it, except as a fall-back.
   */
  public native final void setPixel(int x, int y, int pixel);

  public String toString()
  {
    String format;
    switch(getFormat())
      {
      case ZPIXMAP_FORMAT:
	format = "ZPixmapFormat";
	break;
      default:
	format = "unknown";
      }

    String imageByteOrder;
    switch(getImageByteOrder())
      {
      case LEAST_SIGNIFICANT_B_FIRST_ORDER:
	imageByteOrder = "leastSignificantByteFirst";
	break;
      case MOST_SIGNIFICANT_B_FIRST_ORDER:
	imageByteOrder = "mostSignificantByteFirst";
	break;
      default:
	imageByteOrder = "unknwon";
      }

    String bitmapBitOrder;
    switch(getBitmapBitOrder())
      {
      case LEAST_SIGNIFICANT_B_FIRST_ORDER:
	bitmapBitOrder = "leastSignificantBitFirst";
	break;
      case MOST_SIGNIFICANT_B_FIRST_ORDER:
	bitmapBitOrder = "mostSignificantBitFirst";
	break;
      default:
	bitmapBitOrder = "unknown";
      }

    return getClass().getName() + "[" + format +
      ", width=" + getWidth() +
      ", height=" + getHeight() +
      ", bytesPerLine=" + getBytesPerLine() +
      ", xoffset=" + getXOffset() +
      ", depth=" + getDepth() +
      ", bitsPerPixel=" + getBitsPerPixel() +
      ", bitmapUnit=" + getBitmapUnit() +
      ", bitmapPad=" + getBitmapPad() +
      ", byteOrder=" + imageByteOrder +
      ", bitOrder=" + bitmapBitOrder +
      "]";
  }
}
/* Copyright (C) 2000  Free Software Foundation

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

package gnu.gcj.xlib;

/**
 * An X11 Pixmap. A pixmap is an offscreen drawable that resides on
 * the X server. A pixmap is bound to the screen it was created for.
 *
 * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
 */
public class Pixmap extends Drawable
{
  public Pixmap(XImage image, Screen screen)
  {
    this(screen.getRootWindow(),
	 image.getWidth(), image.getHeight(),
	 image.getDepth());

    /* FIXME: don't create a new GC all the time.  This might actually
    not be as bad as initially believed.  The GC cache of Xlib makes
    this operation less costly. */
    GC gc = GC.create (this);

    gc.putImage(image, 0, 0, 0, 0, image.getWidth(), image.getHeight());
  }

  public Pixmap(Drawable sameScreenAs, int width, int height, int depth)
  {
    super(sameScreenAs.getDisplay(),
	  createXID(sameScreenAs, width, height, depth));
  }

  protected static native int createXID(Drawable sameScreenAs,
					int width, int height, int depth);

  protected native void finalize();
}
/* ValueHandlerImpl.java --
   Copyright (C) 2002 Free Software Foundation, Inc.

This file is part of GNU Classpath.


29))",
  longitude: 0,
  latitude: 0,
  featureType: "POLYGON",
  isEmpty: false,
  isNull: false
};
const GEO_POLYGON_HOLE_WKT_VALUE = {
  geo:
    "POLYGON((-56.1510479 -34.8936929,-56.1508977 -34.8962536,-56.1475503 -34.8959984,-56.1510479 -34.8936929),(-56.1536336 -34.8943177,-56.1529899 -34.8952328,-56.1519814 -34.8947929,-56.1527002 -34.8938513,-56.1536336 -34.8943177))",
  longitude: 0,
  latitude: 0,
  featureType: "POLYGON",
  isEmpty: false,
  isNull: false
};

describe("Test fromString() method checking longitude, latitude and featureType properties", () => {
  const testCases: Array<{
    geo: string;
    longitude: number;
    latitude: number;
    featureType: string;
  }> = [
    GEO_EMPTY,
    GEO_POINT_COORD_ZERO,
    GEO_POINT_COORD_VALUE,
    GEO_POINT_WKT_ZERO,
    GEO_POINT_WKT_VALUE,
    GEO_LINE_WKT_VALUE,
    GEO_POLYGON_SIMPLE_WKT_VALUE,
    GEO_POLYGON_HOLE_WKT_VALUE,
    {
      geo: "  -56.163740158081055   ,   -34.92478600243492  ",
      longitude: -34.92478600243492,
      latitude: -56.163740158081055,
      featureType: "POINT"
    },
    {
      geo: "POINT  (    -34.92478600243492    -56.163740158081055   )",
      longitude: -34.92478600243492,
      latitude: -56.163740158081055,
      featureType: "POINT"
    },
    {
      geo:
        "LINESTRING  ( -56.16090774536133   -34.928797162523516  , -56.1650276184082 -34.89494244739731  )",
      longitude: 0,
      latitude: 0,
      featureType: "LINE"
    },
    {
      geo:
        "POLYGON  (  (-56.1510479 -34.8936929  ,  -56.1508977 -34.8962536,   -56.1475503 -34.8959984   ,-56.1510479 -34.8936929))",
      longitude: 0,
      latitude: 0,
      featureType: "POLYGON"
    },
    {
      geo:
        "POLYGON((-56.1510479 -34.8936929,-56.1508977 -34.8962536,-56.1475503 -34.8959984,-56.1510479 -34.8936929)   ,   (-56.1536336 -34.8943177  ,  -56.1529899 -34.8952328,-56.1519814 -34.8947929,-56.1527002 -34.8938513,-56.1536336 -34.8943177))",
      longitude: 0,
      latitude: 0,
      featureType: "POLYGON"
    }
  ];

  for (const testCase of testCases) {
    it(`Value:${testCase.geo} Longitude:${testCase.longitude} Latitude:${testCase.latitude} FeatureType:${testCase.featureType}`, () => {
      const geo = Geography.fromString(testCase.geo);
      const longitude = geo.longitude;
      const latitude = geo.latitude;
      const featureType = geo.featureType;

      expect(longitude).toBe(testCase.longitude);


ümantasyonlarla birlikte sistemin normal işleyişi için gerekli olan dosyaların bulunduğu dizindir.

İlk zamanlar ***lib bin sbin*** dizinleri ayrı ayrı tutuluyorken, hepsine tek bir noktadan ulaşma fikri dolayısıyla tüm dizinler aslında ***usr*** altında taşınmıştır. Bizim ana dizin altında ***lib bin sbin*** olarak gördüğünüz dizinler de aslında geriye dönük uyumluluk için ana dizinde gözüken ama ***usr*** klasörüne sembolik olarak bağlı olan dizinlerdir. Yani bu dizinlerin asılları da ***usr*** dizini altında.

Bu durumu gözlemlemek için `ls -ld /*` komutunu girebiliriz.

![usr.webp]({{ site.url }}/egitim/temel-linux/dizin/usr.webp){:class="responsive img-zoomable"}
Burada benim kırmızı kutucuklar içine alarak özellikle belirttiğim gibi, ***lib bin sbin*** dizinleri aslında ***/usr*** dizini altında bulunuyor. Ana dizin altında hala bu dizinlerin sembolik bağlantılarını görüyor olma nedenimiz geriye dönük uyumluluktur.

Geçmişte bu dizinler kendi başına ana dizin(***/***) altında bulunduğu için geçmişten beri aynı konfigürasyonlar ile çalışan araç ve yapıların çalışmaya devam edebilmesi için yani geriye dönük uyumluluk için sembolik olarak hala ana dizin altında gözüküyorlar. Örneğin bir araç binary dosyaya erişmek üzere ***/bin*** dizinini kontrol ediyorsa, otomatik olarak ***/usr/bin*** dizinine yönlendirilerek sorunsuzca aracın çalışmaya devam etmesi sağlanmış oluyor.

## /opt

***/opt*** klasörü harici olarak kurulan bazı araçların(üçüncü taraf yazılımlar) kendi isimlerindeki klasörlerde tüm gerekli dosyalarının barındırıldığı dizindir. Yani ***usr*** dizininde olduğu gibi çalıştırılabilir dosyası ***bin*** dizinine ya da kütüphane dosyaları ***lib*** dizinine eklenmez. İlgili aracın tüm dosyaları ***opt*** dizini altındaki kendi ismiyle oluşturulmuş olan klasör içinde bulunur.

## /media ve /mnt

***media*** ve ***mnt*** dizinlerinin her ikisi de medya aygıtlarının bağlanması için kullanılıyor. Aralarındaki fark ***media*** dizini “USB bellek, harici disk, CD/DVD sürücüsü vb.” gibi harici çıkarılabilir medya aygıtlarını bağlamak için kullanılırken, ***mnt*** dizini ise genellikle geçici olarak disk bölümlerini bağlamak için kullanılan bir dizindir.

## <


TableSkill = TableSkill or {
[11] = { ["Target_type"] = 0, ["Attack_Types"] = 2, ["Attack_Distance"] = 80, ["Att_Range"] = 30, ["Angle"] = 90, ["Attack_Coefficient"] = 1000, ["Grade_Coefficient"] = 0, ["Skill_Name"] = [[普通攻击1]], ["ActionName"] = [[Attack1]], ["Ability_Describe"] = [[正切]], ["Skill_CD"] = 313, ["Public_CD"] = 0, ["SkillType"] = 1, ["Category"] = 2, ["Break_Move"] = 1, ["Attack_Number"] = 2, ["Repel_Range"] = 0, ["Need_Attribute"] = [[suffer_plusrate]], ["Sound"] = 7},
[12] = { ["Target_type"] = 0, ["Attack_Types"] = 2, ["Attack_Distance"] = 80, ["Att_Range"] = 30, ["Angle"] = 90, ["Attack_Coefficient"] = 1000, ["Grade_Coefficient"] = 0, ["Skill_Name"] = [[普通攻击2]], ["ActionName"] = [[Attack2]], ["Ability_Describe"] = [[反切]], ["Skill_CD"] = 695, ["Public_CD"] = 0, ["SkillType"] = 1, ["Category"] = 2, ["Break_Move"] = 1, ["Attack_Number"] = 2, ["Repel_Range"] = 0, ["Need_Attribute"] = [[suffer_plusrate]], ["Sound"] = 7},
[13] = { ["Target_type"] = 0, ["Attack_Types"] = 2, ["Attack_Distance"] = 80, ["Att_Range"] = 30, ["Angle"] = 90, ["Attack_Coefficient"] = 1000, ["Grade_Coefficient"] = 0, ["Skill_Name"] = [[普通攻击3]], ["ActionName"] = [[Attack3]], ["Ability_Describe"] = [[劈]], ["Skill_CD"] = 660, ["Public_CD"] = 0, ["SkillType"] = 1, ["Category"] = 2, ["Break_Move"] = 1, ["Attack_Number"] = 2, ["Repel_Range"] = 0, ["Need_Attribute"] = [[suffer_plusrate]], ["Sound"] = 7},
[21] = { ["Target_type"] = 0, ["Attack_Types"] = 2, ["Attack_Distance"] = 100, ["Att_Range"] = 30, ["Angle"] = 90, ["Attack_Coefficient"] = 1000, ["Grade_Coefficient"] = 0, ["Skill_Name"] = [[普通攻击1]], ["ActionName"] = [[Attack1]], ["Ability_Describe"] = [[枪普通攻击]], ["Skill_CD"] = 1125, ["Public_CD"] = 0, ["SkillType"] = 2, ["Category"] = 2, ["Break_Move"] = 1, ["Attack_Number"] = 2, ["Repel_Range"] = 0, ["Need_Attribute"] = [[suffer_plusrate]]},
[1010] = { ["Target_type"] = 0, ["Attack_Types"] = 2, ["Attack_Distance"] = 300, ["Att_Range"] = 30, ["Angle"] = 90, ["Attack_Coefficient"] = 1500, ["Grade_Coefficient"] = 10, ["Skill_Name"] = [[剑气]], ["Icon_Path"] = [[jianqi]], ["ActionName"] = [[Skill1]], ["Ability_Describe"] = [[向前方施放一道剑气，对前方300范围内敌人造成伤害。最大攻击目标为3]], ["Skill_CD"] = 3000, ["Public_CD"] = 2000, ["SkillType"] = 1, ["Touch_Buff"] = 0, ["Check_Buff"] = 0, ["Effects_ID"] = 30,


 string;
  minzoom?: number;
  maxzoom?: number;
  filter?: Expression;
}

export interface ILinePaint {
  'line-width'?: NumberExpression;
  'line-dasharray'?: StringExpression;
  'line-color'?: StringExpression;
  'line-opacity'?: NumberExpression;
  'line-cap'?: StringExpression;
  'line-join'?: StringExpression;
  'line-miter-limit'?: NumberExpression;
}

export interface ILineLayout {
  visibility?: StringExpression;
}

export interface ILineStyle extends IGeneralStyle {
  type: 'line';
  paint?: ILinePaint;
  layout?: ILineLayout;
}

export interface IFillPaint {
  'fill-color'?: StringExpression;
  'fill-opacity'?: NumberExpression;
}

export interface IFillLayout {
  visibility?: StringExpression;
}

export interface IFillStyle extends IGeneralStyle {
  type: 'fill';
  paint?: IFillPaint;
  layout?: IFillLayout;
}

export interface ICirclePaint {
  'circle-radius'?: NumberExpression;
  'circle-stroke-color'?: StringExpression;
  'circle-stroke-opacity'?: NumberExpression;
  'circle-stroke-width'?: NumberExpression;
  'circle-color'?: StringExpression;
  'circle-opacity'?: NumberExpression;
}

export interface ICircleLayout {
  visibility?: StringExpression;
}

export interface ICircleStyle extends IGeneralStyle {
  type: 'circle';
  paint?: ICirclePaint;
  layout?: ICircleLayout;
}

export interface ITextPaint {}

export interface ITextLayout {
  visibility?: StringExpression;
  'text-field'?: StringExpression;
  'text-font'?: StringExpression;
  'text-size'?: NumberExpression;
  'text-halo-color'?: StringExpression;
  'text-halo-opacity'?: NumberExpression;
  'text-halo-width'?: NumberExpression;
  'text-color'?: StringExpression;
  'text-opacity'?: NumberExpression;
  'text-offset'?: [NumberExpression, NumberExpression];
}

export interface ITextStyle extends IGeneralStyle {
  type: 'text';
  paint?: ITextPaint;
  layout?: ITextLayout;
}

export interface IIconPaint {}

export interface IIconLayout {
  'icon-image'?: StringExpression;
  'icon-size'?: StringExpression;
}

export interface IIconStyle extends IGeneralStyle {
  type: 'icon';
  paint?: IIconPaint;
  layout?: IIconLayout;
}

export interface ISymbolPaint extends ITextPaint, IIconPaint {}

export interface ISymbolLayout extends ITextLayout, IIconLayout {}

export interface ISymbolStyle extends IGeneralStyle {
  type: 'symbol';
  paint?: ISymbolPaint;
  layout?: ISymbolLayout;
}
/*
属性装饰器表达式会在运行时当作函数被调用，传入下列2个参数：
1.对于静态成员来说是类的构造函数，对于实例成员是类的原型对象。
2.成员的名字。
 */
/*
属性描述符只能用来监视类中是否声明了某个名字的属性。
 */
namespace N010180060010 {

}import _ from 'lodash'
import { ActionReg, MN_ENV_ROOT, ResourceReg, TREE_ROOT } from "./constant"
import { Logger } from "./tsToyaml/logger"
import { LogInfo, LogType, WalkAstOptions, YamlNode, YamlNodeType, DumpConfig } from "./types"
import { isAction, isResource } from "./utils"

const logger = Logger.logger()

const jsonToAst1 = (json: Object): YamlNode[] => {

  const roots: YamlNode[] = []
  const errorList: LogInfo[] = []
  const parse = (startObj?: Object | Object[], parent?: YamlNode) => {

    if (!startObj) return

    const keys = Object.keys(startObj)
    const isArray = Array.isArray(startObj)
    const length = isArray ? (startObj as Object[]).length : (Object.keys(startObj)).length

    for (let i = 0; i < length; i++) {
      /**
         ar


object reports the document id and its\n new revision, as follows:\n
\n {\n   "id":"DocID",\n   "ok":true,\n   "rev":"4-2719fd41187c60762ff584761b714cfb"\n }\n
\n
\n',summary:"
  Deletes the specified document from a database.
",annotation_str:" %an:sequential",annotations:[{prefix:"an",ns:"http://zorba.io/annotations",name:"sequential",value:""}],updating:!1,parameters:[{name:"connection",type:"anyURI",occurrence:null,description:'
 A connection identifier
'},{name:"database",type:"string",occurrence:null,description:'
 A database name
'},{name:"document-id",type:"string",occurrence:null,description:'
 A document identifier
'},{name:"document-rev",type:"string",occurrence:null,description:'
 A document revision
'}],returns:{type:"object()",description:"An object which specifies the document id and its new revision"},errors:['<xqdoc:error xmlns:xqdoc="http://www.xqdoc.org/1.0">cloudant:AUTHORIZATION Authorization error</xqdoc:error>','<xqdoc:error xmlns:xqdoc="http://www.xqdoc.org/1.0">cloudant:DATABASE-NAME Invalid database name</xqdoc:error>','<xqdoc:error xmlns:xqdoc="http://www.xqdoc.org/1.0">cloudant:REVISION Specified revision is missing, invalid or not the latest.</xqdoc:error>','<xqdoc:error xmlns:xqdoc="http://www.xqdoc.org/1.0">cloudant:HTTP An HTTP error occurred when issuing the request</xqdoc:error>','<xqdoc:error xmlns:xqdoc="http://www.xqdoc.org/1.0">cloudant:RESPONSE An error occurred parsing the server response</xqdoc:error>','<xqdoc:error xmlns:xqdoc="http://www.xqdoc.org/1.0">cloudant:CONNECTION The specified connection does not exist</xqdoc:error>','<xqdoc:error xmlns:xqdoc="http://www.xqdoc.org/1.0">cloudant:INTERNAL Cloudant internal error</xqdoc:error>']},{isDocumented:!0,arity:5,name:"delete-document",qname:"cloudant:delete-document",signature:"($connection as anyURI, $database as string, $document-id as string, $document-rev as string, $options as object()) as object()",description:'
Deletes the specified document from a database.
\n
The latest document revision must be specified.
\n
This function allows to specify an additional options object.\n The following options are supported:\n
\n
database-owner: specifies the database owner (string, default: connection user).
\n
\n
\n
For example,\n
\n cloudant:delete-document($connection, "db", "DocID", "3-7c4740b4dcf26683e941d6641c00c39d",\n   {"database-owner": "username"})\n
.\n
\n <h4 xmlns:xqdoc="http://www.x


me: Name for this data split

        Returns:
            Dictionary of metrics
        """
        try:
            logger.info(f"Calculating metrics for {split_name} split...")
            logger.info(f"DEBUG: Metrics calculation - X shape: {X.shape}, y shape: {y.shape}")
            logger.info(f"DEBUG: Metrics calculation - X has NaN: {X.isnull().any().any()}, y has NaN: {y.isnull().any()}")
            logger.info(f"DEBUG: Metrics calculation - y stats: mean={y.mean():.6f}, std={y.std():.6f}, min={y.min():.6f}, max={y.max():.6f}")

            # Make predictions first to debug them
            predictions = model.predict(X)
            logger.info(f"DEBUG: Predictions shape: {predictions.shape}, predictions have NaN: {np.isnan(predictions).any()}")
            logger.info(f"DEBUG: Prediction stats: mean={np.mean(predictions):.6f}, std={np.std(predictions):.6f}, min={np.min(predictions):.6f}, max={np.max(predictions):.6f}")
            logger.info(f"DEBUG: Sample predictions (first 10): {predictions[:10]}")
            logger.info(f"DEBUG: Sample y_true (first 10): {y.values[:10]}")

            # Calculate correlation to understand relationship
            if len(y) > 1:
                correlation = np.corrcoef(y, predictions)[0, 1]
                logger.info(f"DEBUG: Correlation between y_true and predictions: {correlation:.6f}")

            # Note: evaluate_model returns more metrics than before.
            # We can filter them here if needed, or just return all of them.
            # For now, returning all seems fine.
            metrics = self.evaluator.evaluate_model(model, X, y)

            # Filter to only include metrics relevant to the old implementation if necessary
            # For example: metrics = {k: v for k, v in metrics.items() if k in ['r2', 'mse', 'mae', 'rmse', 'ic']}

            logger.info(f"{split_name} metrics: {metrics}")
            return metrics

        except Exception as e:
            logger.error(f"Failed to calculate metrics for {split_name}: {e}")
            return {}

    def _create_model_copy(self, model: BaseModel) -> BaseModel:
        """
        Create a copy of the model for cross-validation.

        Args:
            model: Original model

        Returns:
            Model copy
        """
        # Use the factory to create a new instance of the same type
        from ..base.model_factory import ModelFactory

        return ModelFactory.create(
            model.model_type,
            config=model.config.copy()
        )


blockHitDistance <= fluidHitDistance) blockHitResult else fluidHitResult
        },
        { raycastContext ->
            val vec = raycastContext.start.subtract(raycastContext.end)
            BlockHitResult.createMissed(
                raycastContext.end,
                Direction.getFacing(vec.x, vec.y, vec.z),
                BlockPos.ofFloored(raycastContext.end)
            )
        })
}

fun BlockPos.canStandOn(): Boolean {
    return this.getState()!!.isSideSolid(world, this, Direction.UP, SideShapeType.CENTER)
}

fun BlockState?.anotherChestPartDirection(): Direction? {
    if (this?.block !is ChestBlock) return null

    if (ChestBlock.getDoubleBlockType(this) === DoubleBlockProperties.Type.SINGLE) {
        return null
    }

    return ChestBlock.getFacing(this)
}

/**
 * Check if box is reaching of specified blocks
 */
inline fun Box.isBlockAtPosition(
    isCorrectBlock: (Block?) -> Boolean,
): Boolean {
    val blockPos = BlockPos.Mutable(0, floor(minY).toInt(), 0)

    for (x in floor(minX).toInt()..ceil(maxX).toInt()) {
        for (z in floor(minZ).toInt()..ceil(maxZ).toInt()) {
            blockPos.x = x
            blockPos.z = z

            if (isCorrectBlock(blockPos.getBlock())) {
                return true
            }
        }
    }

    return false
}

/**
 * Check if box intersects with bounding box of specified blocks
 */
inline fun Box.collideBlockIntersects(
    checkCollisionShape: Boolean = true,
    isCorrectBlock: (Block) -> Boolean
): Boolean {
    for (blockPos in collidingRegion) {
        val blockState = blockPos.getState()

        if (blockState == null || !isCorrectBlock(blockState.block)) {
            continue
        }

        if (!checkCollisionShape) {
            return true
        }

        val shape = blockState.getCollisionShape(mc.world, blockPos)

        if (shape.isEmpty) {
            continue
        }

        if (intersects(shape.boundingBox)) {
            return true
        }
    }

    return false
}

val Box.collidingRegion: BlockBox
    get() = BlockBox(
        this.minX.toInt(), this.minY.toInt(), this.minZ.toInt(),
        ceil(this.maxX).toInt(), ceil(this.maxY).toInt(), ceil(this.maxZ).toInt(),
    )

fun BlockState.canBeReplacedWith(
    pos: BlockPos,
    usedStack: ItemStack,
): Boolean {
    val placementContext =
        ItemPlacementContext(
            mc.player,
            Hand.MAIN_HAND,
            usedStack,
            BlockHitResult(Vec3d.of(pos), Direction.UP, pos, false),
        )

    return canReplace(
        placementContext,
    )
}

@Suppress("unused")
enum class SwingMode(
    override val choiceName: String,
    val serverSwing: Boolean,
) : NamedChoice, Consumer<Hand> {

    DO_NOT_HIDE("DoNotHide", true),
    HIDE_BOTH("HideForBoth", false),
    HIDE_CLIENT("HideForClient", true),
    HIDE_SERVER("HideForServer", false);

    fun swing(hand: Hand) = accept(hand)

    override fun accept(hand: Hand) {
        when (this) {
            DO_NOT_HIDE -> player.swingHand(hand)
            HIDE_BOTH -> {}
            HIDE_CLIENT -> network.sendPacket(HandSwingC2SPacket(hand))
            HIDE_SERVER -> player.swingHand(hand, false)
        }
    }
}

fun doPlacement(
    rayTraceResult: BlockHitResult,
    hand: Hand = Hand.MAIN_HAND,
    onPlacementSuccess: () -> Boolean = { true },
    onItemUseSuccess: () -> Boolean = { true },
    swingMode: SwingMode = SwingMode


= EVP_CTRL_AEAD_SET_IV_FIXED,
	EVP_CTRL_GCM_IV_GEN  = 0x13,
	EVP_CTRL_CCM_SET_IVLEN = EVP_CTRL_AEAD_SET_IVLEN,
	EVP_CTRL_CCM_GET_TAG = EVP_CTRL_AEAD_GET_TAG,
	EVP_CTRL_CCM_SET_TAG = EVP_CTRL_AEAD_SET_TAG,
	EVP_CTRL_CCM_SET_IV_FIXED = EVP_CTRL_AEAD_SET_IV_FIXED,
	EVP_CTRL_CCM_SET_L   = 0x14,
	EVP_CTRL_CCM_SET_MSGLEN = 0x15,
	EVP_CTRL_AEAD_TLS1_AAD = 0x16,
	EVP_CTRL_AEAD_SET_MAC_KEY = 0x17,
	EVP_CTRL_GCM_SET_IV_INV = 0x18,
	EVP_CTRL_TLS1_1_MULTIBLOCK_AAD = 0x19,
	EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT = 0x1a,
	EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT = 0x1b,
	EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE = 0x1c,
	EVP_CTRL_SSL3_MASTER_SECRET = 0x1d,
	EVP_CTRL_SET_SBOX    = 0x1e,
	EVP_CTRL_SBOX_USED   = 0x1f,
	EVP_CTRL_KEY_MESH    = 0x20,
	EVP_CTRL_BLOCK_PADDING_MODE = 0x21,
	EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS = 0x22,
	EVP_CTRL_SET_PIPELINE_INPUT_BUFS = 0x23,
	EVP_CTRL_SET_PIPELINE_INPUT_LENS = 0x24,
	EVP_CTRL_GET_IVLEN   = 0x25,
	EVP_PADDING_PKCS7    = 1,
	EVP_PADDING_ISO7816_4 = 2,
	EVP_PADDING_ANSI923  = 3,
	EVP_PADDING_ISO10126 = 4,
	EVP_PADDING_ZERO     = 5,
	EVP_AEAD_TLS1_AAD_LEN = 13,
};
typedef struct {
    unsigned char *out;
    const unsigned char *inp;
    size_t len;
    unsigned int interleave;
} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM;
enum {
	EVP_GCM_TLS_FIXED_IV_LEN = 4,
	EVP_GCM_TLS_EXPLICIT_IV_LEN = 8,
	EVP_GCM_TLS_TAG_LEN  = 16,
	EVP_CCM_TLS_FIXED_IV_LEN = 4,
	EVP_CCM_TLS_EXPLICIT_IV_LEN = 8,
	EVP_CCM_TLS_IV_LEN   = 12,
	EVP_CCM_TLS_TAG_LEN  = 16,
	EVP_CCM8_TLS_TAG_LEN = 8,
	EVP_CHACHAPOLY_TLS_TAG_LEN = 16,
};
typedef struct evp_cipher_info_st {
    const EVP_CIPHER *cipher;
    unsigned char iv[16];
} EVP_CIPHER_INFO;
typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass,
                              int passlen, ASN1_TYPE *param,
                              const EVP_CIPHER *cipher, const EVP_MD *md,
                              int en_de);
#define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA, (char *)(rsa))
#define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_P


t.querySelector('.max-stone');

    // Zwiększanie się ilości drewna i kamienia co 1000ms.
    const intervalWoodStoneIncome: NodeJS.Timeout = setInterval(() => {
        // Zatrzymanie przychodu drewna i kamienia na koniec gry.
        if (endOfTheGame) {
            clearInterval(intervalWoodStoneIncome);
        };
        // Zwiększenie ilości drewna gdy jest możliwe jego wyprodukowanie.
        if (materials.wood < storageCapacity.wood) {
            materials.wood = materials.wood + incomeMaterials.wood;
            // Ilość drewna równa jego maksymalnej ilości.
            if (materials.wood >= storageCapacity.wood) {
                materials.wood = storageCapacity.wood;
            };
            woodEl.innerText = String(materials.wood);
        }
        // Zwiększenie ilości kamienia gdy jest możliwe jego wyprodukowanie.
        if (materials.stone < storageCapacity.stone) {
            materials.stone = materials.stone + incomeMaterials.stone;
            // Ilość kamienia równa jego maksymalnej ilości.
            if (materials.stone >= storageCapacity.stone) {
                materials.stone = storageCapacity.stone;
            };
            stoneEl.innerText  = String(materials.stone);
        };
    },1000);

    // Zwiększanie ilość złota co 3000ms.
    const intervalGoldIncome: NodeJS.Timeout = setInterval(() => {
        // Zatrzymanie przychodu złota.
        if (endOfTheGame) {
            clearInterval(intervalGoldIncome);
        };
        // Zwiększenie się ilości złota.
        materials.gold = materials.gold + incomeMaterials.gold;
        goldEl.innerText = String(materials.gold);
    },3000);

    // Dodawanie określonych bonusów po wybudowaniu budynków.
    const addBonus: Function = (value: string) => {
        // Zwiększenie przychodu drewna.
        if (value === 'woodIncome') {
            incomeMaterials.wood += 2;
        // Zwiększenie przychodu kamienia.
        } else if (value === 'stoneIncome') {
            incomeMaterials.stone += 2;
        // Zwiększenie przychodu złota.
        } else if (value === 'goldIncome') {
            incomeMaterials.gold +=2;
        // Nowy robotnik.
        } else if (value === 'newWorker') {
            if (worker < maxWorker) {
                worker += 1;
                workerEl.innerText = String(worker);
            };
        // Powiększenie magazynu drewna.
        } else if (value === 'enlargingTheWarehouseWood') {
            storageCapacity.wood += 10;
            maxWoodEl.innerText = String(storageCapacity.wood);
        // Powiększenie magazynu kamienia.
        } else if (value === 'enlargingTheWarehouseStone') {
            storageCapacity.stone += 10;
            maxStoneEl.innerText = String(storageCapacity.stone);
        // Zwycięstwo.
        } else if (value === 'victory') {
            victory();
        };
    };

    // Zmienna, która określa czy licznik budowy jest włączony; domyślnie - false.
    let setConstructionTimer:boolean = false;
    // Zmienna, która określa czy skończyła się gra; domyślnie - false.
    let endOfTheGame:boolean = false;


: 02/04

+ Incluir datos reales reales en demos.
+ No confundir terminos (Beneficios =! ingresos).
+ Añadir alucinaciones al uso de la IA.
+ Hacer zoom en las partes que se vea poco.
+ Seguir el orden que indiquen los profesores.
+ Bajar el ritmo de la presentación en partes como los diagramas.
+ Cambiar colores y escala de gráfica coste vs beneficio para que se vea mejor.
+ Poner reloj del equipo en la retrospectiva.
+ Añadir mediciones a las soluciones en la tabla de problemas.

## 4.3 Acciones de respuesta ante el feedback

Todo el feedback anotado se ha tenido en cuenta y se ha revisado usando una checklist con el objetivo de mejorar y no repetir los mismos errores. En los próximos entregables se marcarán las evidencias de estas correcciones para que quede constancia de nuestra respuesta al feedback.

### 4.3.1 Análisis de competidores

No procede.

### 4.3.2 Análisis de costes

En el TCO se ha añadido, en la tabla de costes de operación, una nueva columna con la estimación a 24 meses.

### 4.3.3 Análisis de riesgos

No procede.

### 4.3.4 Documentación

Se ha corregido la confusión entre Customer Agreement y Commitment Agreement, creando el Customer Agreement y el de Privacy Policy.

### 4.3.5 Inicio efectivo

No procede.

### 4.3.6 Modelos de negocio

No procede.

### 4.3.7 Roles

No procede.

### 4.3.8 Uso de la IA

Se ha añadido una página nueva en la wiki para los Prompts de Phind. Una IA que utiliza un modelo propio y además tiene la capacidad de realizar búsquedas en Internet para dar respuestas actualizadas

### 4.3.9 Usuarios piloto

Hemos creado documentos de Customer Agreement y Commitment Agreement para controlar el pilotaje de nuestra aplicación de forma más precisa.

### 4.3.10 Feedback específico de grupo

El feedback dado a nuestro grupo en específico se ha implementado en su totalidad dentro de las capacidades del grupo.

# 5. S3
## 5.1 Feedback general

Dado que esta semana nuestro grupo no estaba encargado de aportar el feedback general a la DB, procedemos a dejar este apartado intencionadamente en blanco.

## 5.2 Feedback recibido por nuestro grupo

### Semana 9: 09/04

+ Se ha ido muy rápido en la parte de los riesgos aunque estaban bien estructurados y presentados visualmente.
+ Poner desglose de horas por miembro de todo el mundo en una misma diapositiva.
+ Usuarios piloto bien: identificación de usuarios piloto bien y cantidad, fechas de inicio-fin de prueba (falta cuándo se analiza y aplica el feedback), calificación (falta prioridad del feedback).
+ En planificación ha faltado cómo vamos a gestionar el final del S3 - WPL (Tareas faltantes, replanificar si hiciera falta).

### Semana 10: 23/04 (Evaluación)

+ La historia de la demo debería ser general y orientada a un usuario nuevo. Orientarla a toda la funcionalidad y no solo al S3.
+ Cambiar elevator pitch. Incluir roles e historia.
+ Evitar poner tanto texto para que no parezca que se leen diapositivas en vez


context)

 	Parallel iteration over range with auto_partitioner and user-supplied context.  More...

template<typename Range , typename Body >

void 	parallel_for (const Range &range, const Body &body, const static_partitioner &partitioner, task_group_context &context)

 	Parallel iteration over range with static_partitioner and user-supplied context.  More...

template<typename Range , typename Body >

void 	parallel_for (const Range &range, const Body &body, affinity_partitioner &partitioner, task_group_context &context)

 	Parallel iteration over range with affinity_partitioner and user-supplied context.  More...

parallel_for_each

template<typename Iterator , typename Function >


argin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref, $formMargin, pref"
        )

        var rows = 1
        val step = 2
        val panel = FormBuilder.create().layout(layout)
            .add("${I18n.getString("termora.new-host.general.protocol")}:").xy(1, rows)
            .add(proxyTypeComboBox).xyw(3, rows, 5).apply { rows += step }

            .add("${I18n.getString("termora.new-host.general.host")}:").xy(1, rows)
            .add(proxyHostTextField).xy(3, rows)
            .add("${I18n.getString("termora.new-host.general.port")}:").xy(5, rows)
            .add(proxyPortTextField).xy(7, rows).apply { rows += step }

            .add("${I18n.getString("termora.new-host.general.authentication")}:").xy(1, rows)
            .add(proxyAuthenticationTypeComboBox).xyw(3, rows, 5).apply { rows += step }

            .add("${I18n.getString("termora.new-host.general.username")}:").xy(1, rows)
            .add(proxyUsernameTextField).xyw(3, rows, 5).apply { rows += step }
            .add("${I18n.getString("termora.new-host.general.password")}:").xy(1, rows)
            .add(proxyPasswordTextField).xyw(3, rows, 5).apply { rows += step }

            .build()

        return panel
    }
}
package app.termora.plugin.internal.local

import app.termora.*
import app.termora.terminal.PtyConnector
import app.termora.terminal.PtyConnectorDelegate
import app.termora.terminal.PtyProcessConnector
import org.apache.commons.io.Charsets
import org.slf4j.LoggerFactory
import java.nio.charset.StandardCharsets
import javax.swing.Icon
import javax.swing.JOptionPane
import javax.swing.SwingUtilities
import kotlin.jvm.optionals.getOrNull

class LocalTerminalTab(windowScope: WindowScope, host: Host) :
    PtyHostTerminalTab(windowScope, host) {

    companion object {
        private val log = LoggerFactory.getLogger(LocalTerminalTab::class.java)
    }

    override suspend fun openPtyConnector(): PtyConnector {
        val winSize = terminalPanel.winSize()
        val ptyConnector = PtyConnectorFactory.Companion.getInstance().createPtyConnector(
            winSize.rows, winSize.cols,
            host.options.envs(),
            Charsets.toCharset(host.options.encoding, StandardCharsets.UTF_8),
        )

        return ptyConnector
    }

    override fun getIcon(): Icon {
        return Icons.terminal
    }

    override fun willBeClose(): Boolean {
        val ptyProcessConnector = getPtyProcessConnector() ?: return true
        val process = ptyProcessConnector.process
        var consoleProcessCount = 0

        try {
            val processHandle = ProcessHandle.of(process.pid()).getOrNull()
            if (processHandle != null) {
                consoleProcessCount = processHandle.children().count().toInt()
            }
        } catch (e: Exception) {
            if (log.isErrorEnabled) {
                log.error(e.message, e)
            }
        }

        // 没有正在运行的进程
        if (consoleProcessCount < 1) return true

        val owner = SwingUtilities.getWindowAncestor(terminalPanel) ?: return true
        return OptionPane.showConfirmDialog(
            owner,
            I18n.getString("termora.tabbed.local-tab.close-prompt"),
            messageType = JOptionPane.INFORMATION_MESSAGE,
            optio


-light-high-contrast .p { color: #24292F } /* Punctuation */
.codehilite.github-light-high-contrast .ch { color: #66707B } /* Comment.Hashbang */
.codehilite.github-light-high-contrast .cm { color: #66707B } /* Comment.Multiline */
.codehilite.github-light-high-contrast .cp { color: #66707B } /* Comment.Preproc */
.codehilite.github-light-high-contrast .cpf { color: #66707B } /* Comment.PreprocFile */
.codehilite.github-light-high-contrast .c1 { color: #66707B } /* Comment.Single */
.codehilite.github-light-high-contrast .cs { color: #66707B } /* Comment.Special */
.codehilite.github-light-high-contrast .gd { color: #023B95 } /* Generic.Deleted */
.codehilite.github-light-high-contrast .ge { font-style: italic } /* Generic.Emph */
.codehilite.github-light-high-contrast .gr { color: #A0111F } /* Generic.Error */
.codehilite.github-light-high-contrast .gh { color: #023B95 } /* Generic.Heading */
.codehilite.github-light-high-contrast .gs { font-weight: bold } /* Generic.Strong */
.codehilite.github-light-high-contrast .gu { color: #023B95 } /* Generic.Subheading */
.codehilite.github-light-high-contrast .kc { color: #023B95 } /* Keyword.Constant */
.codehilite.github-light-high-contrast .kd { color: #A0111F } /* Keyword.Declaration */
.codehilite.github-light-high-contrast .kn { color: #A0111F } /* Keyword.Namespace */
.codehilite.github-light-high-contrast .kp { color: #A0111F } /* Keyword.Pseudo */
.codehilite.github-light-high-contrast .kr { color: #A0111F } /* Keyword.Reserved */
.codehilite.github-light-high-contrast .kt { color: #A0111F } /* Keyword.Type */
.codehilite.github-light-high-contrast .ld { color: #702C00 } /* Literal.Date */
.codehilite.github-light-high-contrast .m { color: #702C00 } /* Literal.Number */
.codehilite.github-light-high-contrast .s { color: #023B95 } /* Literal.String */
.codehilite.github-light-high-contrast .na { color: #702C00 } /* Name.Attribute */
.codehilite.github-light-high-contrast .nb { color: #702C00 } /* Name.Builtin */
.codehilite.github-light-high-contrast .nc { color: #023B95 } /* Name.Class */
.codehilite.github-light-high-contrast .no { color: #023B95 } /* Name.Constant */
.codehilite.github-light-high-contrast .nd { color: #702C00 } /* Name.Decorator */
.codehilite.github-light-high-contrast .ni { color: #024C1A } /* Name.Entity */
.codehilite.github-light-high-contrast .ne { color: #622CBC } /* Name.Exception */
.codehilite.github-light-high-contrast .nf { color: #023B95 } /* Name.Function */
.codehilite.github-light-high-contrast .nl { color: #702C00 } /* Name.Label */
.codehilite.github-light-high-contrast .nn { color: #24292F } /* Name.Namespace */
.codehilite.github-light-high-contrast .nx { color: #622CBC } /* Name.Other */
.codehilite.github-light-high-contrast


e;
import github.clyoudu.taskpipeline.task.TaskContext;
import org.junit.Test;

public class ConcurrentTaskTest {

    @Test
    public void test() throws InterruptedException {
        TaskContext taskContext = new TaskContext();
        List<AbstractStage> stages = new ArrayList<>();
        ParallelStage concurrentStage = new ParallelStage(taskContext, null, "并行执行", stages);

        List<AbstractStage> stagesA = new ArrayList<>();
        Stage stageA = new ParallelStage(taskContext, concurrentStage, "任务A", stagesA);
        stagesA.add(new Stage(taskContext, stageA, "A1"));
        stagesA.add(new Stage(taskContext, stageA, "A2"));
        stages.add(stageA);

        List<AbstractStage> stagesB = new ArrayList<>();
        Stage stageB = new ParallelStage(taskContext, concurrentStage, "任务B", stagesB);
        stagesB.add(new Stage(taskContext, stageB, "B1"));
        stagesB.add(new Stage(taskContext, stageB, "B2"));
        stagesB.add(new Stage(taskContext, stageB, "B3"));
        stages.add(stageB);

        List<AbstractStage> stagesC = new ArrayList<>();
        Stage stageC = new ParallelStage(taskContext, concurrentStage, "任务C", stagesC);
        stagesC.add(new Stage(taskContext, stageC, "C1"));
        stagesC.add(new Stage(taskContext, stageC, "C2"));
        stagesC.add(new Stage(taskContext, stageC, "C3"));
        stagesC.add(new Stage(taskContext, stageC, "C4"));
        stages.add(stageC);

        List<AbstractStage> stagesD = new ArrayList<>();
        Stage stageD = new ParallelStage(taskContext, concurrentStage, "任务D", stagesD);
        stagesD.add(new Stage(taskContext, stageD, "D1"));
        stagesD.add(new Stage(taskContext, stageD, "D2"));
        stagesD.add(new Stage(taskContext, stageD, "D3"));
        stagesD.add(new Stage(taskContext, stageD, "D4"));
        stagesD.add(new Stage(taskContext, stageD, "D5"));
        stages.add(stageD);

        new Thread(concurrentStage::execute).start();
        while (true) {
            System.out.println(
                "Total Progress: " + taskContext.getProgress() + "(" + taskContext.getCurrentProgress() + "/" +
                    taskContext.getTotal() + "), Linear(" + concurrentStage.getProgress() + ") A(" +
                    stageA.getProgress() + "), B(" + stageB.getProgress() + "), C(" + stageC.getProgress() + "), D(" +
                    stageD.getProgress() + ")");
            if (taskContext.getCurrentProgress() == taskContext.getTotal() ||
                (taskContext.canceled() && taskContext.getExecutor().isTerminated())) {
                break;
            }
            Thread.sleep(1000L);
        }
    }
}
package github.clyoudu.oom;

import github.clyoudu.byteformat.ByteUnitFormat;
import lombok.extern.slf4j.Slf4j;

import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.RuntimeMXBean;

/**
 * @author leichen
 * @date 2019/12/6 10:19 上午
 */
@Slf4j
public class OOMUtil {

    private static final Integer MAX_HEAP_SIZE = 64 * 1024 * 1024;

    private OOMUtil () {}

    public static void checkMaxHeapSize () {
        MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
        log.info("Max heap size: " + ByteUnitFormat.B.to(ByteUnitFormat.M, memoryMXBean.getHeapMemoryUsage().getMax()));
        if (memoryMXBean.getHeapMemoryUsage().getMax() > MAX_HEAP_SIZE) {
            throw new IllegalArgumentException("Max heap size is 64M for this test.");
        }
    }


51bGw= 61441
IFhD 61442
IHN0ZXc= 61443
KGRlbGF5 61444
QVRPUlM= 61445
IFdoZWVsZXI= 61446
Ijw/ 61447
IENoYW5kbGVy 61448
IHJldGFsaWF0aW9u 61449
IGJ1ZGRpZXM= 61450
LXNpemluZw== 61451
IEVpbnM= 61452
IC4uLiw= 61453
cXVldGU= 61454
IERPQw== 61455
IGZhbHNlbHk= 61456
IGZsYXRz 61457
TklDQUxM 61458
IGxpYnI= 61459
QmVOdWxs 61460
aW11bGF0aW9u 61461
CVF1ZXJ5 61462
X3V0 61463
IHBsYXF1ZQ== 61464
YmlsZA== 61465
IHNjcmVhbWVk 61466
Lm12Yw== 61467
LldpZGdldA== 61468
IGRpZmZlcmluZw== 61469
L3N1cHBvcnQ= 61470
X1ZPTFVNRQ== 61471
Lm5vZGVUeXBl 61472
CVdyaXRl 61473
IHLDs3du 61474
Ym9va21hcms= 61475
X0NPTk4= 61476
IENyZWVk 61477
IGluaGliaXRpb24= 61478
IFJlaGFi 61479
dXZyZQ== 61480
IGR1bXBz 61481
b3dlag== 61482
X3BsYWNlaG9sZGVy 61483
IEhXTkQ= 61484
IGRlcm1hdA== 61485
LmRldGFjaA== 61486
IGZpbmFsaXplZA== 61487
Z2VyaWVz 61488
aWRhaw== 61489
X3Byb2c= 61490
IHVwZGF0ZVVzZXI= 61491
bHlz 61492
Lkdvb2dsZQ== 61493
IGx1ZWdv 61494
IGFudHM= 61495
5qCH6aKY 61496
IERSTQ== 61497
0LvQtdC9 61498
LWRi 61499
ZXJyaWNr 61500
X2xu 61501
Li5c 61502
aWtpdA== 61503
IERpZW4= 61504
IHBhcmFtZXRyb3M= 61505
a2V5cHJlc3M= 61506
IEtlcmFsYQ== 61507
IGRyYWluZWQ= 61508
ZsO8Zw== 61509
IGNhcGl0 61510
X2F1Zw== 61511
dGFudA== 61512
TmF2QmFy 61513
IHJvbGxiYWNr 61514
IGxleQ== 61515
4LiI 61516
IEJTUA== 61517
IFByZWRpY3Rvcg== 61518
IHdhZ29u 61519
ICJ8Ig== 61520
U2VydmU= 61521
LkRvbmU= 61522
IER1cmNo 61523
UHJvdmlkZQ== 61524
CXNjb3Jl 61525
X09E 61526
LndlYXBvbg== 61527
IHVuaXZlcnNhbGx5 61528
IGluanVuY3Rpb24= 61529
X1NDUk9MTA== 61530
Lk1hdHJpeA== 61531
IE1vbmdvQ2xpZW50 61532
YnVmZmVycw== 61533
IGJhZGdlcw== 61534
IHNoYXJrcw== 61535
IFNoYXJr 61536
TU9ERUw= 61537
LlJFQUQ= 61538
CXRhZw== 61539
IHN0cnRvdXBwZXI= 615


r query = new StringBuilder();
    query.append("MATCH {");
    query.append("   classes: ['V', 'E'], ");
    query.append("   as: foo, ");
    query.append("   where: (name = 'foo' and surname = 'bar' or aaa in [1,2,3]), ");
    query.append("   maxDepth: 10 ");
    query.append("} return foo");
    checkRightSyntax(query.toString());
  }

  @Test
  public void testMultiPath() {
    StringBuilder query = new StringBuilder();
    query.append("MATCH {}");
    query.append("  .(out().in(){class:'v'}.both('Foo')){maxDepth: 3}.out() return foo");
    checkRightSyntax(query.toString());
  }

  @Test
  public void testMultiPathArrows() {
    StringBuilder query = new StringBuilder();
    query.append("MATCH {}");
    query.append("  .(-->{}<--{class:'v'}--){maxDepth: 3}-->{} return foo");
    checkRightSyntax(query.toString());
  }

  @Test
  public void testMultipleMatches() {
    String query = "MATCH {class: 'V', as: foo}.out(){class: 'V', as: bar}, ";
    query += " {class: 'V', as: foo}.out(){class: 'V', as: bar},";
    query += " {class: 'V', as: foo}.out(){class: 'V', as: bar} RETURN foo";
    checkRightSyntax(query);
  }

  @Test
  public void testMultipleMatchesArrow() {
    String query = "MATCH {class: 'V', as: foo}-->{class: 'V', as: bar}, ";
    query += " {class: 'V', as: foo}-->{class: 'V', as: bar},";
    query += " {class: 'V', as: foo}-->{class: 'V', as: bar} RETURN foo";
    checkRightSyntax(query);
  }

  @Test
  public void testWhile() {
    checkRightSyntax("MATCH {class: 'V', as: foo}.out(){while:($depth<4), as:bar} RETURN bar ");
  }

  @Test
  public void testWhileArrow() {
    checkRightSyntax("MATCH {class: 'V', as: foo}-->{while:($depth<4), as:bar} RETURN bar ");
  }

  @Test
  public void testLimit() {
    checkRightSyntax("MATCH {class: 'V'} RETURN foo limit 10");
  }

  @Test
  public void testReturnJson() {
    checkRightSyntax("MATCH {class: 'V'} RETURN {'name':'foo', 'value': bar}");
  }

  @Test
  public void testOptional() {
    checkRightSyntax(
        "MATCH {class: 'V', as: foo}-->{}<-foo-{}-bar-{}-->{as: bar, optional:true} RETURN foo");
    checkRightSyntax(
        "MATCH {class: 'V', as: foo}-->{}<-foo-{}-bar-{}-->{as: bar, optional:false} RETURN foo");
  }

  @Test
  public void testOrderBy() {
    checkRightSyntax("MATCH {class: 'V', as: foo}-->{} RETURN foo ORDER BY foo");
    checkRightSyntax("MATCH {class: 'V', as: foo}-->{} RETURN foo ORDER BY foo limit 10");
  }

  @Test
  public void testNestedProjections() {
    checkRightSyntax("MATCH {class: 'V', as: foo}-->{} RETURN foo:{name, surname}");
    checkRightSyntax(
        "MATCH {class: 'V', as: foo}-->{as:bar} RETURN foo:{name, surname} as bloo, bar:{*}");
  }

  @Test
  public void testUnwind() {
    checkRightSyntax(
        "MATCH {class: 'V', as: foo}-->{as:bar} RETURN foo.name, bar.name as x unwind x");
  }

  @Test
  public void testDepthAlias() {
    checkRightSyntax(
        "MATCH {class: 'V', as: foo}-->{as:bar, while:($depth < 2), depthAlias: depth} RETURN"
            + " depth");
  }

  @Test
  public void testPathAlias()


d animations which texture a 3D object (W=time)
  @override
  double noise4XYZBeforeW(double x, double y, double z, double w) {
    double xyz = x + y + z;
    double ww = w * 1.118033988749894;
    double s2 = xyz * -0.16666666666666666 + ww;
    double xs = x + s2, ys = y + s2, zs = z + s2, ws = -0.5 * xyz + ww;

    return _noise4Base(xs, ys, zs, ws);
  }

  /// 4D SuperSimplex noise base.
  /// Using ultra-simple 4x4x4x4 lookup partitioning.
  ///
  /// This isn't as elegant or SIMD/GPU/etc. portable as other approaches,
  /// but it does compete performance-wise with optimized OpenSimplex1.
  double _noise4Base(double xs, double ys, double zs, double ws) {
    double value = 0;

    // Get base points and offsets
    int xsb = xs.floor(), ysb = ys.floor(), zsb = zs.floor(), wsb = ws.floor();
    double xsi = xs - xsb, ysi = ys - ysb, zsi = zs - zsb, wsi = ws - wsb;

    // Unskewed offsets
    double ssi = (xsi + ysi + zsi + wsi) * -0.138196601125011;
    double xi = xsi + ssi, yi = ysi + ssi, zi = zsi + ssi, wi = wsi + ssi;

    int index = (((xs * 4).floor() & 3) << 0) |
        (((ys * 4).floor() & 3) << 2) |
        (((zs * 4).floor() & 3) << 4) |
        (((ws * 4).floor() & 3) << 6);

    // Point contributions
    for (final c in _lookup4d[index]) {
      double dx = xi + c.dx, dy = yi + c.dy, dz = zi + c.dz, dw = wi + c.dw;
      double attn = 0.8 - dx * dx - dy * dy - dz * dz - dw * dw;
      if (attn > 0) {
        attn *= attn;

        int pxm = (xsb + c.xsv) & _kMask, pym = (ysb + c.ysv) & _kMask;
        int pzm = (zsb + c.zsv) & _kMask, pwm = (wsb + c.wsv) & _kMask;
        Grad4 grad = _permGrad4[_perm[_perm[_perm[pxm] ^ pym] ^ pzm] ^ pwm];
        double extrapolation =
            grad.dx * dx + grad.dy * dy + grad.dz * dz + grad.dw * dw;

        value += attn * attn * extrapolation;
      }
    }
    return value;
  }

  // Definitions

  static final _lookup2d = <_LatticePoint2D>[];
  static final _lookup3d = <_LatticePoint3D>[];
  static final _lookup4d = <List<_LatticePoint4D>>[];
  static final _gradients2d = <Grad2>[];
  static final _gradients3d = <Grad3>[];
  static final _gradients4d = <Grad4>[];

  static var _staticInitialized = false;

  /// Performs the initialization of all static lookup members.
  ///
  /// This function as well as [_staticInitialized] exist because there is
  /// no comparable concept to static blocks (from Java) in Dart.
  static void _staticInit() {
    for (int i = 0; i < 8; i++) {
      int i1, j1, i2, j2;
      if ((i & 1) == 0) {
        if ((i & 2) == 0) {
          i1 = -1;
          j1 = 0;
        } else {
          i


ger/mock_hmi_capabilities.h"
#include "application_manager/mock_message_helper.h"
#include "application_manager/policies/mock_policy_handler_interface.h"
#include "application_manager/smart_object_keys.h"
#include "smart_objects/smart_object.h"

namespace test {
namespace components {
namespace commands_test {
namespace mobile_commands_test {
namespace update_turn_list_request {

namespace am = ::application_manager;
namespace mobile_result = mobile_apis::Result;

using ::testing::_;
using ::testing::Eq;
using ::testing::Ref;
using ::testing::Return;
using ::testing::ReturnRef;

using am::commands::MessageSharedPtr;
using application_manager_test::MockHMICapabilities;
using sdl_rpc_plugin::commands::UpdateTurnListRequest;

namespace {
const uint32_t kConnectionKey = 3u;
const hmi_apis::FunctionID::eType kFunctionId =
    hmi_apis::FunctionID::Buttons_OnButtonEvent;
const uint32_t kAppId = 5u;
}  // namespace

class UpdateTurnListRequestTest
    : public CommandRequestTest<CommandsTestMocks::kIsNice> {
 public:
  UpdateTurnListRequestTest()
      : command_msg_(CreateMessage(smart_objects::SmartType_Map))
      , command_(CreateCommand<UpdateTurnListRequest>(command_msg_)) {
    (*command_msg_)[am::strings::params][am::strings::connection_key] =
        kConnectionKey;
    (*command_msg_)[am::strings::params][am::strings::function_id] =
        kFunctionId;
  }

  MessageSharedPtr command_msg_;
  std::shared_ptr<UpdateTurnListRequest> command_;
};

TEST_F(UpdateTurnListRequestTest, Run_ApplicationIsNotRegistered_UNSUCCESS) {
  EXPECT_CALL(app_mngr_, application(kConnectionKey))
      .WillOnce(Return(ApplicationSharedPtr()));

  EXPECT_CALL(
      mock_rpc_service_,
      ManageMobileCommand(
          MobileResultCodeIs(mobile_result::APPLICATION_NOT_REGISTERED), _));

  command_->Run();
}

TEST_F(UpdateTurnListRequestTest, Run_InvalidNavigationText_UNSUCCESS) {
  (*command_msg_)[am::strings::msg_params][am::strings::turn_list][0]
                 [am::strings::navigation_text] = "invalid_navigation_text\t\n";

  MockAppPtr mock_app(CreateMockApp());
  EXPECT_CALL(app_mngr_, application(kConnectionKey))
      .WillOnce(Return(mock_app));

  EXPECT_CALL(
      mock_rpc_service_,
      ManageMobileCommand(MobileResultCodeIs(mobile_result::INVALID_DATA), _));

  command_->Run();
}

TEST_F(UpdateTurnListRequestTest, Run_InvalidTurnIcon_UNSUCCESS) {
  (*command_msg_)[am::strings::msg_params][am::strings::turn_list][0]
                 [am::strings::navigation_text] = "valid_navigation_text";
  (*command_msg_)[am::strings::msg_params][am::strings::turn_list][0]
                 [am::strings::turn_icon][am::strings::value] =
                     "invalid_turn_icon\t\n";

  MockAppPtr mock_app(CreateMockApp());
  EXPECT_CALL(app_mngr_, application(kConnectionKey))
      .WillOnce(Return(mock_app));

  EXPECT_CALL(
      mock_rpc_service_,
      ManageMobileCommand(MobileResultCodeIs(mobile_result::INVALID_DATA), _));

  command_->Run();
}

TEST_F(UpdateTurnListRequestTest,
       Run_ProcessSoftButtonsNotSucceeded_UNSUCCESS) {
  (*command_msg_)[am::strings::msg_params][am::strings::turn_list][0]
                 [am::strings::navigation_text] = "valid_navigation_text";
  (*command_msg_)[am::strings::msg_params][am::strings::turn_list][0]
                 [am::strings::turn_icon][am::strings::value] =
                     "valid_turn_icon";

  MockAppPtr mock_app(CreateMockApp());
  EXPECT_CALL(app_mngr_, application(kConnectionKey))


)	br.ret.dpnt rp		// 4 byte copy
	;;

EX(.ex_handler_short, (p6)	st1	[dst0]=t5,2)
EK(.ex_handler_short, (p8)	st1	[dst1]=t6,2)
(p9)	br.ret.dptk rp		// 5 byte copy

EX(.ex_handler_short, (p10)	ld1	t7=[src0],2)
(p11)	br.ret.dptk rp		// 6 byte copy
	;;

EX(.ex_handler_short, (p10)	st1	[dst0]=t7,2)
	br.ret.dptk rp		// done all cases

/* Align dest to nearest 8-byte boundary. We know we have at
 * least 7 bytes to copy, enough to crawl to 8-byte boundary.
 * Actual number of byte to crawl depend on the dest alignment.
 * 7 byte or less is taken care at .memcpy_short

 * src0 - source even index
 * src1 - source  odd index
 * dst0 - dest even index
 * dst1 - dest  odd index
 * r30  - distance to 8-byte boundary
 */

.align_dest:
	add	src1=1,in1	// source odd index
	cmp.le	p7,p0 = 2,r30	// for .align_dest
	cmp.le	p8,p0 = 3,r30	// for .align_dest
EX(.ex_handler_short, (p6)	ld1	t1=[src0],2)
	cmp.le	p9,p0 = 4,r30	// for .align_dest
	cmp.le	p10,p0 = 5,r30
	;;
EX(.ex_handler_short, (p7)	ld1	t2=[src1],2)
EK(.ex_handler_short, (p8)	ld1	t3=[src0],2)
	cmp.le	p11,p0 = 6,r30
EX(.ex_handler_short, (p6)	st1	[dst0] = t1,2)
	cmp.le	p12,p0 = 7,r30
	;;
EX(.ex_handler_short, (p9)	ld1	t4=[src1],2)
EK(.ex_handler_short, (p10)	ld1	t5=[src0],2)
EX(.ex_handler_short, (p7)	st1	[dst1] = t2,2)
EK(.ex_handler_short, (p8)	st1	[dst0] = t3,2)
	;;
EX(.ex_handler_short, (p11)	ld1	t6=[src1],2)
EK(.ex_handler_short, (p12)	ld1	t7=[src0],2)
	cmp.eq	p6,p7=r28,r29
EX(.ex_handler_short, (p9)	st1	[dst1] = t4,2)
EK(.ex_handler_short, (p10)	st1	[dst0] = t5,2)
	sub	in2=in2,r30
	;;
EX(.ex_handler_short, (p11)	st1	[dst1] = t6,2)
EK(.ex_handler_short, (p12)	st1	[dst0] = t7)
	add	dst0=in0,r30	// setup arguments
	add	src0=in1,r30
(p6)	br.cond.dptk .aligned_src
(p7)	br.cond.dpnt .unaligned_src
	;;

/* main loop body in jump table format */
#define COPYU(shift)									\
1:											\
EX(.ex_handler,  (p16)	ld8	r32=[src0],8);		/* 1 */				\
EK(.ex_handler,  (p16)	ld8	r36=[src1],8);						\
		 (p17)	shrp	r35=r33,r34,shift;;	/* 1 */				\
EX(.ex_handler,  (p6)	ld8	r22=[src1]);	/* common, prime for tail section */	\
		 nop.m	0;								\
		 (p16)	shrp	r38=r36,r37,shift;					\
EX(.ex_handler,  (p17)	st8	[dst0]=r35,8


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ********************************************************************************
# Copyright © 2019 jianglin
# File Name: __init__.py
# Author: jianglin
# Email: mail@honmaple.com
# Created: 2019-07-03 21:39:52 (CST)
# Last Update: Wednesday 2019-07-10 00:22:32 (CST)
#          By:
# Description:
# ********************************************************************************
from .bucket import BucketListView, BucketView
from .file import FileListView
from .filepath import FilePathListView

def init_api(app):
    app.add_url_rule(
        '/api/bucket',
        view_func=BucketListView.as_view('buckets'),
    )
    app.add_url_rule(
        '/api/bucket/<int:pk>',
        view_func=BucketView.as_view('bucket'),
    )

    files = FileListView.as_view('files')
    app.add_url_rule(
        "/api/file",
        defaults={"bucket": "default"},
        view_func=files,
    )
    app.add_url_rule(
        '/api/file/<bucket>',
        view_func=files,
    )

    filepaths = FilePathListView.as_view('filepaths')
    app.add_url_rule(
        '/api/filepath',
        defaults={"bucket": "default"},
        view_func=filepaths,
    )
    app.add_url_rule(
        '/api/filepath/<bucket>',
        view_func=filepaths,
    )


cbuf: "Locals",
        tex: "Specular",
        target: ("o_Color2",
            fm::Format(fm::SurfaceType::R8_G8_B8_A8, fm::ChannelType::Unorm),
            gfx::state::MASK_ALL, None),
    };
    factory.create_pipeline_simple(&[], &[], init).unwrap()
}
#![allow(clippy::suspicious_arithmetic_impl)]
#[allow(deprecated, unused_imports)]
use alloc::borrow::Cow;
use alloc::string::String;
use alloc::vec::Vec;
use core::cmp::Ordering::{self, Equal, Greater, Less};
use core::default::Default;
use core::hash::{Hash, Hasher};
use core::iter::{Product, Sum};
use core::ops::{
    Add, AddAssign, BitAnd, BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, Div, DivAssign,
    Mul, MulAssign, Neg, Not, Rem, RemAssign, Shl, ShlAssign, Shr, ShrAssign, Sub, SubAssign,
};
use core::str::{self, FromStr};
use core::{fmt, mem};
#[cfg(has_i128)]
use core::{i128, u128};
use core::{i64, u64};

#[cfg(feature = "serde")]
use serde;

#[cfg(feature = "zeroize")]
use zeroize::Zeroize;

use crate::integer::{Integer, Roots};
use num_traits::{
    CheckedAdd, CheckedDiv, CheckedMul, CheckedSub, FromPrimitive, Num, One, Pow, Signed,
    ToPrimitive, Zero,
};

use self::Sign::{Minus, NoSign, Plus};
use super::ParseBigIntError;
use super::VEC_SIZE;
use crate::big_digit::{self, BigDigit, DoubleBigDigit};
use crate::biguint;
use crate::biguint::to_str_radix_reversed;
use crate::biguint::{BigUint, IntDigits};
use smallvec::SmallVec;

use crate::IsizePromotion;
use crate::UsizePromotion;

use crate::algorithms::{extended_gcd, mod_inverse};
use crate::biguint::IntoBigUint;
use crate::traits::{ExtendedGcd, ModInverse};

/// A Sign is a `BigInt`'s composing element.
#[derive(PartialEq, PartialOrd, Eq, Ord, Copy, Clone, Debug, Hash)]
pub enum Sign {
    Minus,
    NoSign,
    Plus,
}

#[cfg(feature = "zeroize")]
impl Zeroize for Sign {
    fn zeroize(&mut self) {
        // TODO: Figure out how to better clear the sign.
        *self = Sign::NoSign;
    }
}

impl Neg for Sign {
    type Output = Sign;

    /// Negate Sign value.
    #[inline]
    fn neg(self) -> Sign {
        match self {
            Minus => Plus,
            NoSign => NoSign,
            Plus => Minus,
        }
    }
}

impl Mul<Sign> for Sign {
    type Output = Sign;

    #[inline]
    fn mul(self, other: Sign) -> Sign {
        match (self, other) {
            (NoSign, _) | (_, NoSign) => NoSign,
            (Plus, Plus) | (Minus, Minus) => Plus,
            (Plus, Minus) | (Minus, Plus) => Minus,
        }
    }
}

#[cfg(feature = "serde")]
impl serde::Serialize for Sign {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: serde::Serializer,
    {
        // Note: do not change the serialization format, or it may break
        // forward and backward compatibility of serialized data!
        match *self {
            Sign::Minus => (-1i


]

---

## About me

.pull-left[

* Associate Professor of Geography at TCU

* Spatial data science researcher and consultant

* Package developer: __tidycensus__, __tigris__, __mapboxapi__, __crsuggest__, __idbr__ (R), __pygris__ (Python)

* Book: [_Analyzing US Census Data: Methods, Maps and Models in R_](https://walker-data.com/census-r/)
  - Print release date February 16 (tomorrow!)
  - To support these workshops: [buy on Amazon](https://www.amazon.com/Analyzing-US-Census-Data-Methods/dp/1032366443) or [direct from CRC Press](https://www.routledge.com/Analyzing-US-Census-Data-Methods-Maps-and-Models-in-R/Walker/p/book/9781032366449)

]

.pull-right[

<img src=img/walker_crop.jpg>

]

---

## SSDAN workshop series

* Last week (February 8): [Working with the 2021 American Community Survey with R and tidycensus](https://walker-data.com/umich-workshop-2023/acs-2021/#1)

* Today: Mapping and spatial analysis with ACS data in R

* Next week (February 22): Working with geographic data and making maps in Python

---

## Today's agenda

* Hour 1: Working with "spatial" American Community Survey data

* Hour 2: Making maps of ACS data in R

* Hour 3: Applications: segregation, diversity, and location intelligence

---
class: middle, center, inverse

## Part 1: Working with "spatial" American Community Survey data

---

## The American Community Survey

* Annual survey of 3.5 million US households

* Covers topics not available in decennial US Census data (e.g. income, education, language, housing characteristics)

* Available as 1-year estimates (for geographies of population 65,000 and greater) and 5-year estimates (for geographies down to the block group)
  - 2020 1-year data only available as [experimental estimates](https://www.census.gov/programs-surveys/acs/data/experimental-data.html)

* Data delivered as _estimates_ characterized by _margins of error_

---

## How to get ACS data

* [data.census.gov](https://data.census.gov) is the main, revamped interactive data portal for browsing and downloading Census datasets, including the ACS

* [The US Census __A__pplication __P__rogramming __Interface__ (API)](https://www.census.gov/data/developers/data-sets.html) allows developers to access Census data resources programmatically

---

## tidycensus

* R interface to the Decennial Census, American Community Survey, Population Estimates Program, and Public Use Microdata Series APIs

* Key features:
  - Wrangles Census data internally to return tidyverse-ready format (or traditional wide format if requested);

  - Automatically downloads and merges Census geometries to data for mapping (next week's workshop!);

  - Includes tools for handling margins of error in the ACS and working with survey weights in the ACS PUMS;

  - States and counties can be requested by name (no more looking up FIPS codes!)

---

## R and RStudio

* R: programming language and software environment for data analysis (and wherever else your imagination can take you!)

* RStudio: integrated development environment (IDE) for R developed by [Posit](https://posit.co/)

* Posit Cloud: run RStudio with today's workshop pre-configured at https://posit.cloud/content/5377428

---

## Getting started with tidycensus

* To get started, install the packages you'll need for


(
                this,
                REQUEST_ID,
                EXTERNAL_ID,
                REPOSITORY_TYPE,
                EVENT_TYPE,
                TRIGGER_USER,
                EVENT_MESSAGE,
                REQUEST_HEADER,
                REQUEST_PARAM,
                REQUEST_BODY,
                CREATE_TIME
            ).values(
                webhookRequest.requestId,
                webhookRequest.externalId,
                webhookRequest.repositoryType,
                webhookRequest.eventType,
                webhookRequest.triggerUser,
                webhookRequest.eventMessage,
                webhookRequest.requestHeader?.let { JsonUtil.toJson(it) },
                webhookRequest.requestParam?.let { JsonUtil.toJson(it) },
                webhookRequest.requestBody,
                webhookRequest.createTime
            ).execute()
        }
    }

    fun get(
        dslContext: DSLContext,
        requestId: String
    ): RepositoryWebhookRequest? {
        val record = with(TRepositoryWebhookRequest.T_REPOSITORY_WEBHOOK_REQUEST) {
            dslContext.selectFrom(this)
                .where(REQUEST_ID.eq(requestId))
                .fetchOne()
        }
        return record?.let { convert(it) }
    }

    fun convert(record: TRepositoryWebhookRequestRecord): RepositoryWebhookRequest {
        return with(record) {
            RepositoryWebhookRequest(
                requestId = requestId,
                externalId = externalId,
                eventType = eventType,
                repositoryType = repositoryType,
                triggerUser = triggerUser,
                eventMessage = eventMessage,
                requestHeader = requestHeader?.let {
                    JsonUtil.to(
                        it,
                        object : TypeReference<Map<String, String>>() {})
                },
                requestParam = requestParam?.let {
                    JsonUtil.to(
                        it,
                        object : TypeReference<Map<String, String>>() {})
                },
                requestBody = requestBody,
                createTime = createTime
            )
        }
    }
}
/*
 * Tencent is pleased to support the open source community by making BK-CI 蓝鲸持续集成平台 available.
 *
 * Copyright (C) 2019 Tencent.  All rights reserved.
 *
 * BK-CI 蓝鲸持续集成平台 is licensed under the MIT license.
 *
 * A copy of the MIT License is included in this file.
 *
 *
 * Terms of the MIT License:
 * ---------------------------------------------------
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of
 * the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
 * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

package com.tencent.devops.repository.service.github

import com.fasterxml.jackson.databind.ObjectMapper
import co


getCache().store("student_purple_c", true); // completed purple student help
			player.getCache().remove("student_purple_s"); // remove started purple student help
			npcsay(player, npc, "Hey! my sample!",
				"Thanks ever so much",
				"Let me help you with those questions now",
				"The proper health and safety points are:",
				"Gloves and boots to be worn at all times, proper tools must be used");
			say(player, npc, "Great, thanks for your advice");
		}
	}

	@Override
	public void onUseNpc(Player player, Npc npc, Item item) {
		int cId;
		int dId = RockDialogue.NONE;
		if (item.getCatalogId() == ItemId.CRACKED_ROCK_SAMPLE.id()) {
			dId = RockDialogue.CRACKED_ROCK;
		} else if (npc.getID() == NpcId.STUDENT_ORANGE.id()) {
			cId = player.getQuestStage(Quests.DIGSITE) >= 3 || player.getQuestStage(Quests.DIGSITE) == -1 || player.getCache().hasKey("student_orange_c")
				? Progress.GAVE_ROCK : (player.getCache().hasKey("student_orange_s") ? Progress.REQUESTED_ROCK : Progress.NOT_STARTED);
			if (cId == Progress.REQUESTED_ROCK) {
				if (item.getCatalogId() == ItemId.ROCK_SAMPLE_ORANGE.id()) {
					giveRock(player, npc);
				} else {
					dId = RockDialogue.INCORRECT_ROCK;
				}
			} else if (cId == Progress.NOT_STARTED) {
				if (item.getCatalogId() == ItemId.ROCK_SAMPLE_ORANGE.id()) {
					mes("I am not sure why I am giving this rock to the student...");
					delay(3);
				} else {
					mes("Perhaps I should speak to him first");
					delay(3);
				}
			} else {
				if (item.getCatalogId() == ItemId.ROCK_SAMPLE_ORANGE.id()) {
					dId = RockDialogue.ALREADY_GAVE;
				} else {
					dId = RockDialogue.INCORRECT_ROCK;
				}
			}
		} else if (npc.getID() == NpcId.STUDENT_GREEN.id()) {
			cId = player.getQuestStage(Quests.DIGSITE) >= 3 || player.getQuestStage(Quests.DIGSITE) == -1 || player.getCache().hasKey("student_green_c")
				? Progress.GAVE_ROCK : (player.getCache().hasKey("student_green_s") ? Progress.REQUESTED_ROCK : Progress.NOT_STARTED);
			if (cId == Progress.REQUESTED_ROCK) {
				if (item.getCatalogId() == ItemId.ROCK_SAMPLE_GREEN.id()) {
					giveRock(player, npc);
				} else {
					dId = RockDialogue.INCORRECT_ROCK;
				}
			} else if (cId == Progress.NOT_STARTED) {
				if (item.getCatalogId() == ItemId.ROCK_SAMPLE_GREEN.id()) {
					mes("I am not sure why I am giving this rock to the student...");
					delay(3);
				} else {
					mes("Perhaps I should speak to him first");
					delay(3);
				}
			} else {
				if (item.getCatalogId() == ItemId.ROCK_SAMPLE_GREEN.id()) {
					dId = RockDialogue.ALREADY_GAVE;
				} else {
					dId = RockDialogue.INCORRECT_ROCK;
				}
			}
		} else if (npc.getID() == NpcId.STUDENT_PURPLE.id()) {
			cId = player.getQuestStage(Quests.DIGSITE) >= 3 || player.getQuestStage(Quests.DIGSITE) == -1 || player.getCache().hasKey("student_purple_c")
				? Progress.GAVE_ROCK : (player.getCache().hasKey("student_purple_s") ? Progress


iny_cosp = 2 * (w * z + x * y)
    val cosy_cosp = 1 - 2 * (y * y + z * z)
    angles.z = atan2(siny_cosp, cosy_cosp)

    return angles
}

fun BlockPos.toVector3f() = Vector3f(x.toFloat(), y.toFloat(), z.toFloat())

fun Quaternionf.toEuler(): Vector3f {
    return Quaterniond(this).toEuler().toVector3f()
}

fun Vector3f.rotLerp(target: Vector3f, progress: Double, dist: Vector3f): Vector3f {
    return dist.set(toVec3().rotLerp(target.toVec3(), progress).toVector3f())
}

operator fun Vec3.plus(v: Vec3) = add(v)

operator fun Vec3.minus(v: Vec3) = subtract(v)

fun DoubleArray.toVec3() = Vec3(get(0), get(1), get(2))

fun List<Double>.toVec3() = Vec3(get(0), get(1), get(2))

fun Vector3f.rotLerp(target: Vector3f, progress: Double): Vector3f {
    return rotLerp(target, progress, this)
}

fun Vector3f.toQuaternionf() = Quaternionf().rotateXYZ(x, y, z)

fun Vector3f.toVec3() = Vec3(x.toDouble(), y.toDouble(), z.toDouble())

fun Vector3d.toVec3() = Vec3(x, y, z)

fun Vec3.toVec3i() = Vec3i(x.toInt(), y.toInt(), z.toInt())

fun Vector3d.toVector3f() = Vector3f(x.toFloat(), y.toFloat(), z.toFloat())

fun Double.toDegrees() = Math.toDegrees(this)

fun Vec2.toVector2d() = Vector2d(x.toDouble(), y.toDouble())

fun Vec3.toDegrees() = Vec3(
    x.toDegrees(),
    y.toDegrees(),
    z.toDegrees()
)

fun Vector3f.toDegrees() = Vector3f(
    x.toDegrees(),
    y.toDegrees(),
    z.toDegrees()
)

fun Vector3f.toRadians() = Vector3f(
    x.toRadians(),
    y.toRadians(),
    z.toRadians()
)

fun Vec3.wrapDegrees() = Vec3(
    Mth.wrapDegrees(x),
    Mth.wrapDegrees(y),
    Mth.wrapDegrees(z)
)

fun Vector3f.wrapDegrees(dist: Vector3f) = dist.set(
    Mth.wrapDegrees(x),
    Mth.wrapDegrees(y),
    Mth.wrapDegrees(z)
)

fun Vector3f.wrapDegrees() = wrapDegrees(this)

fun com.jme3.math.Vector3f.toVector3f() = Vector3f(x, y, z)

fun com.jme3.math.Vector3f.toVec3() = toVector3f().toVec3()

fun Vec3.toChunkPos() = ChunkPos(x.toInt() shr 4, z.toInt() shr 4)

fun com.jme3.math.Vector3f.toChunkPos() = ChunkPos(x.toInt() shr 4, z.toInt() shr 4)

fun Vector3f.toChunkPos() = ChunkPos(x.toInt() shr 4, z.toInt() shr 4)

fun Vec3.toVector3k() = Vector3k(
    DoubleValue(x),
    DoubleValue(y),
    DoubleValue(z)
)

fun Vector3d.toVector3k() = Vector3k(
    DoubleValue(x),
    DoubleValue(y),
    DoubleValue(z)
)

fun


135, 41.527136],
    'pop': 115,
    'state': 'OH'
  },
  {
    '_id': '43435',
    'city': 'MILLERSVILLE',
    'loc': [-83.323184, 41.318005],
    'pop': 1427,
    'state': 'OH'
  },
  {
    '_id': '43436',
    'city': 'ISLE SAINT GEORG',
    'loc': [-82.819275, 41.713668],
    'pop': 38,
    'state': 'OH'
  },
  {
    '_id': '43438',
    'city': 'KELLEYS ISLAND',
    'loc': [-82.706811, 41.600755],
    'pop': 172,
    'state': 'OH'
  },
  {
    '_id': '43439',
    'city': 'LACARNE',
    'loc': [-83.02400400000001, 41.527846],
    'pop': 1457,
    'state': 'OH'
  },
  {
    '_id': '43440',
    'city': 'LAKESIDE',
    'loc': [-82.77139200000001, 41.52913],
    'pop': 4410,
    'state': 'OH'
  },
  {
    '_id': '43442',
    'city': 'LINDSEY',
    'loc': [-83.21347400000001, 41.414747],
    'pop': 1646,
    'state': 'OH'
  },
  {
    '_id': '43443',
    'city': 'LUCKEY',
    'loc': [-83.46739599999999, 41.451669],
    'pop': 1771,
    'state': 'OH'
  },
  {
    '_id': '43445',
    'city': 'BONO',
    'loc': [-83.345536, 41.596249],
    'pop': 3895,
    'state': 'OH'
  },
  {
    '_id': '43447',
    'city': 'MILLBURY',
    'loc': [-83.43808300000001, 41.56106],
    'pop': 3100,
    'state': 'OH'
  },
  {
    '_id': '43449',
    'city': 'OAK HARBOR',
    'loc': [-83.127764, 41.523556],
    'pop': 9620,
    'state': 'OH'
  },
  {
    '_id': '43450',
    'city': 'PEMBERVILLE',
    'loc': [-83.473642, 41.402258],
    'pop': 2569,
    'state': 'OH'
  },
  {
    '_id': '43451',
    'city': 'PORTAGE',
    'loc': [-83.614299, 41.312702],
    'pop': 1304,
    'state': 'OH'
  },
  {
    '_id': '43452',
    'city': 'PORT CLINTON',
    'loc': [-82.909368, 41.521535],
    'pop': 11851,
    'state': 'OH'
  },
  {
    '_id': '43456',
    'city': 'PUT IN BAY',
    'loc': [-82.822593, 41.651356],
    'pop': 518,
    'state': 'OH'
  },
  {
    '_id': '43457',
    'city': 'RISINGSUN',
    'loc': [-83.43259, 41.270639],
    'pop': 1756,
    'state': 'OH'
  },
  {
    '_id': '43460',
    'city': 'ROSSFORD',
    'loc': [-83.563793, 41.604908],
    'pop': 5861,
    'state': 'OH'
  },
  {


andle<MaelstromKey, MaelstromVal, u64, i64>,
    ) -> Result<u64, MaelstromError> {
        debug!("Transactor::maybe_init");
        const EMPTY_UPDATES: &[((MaelstromKey, MaelstromVal), u64, i64)] = &[];
        let ts_min = u64::minimum();
        let initial_upper = Antichain::from_elem(ts_min);
        let new_upper = Antichain::from_elem(ts_min + 1);
        let cas_res = write
            .compare_and_append(EMPTY_UPDATES, initial_upper.clone(), new_upper)
            .await??;
        let read_ts = match cas_res {
            Ok(()) => 0,
            Err(current) => Self::extract_ts(&current.0)? - 1,
        };
        Ok(read_ts)
    }

    pub async fn transact(
        &mut self,
        req_ops: &[ReqTxnOp],
    ) -> Result<Vec<ResTxnOp>, MaelstromError> {
        loop {
            trace!("transact req={:?}", req_ops);
            let state = self.read().await?;
            debug!("transact req={:?} state={:?}", req_ops, state);
            let (writes, res_ops) = Self::eval_txn(&state, req_ops);

            // NB: We do the CaS even if writes is empty, so that read-only txns
            // are also linearizable.
            let write_ts = self.read_ts + 1;
            let updates = writes
                .into_iter()
                .map(|(k, v, diff)| ((k, v), write_ts, diff));
            let expected_upper = Antichain::from_elem(write_ts);
            let new_upper = Antichain::from_elem(write_ts + 1);
            // TODO: Wrap the compare_and_append in a retry_timeouts call, too.
            // I tried but got tripped up trying to make an async FnMut work.
            let cas_res = self
                .write
                .compare_and_append(updates, expected_upper.clone(), new_upper)
                .await??;
            match cas_res {
                Ok(()) => {
                    self.read_ts = write_ts;
                    self.advance_since().await;
                    return Ok(res_ops);
                }
                // We lost the CaS race, try again.
                Err(current) => {
                    info!(
                        "transact lost the CaS race, retrying: {:?} vs {:?}",
                        expected_upper, current
                    );
                    self.read_ts = Self::extract_ts(&current.0)? - 1;
                    continue;
                }
            }
        }
    }

    async fn read(&self) -> Result<HashMap<MaelstromKey, MaelstromVal>, MaelstromError> {
        // We're reading as of read_ts, but we can split the read between the
        // snapshot and listen at any ts in `[since_ts, read_ts]`. Intentionally
        // pick one that uses a combination of both to get coverage.
        let as_of = Antichain::from_elem(self.read_ts);
        assert!(self.read_ts >= self.since_ts);
        let snap_ts = self.since_ts + (self.read_ts - self.since_ts) / 2;
        let snap_as_of = Antichain::from_elem(snap_ts);

        let mut snap = self
            .read
            .snapshot(snap_as_of.clone())
            .await
            .map_err(|since| MaelstromError {
                code: ErrorCode::Abort,
                text: format!(
                    "snapshot cannot serve requested as_of {} since is {:?}",
                    snap_ts,
                    since.0.as_option(),
                ),
            })?;
        let listen = self
            .read


 0.8em;
  font-size: larger;
}
.note.default.flat {
  background: #f7f7f7;
}
.note.default.modern {
  border-color: #e1e1e1;
  background: #f3f3f3;
  color: #666;
}
.note.default.modern a:not(.btn) {
  color: #666;
}
.note.default.modern a:not(.btn):hover {
  color: #454545;
}
.note.default:not(.modern) {
  border-left-color: #777;
}
.note.default:not(.modern) h2,
.note.default:not(.modern) h3,
.note.default:not(.modern) h4,
.note.default:not(.modern) h5,
.note.default:not(.modern) h6 {
  color: #777;
}
.note.default:not(.no-icon)::before {
  content: '\f0a9';
}
.note.default:not(.no-icon):not(.modern)::before {
  color: #777;
}
.note.primary.flat {
  background: #f5f0fa;
}
.note.primary.modern {
  border-color: #e1c2ff;
  background: #f3daff;
  color: #6f42c1;
}
.note.primary.modern a:not(.btn) {
  color: #6f42c1;
}
.note.primary.modern a:not(.btn):hover {
  color: #453298;
}
.note.primary:not(.modern) {
  border-left-color: #6f42c1;
}
.note.primary:not(.modern) h2,
.note.primary:not(.modern) h3,
.note.primary:not(.modern) h4,
.note.primary:not(.modern) h5,
.note.primary:not(.modern) h6 {
  color: #6f42c1;
}
.note.primary:not(.no-icon)::before {
  content: '\f055';
}
.note.primary:not(.no-icon):not(.modern)::before {
  color: #6f42c1;
}
.note.info.flat {
  background: #eef7fa;
}
.note.info.modern {
  border-color: #b3e5ef;
  background: #d9edf7;
  color: #31708f;
}
.note.info.modern a:not(.btn) {
  color: #31708f;
}
.note.info.modern a:not(.btn):hover {
  color: #215761;
}
.note.info:not(.modern) {
  border-left-color: #428bca;
}
.note.info:not(.modern) h2,
.note.info:not(.modern) h3,
.note.info:not(.modern) h4,
.note.info:not(.modern) h5,
.note.info:not(.modern) h6 {
  color: #428bca;
}
.note.info:not(.no-icon)::before {
  content: '\f05a';
}
.note.info:not(.no-icon):not(.modern)::before {
  color: #428bca;
}
.note.success.flat {
  background: #eff8f0;
}
.note.success.modern {
  border-color: #d0e6be;
  background: #dff0d8;
  color: #3c763d;
}
.note.success.modern a:not(.btn) {
  color: #3c763d;
}
.note.success.modern a:not(.btn):hover {
  color: #32562c;
}
.note.success:not(.modern) {
  border-left-color: #5cb85c;
}
.note.success:not(.modern) h2,
.note.success:not(.modern) h3,
.note.success:not(.modern) h4,
.note.s