Skip to content

Instantly share code, notes, and snippets.

@hanneshapke
Last active August 21, 2021 06:18
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save hanneshapke/e2dd30ece4c778d335e7d3fafd6ce4ff to your computer and use it in GitHub Desktop.
Save hanneshapke/e2dd30ece4c778d335e7d3fafd6ce4ff to your computer and use it in GitHub Desktop.
TFX Pipeline for Bert Preprocessing.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "TFX Pipeline for Bert Preprocessing.ipynb",
"provenance": [],
"collapsed_sections": [],
"toc_visible": true,
"machine_shape": "hm",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/hanneshapke/e2dd30ece4c778d335e7d3fafd6ce4ff/tfx-pipeline-for-bert-preprocessing.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "o18JmOsdRTEw",
"colab_type": "text"
},
"source": [
"# Pipeline Example performing the Bert Preprocessing with TensorFlow Transform\n",
"\n",
"## Motivation\n",
"\n",
"Instead of converting the input to a tranformer model into token ids on the client side, the model exported from this pipeline will allow the conversion on the server side.\n",
"\n",
"The pipeline takes advantage of the broad TensorFlow Eco system, including:\n",
"* Loading the IMDB dataset via **TensorFlow Datasets**\n",
"* Loading a pre-trained model via **tf.hub**\n",
"* Manipulating the raw input data with **tf.text**\n",
"* Building a simple model architecture with **Keras**\n",
"* Composing the model pipeline with **TensorFlow Extended**, e.g. TensorFlow Transform, TensorFlow Data Validation \n",
"\n",
"The structure of the overall pipeline follows the [TFX Taxi Cab example](https://colab.research.google.com/github/tensorflow/tfx/blob/master/docs/tutorials/tfx/components.ipynb) \n",
"\n",
"### Outline\n",
"\n",
"* Install Required Packages\n",
"* Load the training data set\n",
"* Set up helper functions, if running on TF 2.0\n",
"* Create the TFX Pipeline\n",
"* Export the trained Model\n",
"* Test the exported Model\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Rinax0YJ_otk",
"colab_type": "text"
},
"source": [
"# Project Setup"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3rqjoMKeMxWq",
"colab_type": "text"
},
"source": [
"## Install Required Packages\n",
"\n",
"**Note** \n",
"After installing the required Python packages, you'll need to restart the Colab Runtime Engine (Menu > Runtime > Restart runtime...)\n",
"\n",
"![Restart of the Colab Runtime Engine](https://drive.google.com/uc?id=1xnjAy2sxIymKhydkqb0RKzgVK9rh3teH)\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Sjjgiv0bM0hi",
"colab_type": "code",
"outputId": "0fa772a9-2dba-44cd-a3bb-f169c80a122a",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 68
}
},
"source": [
"try:\n",
" # %tensorflow_version only exists in Colab.\n",
" %tensorflow_version 2.x\n",
"except Exception:\n",
" pass\n",
"\n",
"try:\n",
" import pyarrow\n",
" print('Current PyArrow: {}'.format(pyarrow.__version__))\n",
" if pyarrow.__version__ != '0.15.0':\n",
" print('Installing PyArrow 0.15.0')\n",
" !pip install -q pyarrow==0.15.0\n",
" print('PyArrow was updated. RESTART THE RUNTIME using the Runtime menu: Runtime > Restart runtime ...')\n",
" print('FOLLOWING RESET start from running the first cell again')\n",
"except ModuleNotFoundError:\n",
" print('Installing PyArrow 0.15.0')\n",
" !pip install -q pyarrow==0.15.0\n",
"\n",
"try:\n",
" import apache_beam as beam\n",
" print('Current Apache Beam: {}'.format(beam.__version__))\n",
" if beam.__version__ != '2.17.0':\n",
" print('Installing PyArrow 2.17.0')\n",
" !pip install -q apache-beam==2.17.0\n",
" print('Apache Beam was updated. RESTART THE RUNTIME using the Runtime menu: Runtime > Restart runtime ...')\n",
" print('FOLLOWING RESET start from running the first cell again')\n",
"except ModuleNotFoundError:\n",
" print('Installing Apache Beam 2.17.0')\n",
" !pip install -q apache-beam==2.17.0\n",
"\n",
"!pip install -U -q tfx_bsl==0.21.2\n",
"!pip install -U -q tfx\n",
"!pip install -U -q tensorflow-text"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": [
"TensorFlow 2.x selected.\n",
"Current PyArrow: 0.15.0\n",
"Current Apache Beam: 2.17.0\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5NQSFUNALhFG",
"colab_type": "text"
},
"source": [
"## Import relevant packages"
]
},
{
"cell_type": "code",
"metadata": {
"id": "oThi-x8xLlv-",
"colab_type": "code",
"colab": {}
},
"source": [
"import glob\n",
"import os\n",
"import pprint\n",
"import re\n",
"import tempfile\n",
"from shutil import rmtree\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"import tensorflow as tf\n",
"\n",
"import tensorflow_data_validation as tfdv\n",
"import tensorflow_datasets as tfds\n",
"import tensorflow_hub as hub\n",
"import tensorflow_text as text\n",
"import tensorflow_transform as tft\n",
"import tensorflow_transform.beam as tft_beam\n",
"\n",
"from tensorflow_transform.beam.tft_beam_io import transform_fn_io\n",
"from tensorflow_transform.saved import saved_transform_io\n",
"from tensorflow_transform.tf_metadata import (dataset_metadata, dataset_schema,\n",
" metadata_io, schema_utils)\n",
"from tfx.components.example_gen.import_example_gen.component import \\\n",
" ImportExampleGen\n",
"from tfx.components.example_validator.component import ExampleValidator\n",
"from tfx.components.model_validator.component import ModelValidator\n",
"from tfx.components.pusher.component import Pusher\n",
"from tfx.components.schema_gen.component import SchemaGen\n",
"from tfx.components.statistics_gen.component import StatisticsGen\n",
"from tfx.components.trainer.component import Trainer\n",
"from tfx.components.transform.component import Transform\n",
"from tfx.orchestration.experimental.interactive.interactive_context import \\\n",
" InteractiveContext\n",
"from tfx.proto import evaluator_pb2, example_gen_pb2, pusher_pb2, trainer_pb2\n",
"from tfx.utils.dsl_utils import external_input\n",
"from tqdm import tqdm_notebook\n",
"\n",
"%load_ext tfx.orchestration.experimental.interactive.notebook_extensions.skip"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "uuKziu0W9o7O",
"colab_type": "text"
},
"source": [
"## Check GPU Availability\n",
"\n",
"Check if your Colab notebook is configured to use Graphical Processing Units (GPUs). If zero GPUs are available, check if the Colab notebook is configured to use GPUs (Menu > Runtime > Change Runtime Type).\n",
"\n",
"![Hardware Accelerator Settings](https://drive.google.com/uc?id=1qrihuuMtvzXJHiRV8M7RngbxFYipXKQx)\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "wlvqWtr7R8eu",
"colab_type": "code",
"outputId": "2704ffbf-4816-4ae3-e401-96472ba499f2",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"num_gpus_available = len(tf.config.experimental.list_physical_devices('GPU'))\n",
"print(\"Num GPUs Available: \", num_gpus_available)\n",
"assert num_gpus_available > 0"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Num GPUs Available: 1\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "q4OMItPSLnDj",
"colab_type": "text"
},
"source": [
"## Download the IMDB Dataset from TensorFlow Datasets\n",
"\n",
"For our demo example, we are using the [IMDB data set](https://www.kaggle.com/lakshmi25npathi/imdb-dataset-of-50k-movie-reviews) to train a sentiment model based on the pre-trained BERT model. The data set is provided through [TensorFlow Datasets](https://www.tensorflow.org/datasets). Our ML pipeline can read TFRecords, however it expects only TFRecord files in the data folder. That is the reason why we need to delete the additional files provided by TFDS."
]
},
{
"cell_type": "code",
"metadata": {
"id": "KjWjnzPGKjIk",
"colab_type": "code",
"outputId": "eea5ad6b-39f5-4a87-9269-cc9dc87c3659",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 105
}
},
"source": [
"!mkdir /content/tfds/\n",
"\n",
"def clean_before_download(base_data_dir):\n",
" rmtree(base_data_dir)\n",
" \n",
"def delete_unnecessary_files(base_path):\n",
" os.remove(base_path + \"dataset_info.json\")\n",
" os.remove(base_path + \"label.labels.txt\")\n",
" \n",
" counter = 2\n",
" for f in glob.glob(base_path + \"imdb_reviews-unsupervised.*\"):\n",
" os.remove(f)\n",
" counter += 1\n",
" print(f\"Deleted {counter} files\")\n",
"\n",
"def get_dataset(name='imdb_reviews', version=\"0.1.0\"):\n",
"\n",
" base_data_dir = \"/content/tfds/\"\n",
" config=\"plain_text\"\n",
" version=\"0.1.0\"\n",
"\n",
" clean_before_download(base_data_dir)\n",
" tfds.disable_progress_bar()\n",
" builder = tfds.text.IMDBReviews(data_dir=base_data_dir, \n",
" config=config, \n",
" version=version)\n",
" download_config = tfds.download.DownloadConfig(\n",
" download_mode=tfds.GenerateMode.FORCE_REDOWNLOAD)\n",
" builder.download_and_prepare(download_config=download_config)\n",
"\n",
" base_tfrecords_filename = os.path.join(base_data_dir, \"imdb_reviews\", config, version, \"\")\n",
" train_tfrecords_filename = base_tfrecords_filename + \"imdb_reviews-train*\"\n",
" test_tfrecords_filename = base_tfrecords_filename + \"imdb_reviews-test*\"\n",
" label_filename = os.path.join(base_tfrecords_filename, \"label.labels.txt\")\n",
" labels = [label.rstrip('\\n') for label in open(label_filename)]\n",
" delete_unnecessary_files(base_tfrecords_filename)\n",
" return (train_tfrecords_filename, test_tfrecords_filename), labels\n",
"\n",
"tfrecords_filenames, labels = get_dataset()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"mkdir: cannot create directory ‘/content/tfds/’: File exists\n",
"\u001b[1mDownloading and preparing dataset imdb_reviews (80.23 MiB) to /content/tfds/imdb_reviews/plain_text/0.1.0...\u001b[0m\n",
"\u001b[1mDataset imdb_reviews downloaded and prepared to /content/tfds/imdb_reviews/plain_text/0.1.0. Subsequent calls will reuse this data.\u001b[0m\n",
"Deleted 22 files\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RDtPNfOwriT8",
"colab_type": "text"
},
"source": [
"# Model Architecture for our Sentiment Classification\n",
"\n",
"In our ML pipeline we need to use TensorFlow Estimators (TFX currently doesn't support the Keras). However, that doesn't stop use from defining the model with Keras and then converting it to a TensorFlow Estimator. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "Tre_oQu0rlrU",
"colab_type": "code",
"outputId": "b98f5478-68d6-4aa4-8973-1a6cb20552aa",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
}
},
"source": [
"%%skip_for_export\n",
"%%writefile model.py\n",
"\n",
"import tensorflow as tf\n",
"import tensorflow_hub as hub\n",
"\n",
"BERT_TFHUB_URL = \"https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/1\"\n",
"\n",
"def load_bert_layer(model_url=BERT_TFHUB_URL):\n",
" # Load the pre-trained BERT model as layer in Keras\n",
" bert_layer = hub.KerasLayer(\n",
" handle=model_url,\n",
" trainable=True)\n",
" return bert_layer\n",
"\n",
"def get_model(config, tf_transform_output, max_seq_length=64, num_labels=2):\n",
"\n",
" # dynamically create inputs for all outputs of our transform graph\n",
" feature_spec = tf_transform_output.transformed_feature_spec() \n",
" # the feature_spec contains the output feature `label` as well, we need to \n",
" # remove that feature column\n",
" feature_spec.pop('label')\n",
"\n",
" inputs = {\n",
" key: tf.keras.layers.Input(shape=(max_seq_length), name=key, dtype=tf.int32)\n",
" for key in feature_spec.keys()\n",
" }\n",
"\n",
" bert_layer = load_bert_layer()\n",
" pooled_output, sequence_output = bert_layer(\n",
" [inputs['input_word_ids'], \n",
" inputs['input_mask'], \n",
" inputs['input_type_ids']\n",
" ]\n",
" )\n",
" \n",
" # Add additional layers depending on your problem\n",
" x = tf.keras.layers.Dense(256, activation='relu')(pooled_output)\n",
" dense = tf.keras.layers.Dense(64, activation='relu')(x)\n",
" pred = tf.keras.layers.Dense(2, activation='softmax')(x)\n",
"\n",
" keras_model = tf.keras.Model(\n",
" inputs=[\n",
" inputs['input_word_ids'], \n",
" inputs['input_mask'], \n",
" inputs['input_type_ids']], \n",
" outputs=pred)\n",
" keras_model.compile(loss='categorical_crossentropy', \n",
" optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001), \n",
" metrics=['accuracy']\n",
" )\n",
" \n",
" # When you convert the Keras model to an Estimator, make sure the\n",
" # custom KerasLayer is converted as well \n",
" with tf.keras.utils.CustomObjectScope({'bert_layer': bert_layer}):\n",
" estimator = tf.keras.estimator.model_to_estimator(\n",
" keras_model=keras_model, config=config)\n",
" return estimator \n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Overwriting model.py\n",
"This cell will be skipped during export to pipeline.\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gTupeHeKryOx",
"colab_type": "text"
},
"source": [
"# TensorFlow 2.0 Helper Functions"
]
},
{
"cell_type": "code",
"metadata": {
"id": "G30OAy-3r0yM",
"colab_type": "code",
"outputId": "63913362-30f9-4646-d469-5c10dc15e6b3",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
}
},
"source": [
"%%skip_for_export\n",
"%%writefile tf2_0_helpers.py\n",
"\n",
"\"\"\"\n",
"If you need to run this ML pipeline on <TF2.1rc0 and >TF1.X, load the \n",
"tokenization table with the code provided below \n",
"\n",
"The _CreateTable functions are redundant with the release of \n",
"https://github.com/tensorflow/text/commit/bc7c213fb89d0bd323b6b674b15f2f6be4bf1500\n",
"\"\"\"\n",
"\n",
"import tensorflow as tf\n",
"\n",
"def merge_dims(rt, axis=0):\n",
" \"\"\"\n",
" Function was suggested in this Github issue:\n",
" https://github.com/tensorflow/text/issues/155\n",
" \n",
" Collapses the specified axis of a RaggedTensor.\n",
"\n",
" Suppose we have a RaggedTensor like this:\n",
" [[1, 2, 3],\n",
" [4, 5],\n",
" [6]]\n",
"\n",
" If we flatten the 0th dimension, it becomes:\n",
" [1, 2, 3, 4, 5, 6]\n",
"\n",
" Args:\n",
" rt: a RaggedTensor.\n",
" axis: the dimension to flatten.\n",
"\n",
" Returns:\n",
" A flattened RaggedTensor, which now has one less dimension.\n",
" \"\"\"\n",
" to_expand = rt.nested_row_lengths()[axis]\n",
" to_elim = rt.nested_row_lengths()[axis + 1]\n",
"\n",
" bar = tf.RaggedTensor.from_row_lengths(to_elim, row_lengths=to_expand)\n",
" new_row_lengths = tf.reduce_sum(bar, axis=1)\n",
" return tf.RaggedTensor.from_nested_row_lengths(\n",
" rt.flat_values,\n",
" rt.nested_row_lengths()[:axis] + (new_row_lengths,))\n",
"\n",
"def load_vocab_data(vocab_file):\n",
" vocab_list = []\n",
" with open(vocab_file, \"r\") as f:\n",
" for i in f.readlines():\n",
" vocab_list.append(i.strip('\\n'))\n",
" return vocab_list\n",
"\n",
"def _CreateTable(num_oov=1):\n",
"\n",
" vocab = load_vocab_data()\n",
" init = tf.lookup.KeyValueTensorInitializer(\n",
" vocab,\n",
" tf.range(tf.size(vocab, out_type=tf.int64), dtype=tf.int64),\n",
" key_dtype=tf.string,\n",
" value_dtype=tf.int64)\n",
" return tf.lookup.StaticVocabularyTable(\n",
" init, num_oov, lookup_key_dtype=tf.string)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Overwriting tf2_0_helpers.py\n",
"This cell will be skipped during export to pipeline.\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "k-5QGnm_lFJD",
"colab_type": "text"
},
"source": [
"# TFX Pipeline\n",
"\n",
"The TensorFlow Extended Pipeline is more or less following the example setup shown here. We'll only note deviations from the original setup."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "arPCEBYEFqEr",
"colab_type": "text"
},
"source": [
"## Initializing the Interactive TFX Pipeline"
]
},
{
"cell_type": "code",
"metadata": {
"id": "sBO0T3D5kkOt",
"colab_type": "code",
"outputId": "93e852bf-3109-4f03-e841-f8acf21af509",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
}
},
"source": [
"context = InteractiveContext()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"WARNING:absl:InteractiveContext pipeline_root argument not provided: using temporary directory /tmp/tfx-interactive-2020-02-22T23_28_29.346768-sf4l_wql as root for pipeline outputs.\n",
"WARNING:absl:InteractiveContext metadata_connection_config not provided: using SQLite ML Metadata database at /tmp/tfx-interactive-2020-02-22T23_28_29.346768-sf4l_wql/metadata.sqlite.\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qo2Q-c_ynL2x",
"colab_type": "text"
},
"source": [
"## Loading the dataset"
]
},
{
"cell_type": "code",
"metadata": {
"id": "W8GqUHwAKm6j",
"colab_type": "code",
"outputId": "e62ba49a-3a2c-402e-d19f-c3edf83335cb",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 228
}
},
"source": [
"output = example_gen_pb2.Output(\n",
" split_config=example_gen_pb2.SplitConfig(splits=[\n",
" example_gen_pb2.SplitConfig.Split(name='train', hash_buckets=45),\n",
" example_gen_pb2.SplitConfig.Split(name='eval', hash_buckets=5)\n",
" ]))\n",
"# Load the data from our prepared TFDS folder\n",
"examples = external_input(\"/content/tfds/imdb_reviews/plain_text/0.1.0\")\n",
"example_gen = ImportExampleGen(input=examples, output_config=output)\n",
"\n",
"context.run(example_gen)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"ERROR:absl:mlmd client NotFoundError: No type found for query: tfx.components.example_gen.import_example_gen.component.ImportExampleGen\n",
"WARNING:root:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.\n"
],
"name": "stderr"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<style>\n",
".tfx-object.expanded {\n",
" padding: 4px 8px 4px 8px;\n",
" background: white;\n",
" border: 1px solid #bbbbbb;\n",
" box-shadow: 4px 4px 2px rgba(0,0,0,0.05);\n",
"}\n",
".tfx-object, .tfx-object * {\n",
" font-size: 11pt;\n",
"}\n",
".tfx-object > .title {\n",
" cursor: pointer;\n",
"}\n",
".tfx-object .expansion-marker {\n",
" color: #999999;\n",
"}\n",
".tfx-object.expanded > .title > .expansion-marker:before {\n",
" content: '▼';\n",
"}\n",
".tfx-object.collapsed > .title > .expansion-marker:before {\n",
" content: '▶';\n",
"}\n",
".tfx-object .class-name {\n",
" font-weight: bold;\n",
"}\n",
".tfx-object .deemphasize {\n",
" opacity: 0.5;\n",
"}\n",
".tfx-object.collapsed > table.attr-table {\n",
" display: none;\n",
"}\n",
".tfx-object.expanded > table.attr-table {\n",
" display: block;\n",
"}\n",
".tfx-object table.attr-table {\n",
" border: 2px solid white;\n",
" margin-top: 5px;\n",
"}\n",
".tfx-object table.attr-table td.attr-name {\n",
" vertical-align: top;\n",
" font-weight: bold;\n",
"}\n",
".tfx-object table.attr-table td.attrvalue {\n",
" text-align: left;\n",
"}\n",
"</style>\n",
"<script>\n",
"function toggleTfxObject(element) {\n",
" var objElement = element.parentElement;\n",
" if (objElement.classList.contains('collapsed')) {\n",
" objElement.classList.remove('collapsed');\n",
" objElement.classList.add('expanded');\n",
" } else {\n",
" objElement.classList.add('collapsed');\n",
" objElement.classList.remove('expanded');\n",
" }\n",
"}\n",
"</script>\n",
"<div class=\"tfx-object expanded\"><div class = \"title\" onclick=\"toggleTfxObject(this)\"><span class=\"expansion-marker\"></span><span class=\"class-name\">ExecutionResult</span><span class=\"deemphasize\"> at 0x7fea7d7c3128</span></div><table class=\"attr-table\"><tr><td class=\"attr-name\">.execution_id</td><td class = \"attrvalue\">1</td></tr><tr><td class=\"attr-name\">.component</td><td class = \"attrvalue\"><style>\n",
".tfx-object.expanded {\n",
" padding: 4px 8px 4px 8px;\n",
" background: white;\n",
" border: 1px solid #bbbbbb;\n",
" box-shadow: 4px 4px 2px rgba(0,0,0,0.05);\n",
"}\n",
".tfx-object, .tfx-object * {\n",
" font-size: 11pt;\n",
"}\n",
".tfx-object > .title {\n",
" cursor: pointer;\n",
"}\n",
".tfx-object .expansion-marker {\n",
" color: #999999;\n",
"}\n",
".tfx-object.expanded > .title > .expansion-marker:before {\n",
" content: '▼';\n",
"}\n",
".tfx-object.collapsed > .title > .expansion-marker:before {\n",
" content: '▶';\n",
"}\n",
".tfx-object .class-name {\n",
" font-weight: bold;\n",
"}\n",
".tfx-object .deemphasize {\n",
" opacity: 0.5;\n",
"}\n",
".tfx-object.collapsed > table.attr-table {\n",
" display: none;\n",
"}\n",
".tfx-object.expanded > table.attr-table {\n",
" display: block;\n",
"}\n",
".tfx-object table.attr-table {\n",
" border: 2px solid white;\n",
" margin-top: 5px;\n",
"}\n",
".tfx-object table.attr-table td.attr-name {\n",
" vertical-align: top;\n",
" font-weight: bold;\n",
"}\n",
".tfx-object table.attr-table td.attrvalue {\n",
" text-align: left;\n",
"}\n",
"</style>\n",
"<script>\n",
"function toggleTfxObject(element) {\n",
" var objElement = element.parentElement;\n",
" if (objElement.classList.contains('collapsed')) {\n",
" objElement.classList.remove('collapsed');\n",
" objElement.classList.add('expanded');\n",
" } else {\n",
" objElement.classList.add('collapsed');\n",
" objElement.classList.remove('expanded');\n",
" }\n",
"}\n",
"</script>\n",
"<div class=\"tfx-object collapsed\"><div class = \"title\" onclick=\"toggleTfxObject(this)\"><span class=\"expansion-marker\"></span><span class=\"class-name\">ImportExampleGen</span><span class=\"deemphasize\"> at 0x7fea5ccadbe0</span></div><table class=\"attr-table\"><tr><td class=\"attr-name\">.inputs</td><td class = \"attrvalue\"><table class=\"attr-table\"><tr><td class=\"attr-name\">['input']</td><td class = \"attrvalue\"><style>\n",
".tfx-object.expanded {\n",
" padding: 4px 8px 4px 8px;\n",
" background: white;\n",
" border: 1px solid #bbbbbb;\n",
" box-shadow: 4px 4px 2px rgba(0,0,0,0.05);\n",
"}\n",
".tfx-object, .tfx-object * {\n",
" font-size: 11pt;\n",
"}\n",
".tfx-object > .title {\n",
" cursor: pointer;\n",
"}\n",
".tfx-object .expansion-marker {\n",
" color: #999999;\n",
"}\n",
".tfx-object.expanded > .title > .expansion-marker:before {\n",
" content: '▼';\n",
"}\n",
".tfx-object.collapsed > .title > .expansion-marker:before {\n",
" content: '▶';\n",
"}\n",
".tfx-object .class-name {\n",
" font-weight: bold;\n",
"}\n",
".tfx-object .deemphasize {\n",
" opacity: 0.5;\n",
"}\n",
".tfx-object.collapsed > table.attr-table {\n",
" display: none;\n",
"}\n",
".tfx-object.expanded > table.attr-table {\n",
" display: block;\n",
"}\n",
".tfx-object table.attr-table {\n",
" border: 2px solid white;\n",
" margin-top: 5px;\n",
"}\n",
".tfx-object table.attr-table td.attr-name {\n",
" vertical-align: top;\n",
" font-weight: bold;\n",
"}\n",
".tfx-object table.attr-table td.attrvalue {\n",
" text-align: left;\n",
"}\n",
"</style>\n",
"<script>\n",
"function toggleTfxObject(element) {\n",
" var objElement = element.parentElement;\n",
" if (objElement.classList.contains('collapsed')) {\n",
" objElement.classList.remove('collapsed');\n",
" objElement.classList.add('expanded');\n",
" } else {\n",
" objElement.classList.add('collapsed');\n",
" objElement.classList.remove('expanded');\n",
" }\n",
"}\n",
"</script>\n",
"<div class=\"tfx-object collapsed\"><div class = \"title\" onclick=\"toggleTfxObject(this)\"><span class=\"expansion-marker\"></span><span class=\"class-name\">Channel</span> of type <span class=\"class-name\">'ExternalArtifact'</span> (1 artifact)<span class=\"deemphasize\"> at 0x7fea5ccadb38</span></div><table class=\"attr-table\"><tr><td class=\"attr-name\">.type_name</td><td class = \"attrvalue\">ExternalArtifact</td></tr><tr><td class=\"attr-name\">._artifacts</td><td class = \"attrvalue\"><table class=\"attr-table\"><tr><td class=\"attr-name\">[0]</td><td class = \"attrvalue\"><style>\n",
".tfx-object.expanded {\n",
" padding: 4px 8px 4px 8px;\n",
" background: white;\n",
" border: 1px solid #bbbbbb;\n",
" box-shadow: 4px 4px 2px rgba(0,0,0,0.05);\n",
"}\n",
".tfx-object, .tfx-object * {\n",
" font-size: 11pt;\n",
"}\n",
".tfx-object > .title {\n",
" cursor: pointer;\n",
"}\n",
".tfx-object .expansion-marker {\n",
" color: #999999;\n",
"}\n",
".tfx-object.expanded > .title > .expansion-marker:before {\n",
" content: '▼';\n",
"}\n",
".tfx-object.collapsed > .title > .expansion-marker:before {\n",
" content: '▶';\n",
"}\n",
".tfx-object .class-name {\n",
" font-weight: bold;\n",
"}\n",
".tfx-object .deemphasize {\n",
" opacity: 0.5;\n",
"}\n",
".tfx-object.collapsed > table.attr-table {\n",
" display: none;\n",
"}\n",
".tfx-object.expanded > table.attr-table {\n",
" display: block;\n",
"}\n",
".tfx-object table.attr-table {\n",
" border: 2px solid white;\n",
" margin-top: 5px;\n",
"}\n",
".tfx-object table.attr-table td.attr-name {\n",
" vertical-align: top;\n",
" font-weight: bold;\n",
"}\n",
".tfx-object table.attr-table td.attrvalue {\n",
" text-align: left;\n",
"}\n",
"</style>\n",
"<script>\n",
"function toggleTfxObject(element) {\n",
" var objElement = element.parentElement;\n",
" if (objElement.classList.contains('collapsed')) {\n",
" objElement.classList.remove('collapsed');\n",
" objElement.classList.add('expanded');\n",
" } else {\n",
" objElement.classList.add('collapsed');\n",
" objElement.classList.remove('expanded');\n",
" }\n",
"}\n",
"</script>\n",
"<div class=\"tfx-object collapsed\"><div class = \"title\" onclick=\"toggleTfxObject(this)\"><span class=\"expansion-marker\"></span><span class=\"class-name\">Artifact</span> of type <span class=\"class-name\">'ExternalArtifact'</span> (uri: /content/tfds/imdb_reviews/plain_text/0.1.0)<span class=\"deemphasize\"> at 0x7fea5ccadb00</span></div><table class=\"attr-table\"><tr><td class=\"attr-name\">.type</td><td class = \"attrvalue\">&lt;class 'tfx.types.standard_artifacts.ExternalArtifact'&gt;</td></tr><tr><td class=\"attr-name\">.uri</td><td class = \"attrvalue\">/content/tfds/imdb_reviews/plain_text/0.1.0</td></tr></table></div></td></tr></table></td></tr></table></div></td></tr></table></td></tr><tr><td class=\"attr-name\">.outputs</td><td class = \"attrvalue\"><table class=\"attr-table\"><tr><td class=\"attr-name\">['examples']</td><td class = \"attrvalue\"><style>\n",
".tfx-object.expanded {\n",
" padding: 4px 8px 4px 8px;\n",
" background: white;\n",
" border: 1px solid #bbbbbb;\n",
" box-shadow: 4px 4px 2px rgba(0,0,0,0.05);\n",
"}\n",
".tfx-object, .tfx-object * {\n",
" font-size: 11pt;\n",
"}\n",
".tfx-object > .title {\n",
" cursor: pointer;\n",
"}\n",
".tfx-object .expansion-marker {\n",
" color: #999999;\n",
"}\n",
".tfx-object.expanded > .title > .expansion-marker:before {\n",
" content: '▼';\n",
"}\n",
".tfx-object.collapsed > .title > .expansion-marker:before {\n",
" content: '▶';\n",
"}\n",
".tfx-object .class-name {\n",
" font-weight: bold;\n",
"}\n",
".tfx-object .deemphasize {\n",
" opacity: 0.5;\n",
"}\n",
".tfx-object.collapsed > table.attr-table {\n",
" display: none;\n",
"}\n",
".tfx-object.expanded > table.attr-table {\n",
" display: block;\n",
"}\n",
".tfx-object table.attr-table {\n",
" border: 2px solid white;\n",
" margin-top: 5px;\n",
"}\n",
".tfx-object table.attr-table td.attr-name {\n",
" vertical-align: top;\n",
" font-weight: bold;\n",
"}\n",
".tfx-object table.attr-table td.attrvalue {\n",
" text-align: left;\n",
"}\n",
"</style>\n",
"<script>\n",
"function toggleTfxObject(element) {\n",
" var objElement = element.parentElement;\n",
" if (objElement.classList.contains('collapsed')) {\n",
" objElement.classList.remove('collapsed');\n",
" objElement.classList.add('expanded');\n",
" } else {\n",
" objElement.classList.add('collapsed');\n",
" objElement.classList.remove('expanded');\n",
" }\n",
"}\n",
"</script>\n",
"<div class=\"tfx-object collapsed\"><div class = \"title\" onclick=\"toggleTfxObject(this)\"><span class=\"expansion-marker\"></span><span class=\"class-name\">Channel</span> of type <span class=\"class-name\">'Examples'</span> (1 artifact)<span class=\"deemphasize\"> at 0x7fea5ccadc88</span></div><table class=\"attr-table\"><tr><td class=\"attr-name\">.type_name</td><td class = \"attrvalue\">Examples</td></tr><tr><td class=\"attr-name\">._artifacts</td><td class = \"attrvalue\"><table class=\"attr-table\"><tr><td class=\"attr-name\">[0]</td><td class = \"attrvalue\"><style>\n",
".tfx-object.expanded {\n",
" padding: 4px 8px 4px 8px;\n",
" background: white;\n",
" border: 1px solid #bbbbbb;\n",
" box-shadow: 4px 4px 2px rgba(0,0,0,0.05);\n",
"}\n",
".tfx-object, .tfx-object * {\n",
" font-size: 11pt;\n",
"}\n",
".tfx-object > .title {\n",
" cursor: pointer;\n",
"}\n",
".tfx-object .expansion-marker {\n",
" color: #999999;\n",
"}\n",
".tfx-object.expanded > .title > .expansion-marker:before {\n",
" content: '▼';\n",
"}\n",
".tfx-object.collapsed > .title > .expansion-marker:before {\n",
" content: '▶';\n",
"}\n",
".tfx-object .class-name {\n",
" font-weight: bold;\n",
"}\n",
".tfx-object .deemphasize {\n",
" opacity: 0.5;\n",
"}\n",
".tfx-object.collapsed > table.attr-table {\n",
" display: none;\n",
"}\n",
".tfx-object.expanded > table.attr-table {\n",
" display: block;\n",
"}\n",
".tfx-object table.attr-table {\n",
" border: 2px solid white;\n",
" margin-top: 5px;\n",
"}\n",
".tfx-object table.attr-table td.attr-name {\n",
" vertical-align: top;\n",
" font-weight: bold;\n",
"}\n",
".tfx-object table.attr-table td.attrvalue {\n",
" text-align: left;\n",
"}\n",
"</style>\n",
"<script>\n",
"function toggleTfxObject(element) {\n",
" var objElement = element.parentElement;\n",
" if (objElement.classList.contains('collapsed')) {\n",
" objElement.classList.remove('collapsed');\n",
" objElement.classList.add('expanded');\n",
" } else {\n",
" objElement.classList.add('collapsed');\n",
" objElement.classList.remove('expanded');\n",
" }\n",
"}\n",
"</script>\n",
"<div class=\"tfx-object collapsed\"><div class = \"title\" onclick=\"toggleTfxObject(this)\"><span class=\"expansion-marker\"></span><span class=\"class-name\">Artifact</span> of type <span class=\"class-name\">'Examples'</span> (uri: /tmp/tfx-interactive-2020-02-22T23_28_29.346768-sf4l_wql/ImportExampleGen/examples/1)<span class=\"deemphasize\"> at 0x7fea5ccadc18</span></div><table class=\"attr-table\"><tr><td class=\"attr-name\">.type</td><td class = \"attrvalue\">&lt;class 'tfx.types.standard_artifacts.Examples'&gt;</td></tr><tr><td class=\"attr-name\">.uri</td><td class = \"attrvalue\">/tmp/tfx-interactive-2020-02-22T23_28_29.346768-sf4l_wql/ImportExampleGen/examples/1</td></tr><tr><td class=\"attr-name\">.span</td><td class = \"attrvalue\">0</td></tr><tr><td class=\"attr-name\">.split_names</td><td class = \"attrvalue\">[\"train\", \"eval\"]</td></tr></table></div></td></tr></table></td></tr></table></div></td></tr></table></td></tr><tr><td class=\"attr-name\">.exec_properties</td><td class = \"attrvalue\"><table class=\"attr-table\"><tr><td class=\"attr-name\">['input_config']</td><td class = \"attrvalue\">{\n",
" \"splits\": [\n",
" {\n",
" \"name\": \"single_split\",\n",
" \"pattern\": \"*\"\n",
" }\n",
" ]\n",
"}</td></tr><tr><td class=\"attr-name\">['output_config']</td><td class = \"attrvalue\">{\n",
" \"split_config\": {\n",
" \"splits\": [\n",
" {\n",
" \"hash_buckets\": 45,\n",
" \"name\": \"train\"\n",
" },\n",
" {\n",
" \"hash_buckets\": 5,\n",
" \"name\": \"eval\"\n",
" }\n",
" ]\n",
" }\n",
"}</td></tr><tr><td class=\"attr-name\">['custom_config']</td><td class = \"attrvalue\">None</td></tr></table></td></tr></table></div></td></tr><tr><td class=\"attr-name\">.component.inputs</td><td class = \"attrvalue\"><table class=\"attr-table\"><tr><td class=\"attr-name\">['input']</td><td class = \"attrvalue\"><style>\n",
".tfx-object.expanded {\n",
" padding: 4px 8px 4px 8px;\n",
" background: white;\n",
" border: 1px solid #bbbbbb;\n",
" box-shadow: 4px 4px 2px rgba(0,0,0,0.05);\n",
"}\n",
".tfx-object, .tfx-object * {\n",
" font-size: 11pt;\n",
"}\n",
".tfx-object > .title {\n",
" cursor: pointer;\n",
"}\n",
".tfx-object .expansion-marker {\n",
" color: #999999;\n",
"}\n",
".tfx-object.expanded > .title > .expansion-marker:before {\n",
" content: '▼';\n",
"}\n",
".tfx-object.collapsed > .title > .expansion-marker:before {\n",
" content: '▶';\n",
"}\n",
".tfx-object .class-name {\n",
" font-weight: bold;\n",
"}\n",
".tfx-object .deemphasize {\n",
" opacity: 0.5;\n",
"}\n",
".tfx-object.collapsed > table.attr-table {\n",
" display: none;\n",
"}\n",
".tfx-object.expanded > table.attr-table {\n",
" display: block;\n",
"}\n",
".tfx-object table.attr-table {\n",
" border: 2px solid white;\n",
" margin-top: 5px;\n",
"}\n",
".tfx-object table.attr-table td.attr-name {\n",
" vertical-align: top;\n",
" font-weight: bold;\n",
"}\n",
".tfx-object table.attr-table td.attrvalue {\n",
" text-align: left;\n",
"}\n",
"</style>\n",
"<script>\n",
"function toggleTfxObject(element) {\n",
" var objElement = element.parentElement;\n",
" if (objElement.classList.contains('collapsed')) {\n",
" objElement.classList.remove('collapsed');\n",
" objElement.classList.add('expanded');\n",
" } else {\n",
" objElement.classList.add('collapsed');\n",
" objElement.classList.remove('expanded');\n",
" }\n",
"}\n",
"</script>\n",
"<div class=\"tfx-object collapsed\"><div class = \"title\" onclick=\"toggleTfxObject(this)\"><span class=\"expansion-marker\"></span><span class=\"class-name\">Channel</span> of type <span class=\"class-name\">'ExternalArtifact'</span> (1 artifact)<span class=\"deemphasize\"> at 0x7fea5ccadb38</span></div><table class=\"attr-table\"><tr><td class=\"attr-name\">.type_name</td><td class = \"attrvalue\">ExternalArtifact</td></tr><tr><td class=\"attr-name\">._artifacts</td><td class = \"attrvalue\"><table class=\"attr-table\"><tr><td class=\"attr-name\">[0]</td><td class = \"attrvalue\"><style>\n",
".tfx-object.expanded {\n",
" padding: 4px 8px 4px 8px;\n",
" background: white;\n",
" border: 1px solid #bbbbbb;\n",
" box-shadow: 4px 4px 2px rgba(0,0,0,0.05);\n",
"}\n",
".tfx-object, .tfx-object * {\n",
" font-size: 11pt;\n",
"}\n",
".tfx-object > .title {\n",
" cursor: pointer;\n",
"}\n",
".tfx-object .expansion-marker {\n",
" color: #999999;\n",
"}\n",
".tfx-object.expanded > .title > .expansion-marker:before {\n",
" content: '▼';\n",
"}\n",
".tfx-object.collapsed > .title > .expansion-marker:before {\n",
" content: '▶';\n",
"}\n",
".tfx-object .class-name {\n",
" font-weight: bold;\n",
"}\n",
".tfx-object .deemphasize {\n",
" opacity: 0.5;\n",
"}\n",
".tfx-object.collapsed > table.attr-table {\n",
" display: none;\n",
"}\n",
".tfx-object.expanded > table.attr-table {\n",
" display: block;\n",
"}\n",
".tfx-object table.attr-table {\n",
" border: 2px solid white;\n",
" margin-top: 5px;\n",
"}\n",
".tfx-object table.attr-table td.attr-name {\n",
" vertical-align: top;\n",
" font-weight: bold;\n",
"}\n",
".tfx-object table.attr-table td.attrvalue {\n",
" text-align: left;\n",
"}\n",
"</style>\n",
"<script>\n",
"function toggleTfxObject(element) {\n",
" var objElement = element.parentElement;\n",
" if (objElement.classList.contains('collapsed')) {\n",
" objElement.classList.remove('collapsed');\n",
" objElement.classList.add('expanded');\n",
" } else {\n",
" objElement.classList.add('collapsed');\n",
" objElement.classList.remove('expanded');\n",
" }\n",
"}\n",
"</script>\n",
"<div class=\"tfx-object collapsed\"><div class = \"title\" onclick=\"toggleTfxObject(this)\"><span class=\"expansion-marker\"></span><span class=\"class-name\">Artifact</span> of type <span class=\"class-name\">'ExternalArtifact'</span> (uri: /content/tfds/imdb_reviews/plain_text/0.1.0)<span class=\"deemphasize\"> at 0x7fea5ccadb00</span></div><table class=\"attr-table\"><tr><td class=\"attr-name\">.type</td><td class = \"attrvalue\">&lt;class 'tfx.types.standard_artifacts.ExternalArtifact'&gt;</td></tr><tr><td class=\"attr-name\">.uri</td><td class = \"attrvalue\">/content/tfds/imdb_reviews/plain_text/0.1.0</td></tr></table></div></td></tr></table></td></tr></table></div></td></tr></table></td></tr><tr><td class=\"attr-name\">.component.outputs</td><td class = \"attrvalue\"><table class=\"attr-table\"><tr><td class=\"attr-name\">['examples']</td><td class = \"attrvalue\"><style>\n",
".tfx-object.expanded {\n",
" padding: 4px 8px 4px 8px;\n",
" background: white;\n",
" border: 1px solid #bbbbbb;\n",
" box-shadow: 4px 4px 2px rgba(0,0,0,0.05);\n",
"}\n",
".tfx-object, .tfx-object * {\n",
" font-size: 11pt;\n",
"}\n",
".tfx-object > .title {\n",
" cursor: pointer;\n",
"}\n",
".tfx-object .expansion-marker {\n",
" color: #999999;\n",
"}\n",
".tfx-object.expanded > .title > .expansion-marker:before {\n",
" content: '▼';\n",
"}\n",
".tfx-object.collapsed > .title > .expansion-marker:before {\n",
" content: '▶';\n",
"}\n",
".tfx-object .class-name {\n",
" font-weight: bold;\n",
"}\n",
".tfx-object .deemphasize {\n",
" opacity: 0.5;\n",
"}\n",
".tfx-object.collapsed > table.attr-table {\n",
" display: none;\n",
"}\n",
".tfx-object.expanded > table.attr-table {\n",
" display: block;\n",
"}\n",
".tfx-object table.attr-table {\n",
" border: 2px solid white;\n",
" margin-top: 5px;\n",
"}\n",
".tfx-object table.attr-table td.attr-name {\n",
" vertical-align: top;\n",
" font-weight: bold;\n",
"}\n",
".tfx-object table.attr-table td.attrvalue {\n",
" text-align: left;\n",
"}\n",
"</style>\n",
"<script>\n",
"function toggleTfxObject(element) {\n",
" var objElement = element.parentElement;\n",
" if (objElement.classList.contains('collapsed')) {\n",
" objElement.classList.remove('collapsed');\n",
" objElement.classList.add('expanded');\n",
" } else {\n",
" objElement.classList.add('collapsed');\n",
" objElement.classList.remove('expanded');\n",
" }\n",
"}\n",
"</script>\n",
"<div class=\"tfx-object collapsed\"><div class = \"title\" onclick=\"toggleTfxObject(this)\"><span class=\"expansion-marker\"></span><span class=\"class-name\">Channel</span> of type <span class=\"class-name\">'Examples'</span> (1 artifact)<span class=\"deemphasize\"> at 0x7fea5ccadc88</span></div><table class=\"attr-table\"><tr><td class=\"attr-name\">.type_name</td><td class = \"attrvalue\">Examples</td></tr><tr><td class=\"attr-name\">._artifacts</td><td class = \"attrvalue\"><table class=\"attr-table\"><tr><td class=\"attr-name\">[0]</td><td class = \"attrvalue\"><style>\n",
".tfx-object.expanded {\n",
" padding: 4px 8px 4px 8px;\n",
" background: white;\n",
" border: 1px solid #bbbbbb;\n",
" box-shadow: 4px 4px 2px rgba(0,0,0,0.05);\n",
"}\n",
".tfx-object, .tfx-object * {\n",
" font-size: 11pt;\n",
"}\n",
".tfx-object > .title {\n",
" cursor: pointer;\n",
"}\n",
".tfx-object .expansion-marker {\n",
" color: #999999;\n",
"}\n",
".tfx-object.expanded > .title > .expansion-marker:before {\n",
" content: '▼';\n",
"}\n",
".tfx-object.collapsed > .title > .expansion-marker:before {\n",
" content: '▶';\n",
"}\n",
".tfx-object .class-name {\n",
" font-weight: bold;\n",
"}\n",
".tfx-object .deemphasize {\n",
" opacity: 0.5;\n",
"}\n",
".tfx-object.collapsed > table.attr-table {\n",
" display: none;\n",
"}\n",
".tfx-object.expanded > table.attr-table {\n",
" display: block;\n",
"}\n",
".tfx-object table.attr-table {\n",
" border: 2px solid white;\n",
" margin-top: 5px;\n",
"}\n",
".tfx-object table.attr-table td.attr-name {\n",
" vertical-align: top;\n",
" font-weight: bold;\n",
"}\n",
".tfx-object table.attr-table td.attrvalue {\n",
" text-align: left;\n",
"}\n",
"</style>\n",
"<script>\n",
"function toggleTfxObject(element) {\n",
" var objElement = element.parentElement;\n",
" if (objElement.classList.contains('collapsed')) {\n",
" objElement.classList.remove('collapsed');\n",
" objElement.classList.add('expanded');\n",
" } else {\n",
" objElement.classList.add('collapsed');\n",
" objElement.classList.remove('expanded');\n",
" }\n",
"}\n",
"</script>\n",
"<div class=\"tfx-object collapsed\"><div class = \"title\" onclick=\"toggleTfxObject(this)\"><span class=\"expansion-marker\"></span><span class=\"class-name\">Artifact</span> of type <span class=\"class-name\">'Examples'</span> (uri: /tmp/tfx-interactive-2020-02-22T23_28_29.346768-sf4l_wql/ImportExampleGen/examples/1)<span class=\"deemphasize\"> at 0x7fea5ccadc18</span></div><table class=\"attr-table\"><tr><td class=\"attr-name\">.type</td><td class = \"attrvalue\">&lt;class 'tfx.types.standard_artifacts.Examples'&gt;</td></tr><tr><td class=\"attr-name\">.uri</td><td class = \"attrvalue\">/tmp/tfx-interactive-2020-02-22T23_28_29.346768-sf4l_wql/ImportExampleGen/examples/1</td></tr><tr><td class=\"attr-name\">.span</td><td class = \"attrvalue\">0</td></tr><tr><td class=\"attr-name\">.split_names</td><td class = \"attrvalue\">[\"train\", \"eval\"]</td></tr></table></div></td></tr></table></td></tr></table></div></td></tr></table></td></tr></table></div>"
],
"text/plain": [
"ExecutionResult(\n",
" component_id: ImportExampleGen\n",
" execution_id: 1\n",
" outputs:\n",
" examples: Channel(\n",
" type_name: Examples\n",
" artifacts: [Artifact(type_name: Examples, uri: /tmp/tfx-interactive-2020-02-22T23_28_29.346768-sf4l_wql/ImportExampleGen/examples/1, id: 2)]\n",
" ))"
]
},
"metadata": {
"tags": []
},
"execution_count": 7
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "iu2ejZTWK-E5",
"colab_type": "code",
"outputId": "4050aa9d-4203-4fad-a445-b83c3cb27a5c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
}
},
"source": [
"%%skip_for_export\n",
"\n",
"for artifact in example_gen.outputs['examples'].get():\n",
" print(artifact.uri)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/tmp/tfx-interactive-2020-02-22T23_28_29.346768-sf4l_wql/ImportExampleGen/examples/1\n",
"This cell will be skipped during export to pipeline.\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "nE9VL-pmF6L_",
"colab_type": "text"
},
"source": [
"## TensorFlow Data Validation"
]
},
{
"cell_type": "code",
"metadata": {
"id": "EglytaKVLQzr",
"colab_type": "code",
"outputId": "cdea0488-f9ae-4cbc-a7e9-a6683a8953dd",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"%%skip_for_export\n",
"\n",
"statistics_gen = StatisticsGen(\n",
" examples=example_gen.outputs['examples'])\n",
"context.run(statistics_gen)\n",
"\n",
"context.show(statistics_gen.outputs['statistics'])"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"ERROR:absl:mlmd client AlreadyExistsError: Given node already exists: type_id: 2\n",
"name: \"interactive-2020-02-22T23_28_29.346768\"\n",
"properties {\n",
" key: \"pipeline_name\"\n",
" value {\n",
" string_value: \"interactive-2020-02-22T23_28_29.346768\"\n",
" }\n",
"}\n",
"Internal: Error when executing query: UNIQUE constraint failed: Context.type_id, Context.name query: INSERT INTO `Context`( `type_id`, `name` ) VALUES(2, 'interactive-2020-02-22T23_28_29.346768');\n",
"ERROR:absl:mlmd client NotFoundError: No type found for query: tfx.components.statistics_gen.component.StatisticsGen\n",
"/usr/local/lib/python3.6/dist-packages/tensorflow_data_validation/arrow/arrow_util.py:236: FutureWarning: Calling .data on ChunkedArray is provided for compatibility after Column was removed, simply drop this attribute\n",
" types.FeaturePath([column_name]), column.data.chunk(0), weights):\n"
],
"name": "stderr"
},
{
"output_type": "display_data",
"data": {
"text/html": [
"<b>Artifact at /tmp/tfx-interactive-2020-02-22T23_28_29.346768-sf4l_wql/StatisticsGen/statistics/2</b><br/><br/>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "display_data",
"data": {
"text/html": [
"<div><b>'train' split:</b></div><br/><br/>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_data_validation/utils/stats_gen_lib.py:366: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use eager execution and: \n",
"`tf.data.TFRecordDataset(path)`\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/html": [
"<iframe id='facets-iframe' width=\"100%\" height=\"500px\"></iframe>\n",
" <script>\n",
" facets_iframe = document.getElementById('facets-iframe');\n",
" facets_html = '<script src=\"https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.3.3/webcomponents-lite.js\"></script><link rel=\"import\" href=\"https://raw.githubusercontent.com/PAIR-code/facets/master/facets-dist/facets-jupyter.html\"><facets-overview proto-input=\"Csu9PwoObGhzX3N0YXRpc3RpY3MQn98CGuq2PxACIty2Pwq4Agif3wIYASABLQAAgD8ypAIaGwkAAAAAAADwPxEAAAAAAADwPyFmZmZm5o+xQBobCQAAAAAAAPA/EQAAAAAAAPA/IWZmZmbmj7FAGhsJAAAAAAAA8D8RAAAAAAAA8D8hZmZmZuaPsUAaGwkAAAAAAADwPxEAAAAAAADwPyFmZmZm5o+xQBobCQAAAAAAAPA/EQAAAAAAAPA/IWZmZmbmj7FAGhsJAAAAAAAA8D8RAAAAAAAA8D8hZmZmZuaPsUAaGwkAAAAAAADwPxEAAAAAAADwPyFmZmZm5o+xQBobCQAAAAAAAPA/EQAAAAAAAPA/IWZmZmbmj7FAGhsJAAAAAAAA8D8RAAAAAAAA8D8hZmZmZuaPsUAaGwkAAAAAAADwPxEAAAAAAADwPyFmZmZm5o+xQCABQJ/fAhCe3AIapAYSmAZMb3ZlZCB0b2RheSdzIHNob3chISEgSXQgd2FzIGEgdmFyaWV0eSBhbmQgbm90IHNvbGVseSBjb29raW5nICh3aGljaCB3b3VsZCBoYXZlIGJlZW4gZ3JlYXQgdG9vKS4gVmVyeSBzdGltdWxhdGluZyBhbmQgY2FwdGl2YXRpbmcsIGFsd2F5cyBrZWVwaW5nIHRoZSB2aWV3ZXIgcGVla2luZyBhcm91bmQgdGhlIGNvcm5lciB0byBzZWUgd2hhdCB3YXMgY29taW5nIHVwIG5leHQuIFNoZSBpcyBhcyBkb3duIHRvIGVhcnRoIGFuZCBhcyBwZXJzb25hYmxlIGFzIHlvdSBnZXQsIGxpa2Ugb25lIG9mIHVzIHdoaWNoIG1hZGUgdGhlIHNob3cgYWxsIHRoZSBtb3JlIGVuam95YWJsZS4gU3BlY2lhbCBndWVzdHMsIHdobyBhcmUgZnJpZW5kcyBhcyB3ZWxsIG1hZGUgZm9yIGEgbmljZSBzdXJwcmlzZSB0b28uIExvdmVkIHRoZSAnZmlyc3QnIHRoZW1lIGFuZCB0aGF0IHRoZSBhdWRpZW5jZSB3YXMgaW52aXRlZCB0byBwbGF5IGFsb25nIHRvby4gSSBtdXN0IGFkbWl0IEkgd2FzIHNob2NrZWQgdG8gc2VlIGhlciBjb21lIGluIHVuZGVyIGhlciB0aW1lIGxpbWl0cyBvbiBhIGZldyB0aGluZ3MsIGJ1dCBzaGUgZGlkIGl0IGFuZCBieSBnb2xseSBJJ2xsIGJlIHdyaXRpbmcgdGhvc2UgcmVjaXBlcyBkb3duLiBTYXZpbmcgdGltZSBpbiB0aGUga2l0Y2hlbiBtZWFucyBtb3JlIHRpbWUgd2l0aCBmYW1pbHkuIFRob3NlIHdobyBoYXZlbid0IHR1bmVkIGluIHlldCwgZmluZCBvdXQgd2hhdCBjaGFubmVsIGFuZCB0aGUgdGltZSwgSSBhc3N1cmUgeW91IHRoYXQgeW91IHdvbid0IGJlIGRpc2FwcG9pbnRlZC4ZAAAAAAAAFEAagwgS9wdIaWxhcmlvdXMsIGNsZWFuLCBsaWdodC1oZWFydGVkLCBhbmQgcXVvdGUtd29ydGh5LiBXaGF0IGVsc2UgY2FuIHlvdSBhc2sgZm9yIGluIGEgZmlsbT8gVGhpcyBpcyBteSBhbGwtdGltZSwgbnVtYmVyIG9uZSBmYXZvcml0ZSBtb3ZpZS4gRXZlciBzaW5jZSBJIHdhcyBhIGxpdHRsZSBnaXJsLCBJJ3ZlIGRyZWFtZWQgb2Ygb3duaW5nIGEgYmx1ZSB2YW4gd2l0aCBmbGFtZXMgYW5kIGFuIG9ic2VydmF0aW9uIGJ1YmJsZS48YnIgLz48YnIgLz5UaGUgY2xpY2jDqSBjaGFyYWN0ZXJzIGluIHJpZGljdWxvdXMgc2l0dWF0aW9ucyBhcmUgd2hhdCBtYWtlIHRoaXMgZmlsbSBzdWNoIGdyZWF0IGZ1bi4gVGhlIHdvbmRlcmZ1bCBjb21lZGljIGNoZW1pc3RyeSBiZXR3ZWVuIFN0ZXBoZW4gRnVyc3QgKEhhcm9sZCkgYW5kIEFuZHkgVGVubmFudCAoTWVsaW8pIG1ha2UgdXAgbW9zdCBvZiBteSBmYXZvcml0ZSBwYXJ0cyBvZiB0aGUgbW92aWUuIEFuZCB3aG8gZGlkbid0IGxvdmUgdGhlIGhvcGVsZXNzIGF3a3dhcmRuZXNzIG9mIEZseW5jaD8gRG9uJ3QgZm9yZ2V0IHRoZSBhaXJwb3J0IGFudGljcyBvZiBMZW9uJ3MgY3JvbmllcywgZHJlc3NlZCB1cCBhcyBIYXJpIEtyaXNobmFzOiBkYW5jaW5nLCBjaGFudGluZyBhbmQgcGxheWluZyB0aGUgdGFtYm91cmluZS0tdW5iZWF0YWJsZSEgVGhlIGNsdWVzIGFyZSBnZW5pdXMsIHRoZSBsb2NhdGlvbnMgYXJlIGNsYXNzaWMsIGFuZCB0aGUgcGxvdCBpcyB0aW1lbGVzcy48YnIgLz48YnIgLz5BIHdvcmQgdG8gdGhlIHdpc2UsIGlmIHlvdSBkaWRuJ3Qgd2F0Y2ggdGhpcyBmaWxtIHdoZW4geW91IHdlcmUgbGl0dGxlLCBpdCBwcm9iYWJseSB3b24ndCB3aW4gYSBwbGFjZSBpbiB5b3VyIGhlYXJ0IHRvZGF5LiBCdXQgbmV2ZXJ0aGVsZXNzIGdpdmUgaXQgYSBjaGFuY2UsIHlvdSBtYXkgZmluZCB0aGF0ICJJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHlvdSBzYXksIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgeW91IGRvLCB5b3UndmUgZ290dGEgcGxheS4iGQAAAAAAABBAGrgNEqwNWW91IGRvIHJlYWxpemUgdGhhdCB5b3UndmUgYmVlbiB3YXRjaGluZyB0aGUgRVhBQ1QgU0FNRSBTSE9XIGZvciBlaWdodCB5ZWFycywgcmlnaHQ/IEkgY291bGQgdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCBjdXJpb3NpdHkgb2Ygc2VlaW5nIHN0cmFuZ2VycyBjby1leGlzdCBvbiBhbiBJc2xhbmQsIGJ1dCB5b3UnZCB0aGluayB0aGF0IGFmdGVyIHdhdGNoaW5nIHVua2VtcHQsIHN0aW5rLWxhZGVuZWQgaGVyb2VzIHJ1biByb3VnaHNob2QgdGhyb3VnaCB0aGUgYnVzaCB3aXRoIGFuIGVnZyBvbiBhIHNwb29uIGZvciBoYWxmIGEgZGVjYWRlIHdvdWxkIGJlIGVub3VnaCB0byBnZXQgeW91IHRvIGNvbW1pdCB0byBzb21ldGhpbmcgYSBsaXR0bGUgbW9yZSBvcmlnaW5hbCAoYW5kIGludGVyZXN0aW5nKS48YnIgLz48YnIgLz5BbmQgSSdtIG5vdCBldmVuIHNwZWFraW5nIG9mIHRoZSBzaG93cyB2YWxpZGl0eSB3aGljaCBmb3IgdGhlIHJlY29yZCBJIGZpbmQgcXVlc3Rpb25hYmxlLiBJdCdzIGp1c3QgaGFyZCB0byBzdXNwZW5kIGRpc2JlbGllZiBmb3IgIkJ1c2h5IEJpbGwiIGVhdGluZyBhIHJhdCB3aGVuIHRoZSBlbnRpcmUgY3JldyBvZiBwcm9kdWNlcnMgYW5kIGNhbWVyYSBwZW9wbGUgYXJlIGhvdXNlZCBpbiBhbiBhaXIgY29uZGl0aW9uZWQgbWFrZS1zaGlmdCBiaW8tZG9tZSBzaXBwaW5nIGZyb3N0eSBtb2NoY2lubm8ncyB3aXRoIG1veHkuPGJyIC8+PGJyIC8+V2hhdCdzIHRoZSBhcHBlYWwgaGVyZT8gSSBkb24ndCBjYXJlIGFib3V0IHRoZXNlIHBlb3BsZSBvciB0aGVpciBtZWFuZGVyaW5nIGxpdmVzLiBJIGp1c3QgZG9uJ3QgZ2V0IGl0LiBCdXQgaWYgeW91IERPIGZpbmQgeW91cnNlbGYgYmVpbmcgY2FwdGl2YXRlZCBieSBoYWlyeSwgdW53YXNoZWQgcGVvcGxlLCBJIHN1Z2dlc3QgeW91IHR1cm4gb2ZmIHlvdXIgVFYgYW5kIGp1c3QgdGFrZSBhIHRyaXAgdG8geW91ciBsb2NhbCBidXMgc3RhdGlvbiB3aGVyZSB5b3UgY2FuIHNlZSBwZW9wbGUgbGlrZSB0aGlzIGluIHRoZWlyIFRSVUUgaGFiaXRhdC4gVGhleSBjYWxsIHRoZW0gSE9NRUxFU1MgUEVPUExFLCBhbmQgZnJlZSBvZiBjaGFyZ2UsIHlvdSBjYW4gc2l0IGJhY2sgYW5kIG1hcnZlbCBpbiB0aGVpciB1bmNhbm55IGFiaWxpdHkgdG8gcmV0cmlldmUgdmFyaW91cyBjaWdhcmV0dGUgZGVicmlzIGZyb20gYSBwbGV0aG9yYSBvZiBnYXJiYWdlIGNhbmlzdGVycywgZXZlbnR1YWxseSBzdHJpa2luZyAicGF5LWRpcnQiIGFuZCBmYXNoaW9uaW5nIGEgaG9tZW1hZGUgRHIuIEZyYW5rZW5zdGVpbi1zdHlsZWQgY2FuY2VyLXN0aWNrLCBhbGwgdGhlIHdoaWxlIGJlZ2dpbmcgcGVvcGxlIGZvciBjaGFuZ2UgZm9yIGZvb2Qgd2hlbiB0aGUgc3Rpbmsgb2YgIkFxdWEgVmVsdmEiIG9uIHRoZWlyIGJyZWF0aCBpcyBlbm91Z2ggdG8gc3VnZ2VzdCBvdGhlcndpc2UuIEFuZCB0aGUgYmVzdCBwYXJ0PyBNdWNoIGxpa2UgU3Vydml2b3IsIGV2ZXJ5IHdlZWsgb25lIG1lbWJlciBvZiB0aGUgdHJpYmUgIkxlYXZlcyIgdGhlICJJc2xhbmQiIHdoZW4gdGhleSBhcmUgdW5jZXJlbW9uaW91c2x5IHNlbnQgcGFja2luZyB0byB0aGUgbG9jYWwgSW5zdGl0dXRpb24gd2hlbiB0aGUgZnJpZ2h0ZW5pbmcgdW5tZWRpY2F0ZWQgc3RhdGUgb2YgZnVsbC1ibG93biBzY2hpem9waHJlbmlhIGtpY2tzIGludG8gZ2VhciEgTm93IFRIQVQnUyBFTlRFUlRBSU5NRU5UIRkAAAAAAAAIQBrMBxLAB1doZW4gaSBnb3QgdGhpcyBtb3ZpZSBmcmVlIGZyb20gbXkgam9iLCBhbG9uZyB3aXRoIHRocmVlIG90aGVyIHNpbWlsYXIgbW92aWVzLi4gSSB3YXRjaGVkIHRoZW4gd2l0aCB2ZXJ5IGxvdyBleHBlY3RhdGlvbnMuIE5vdyB0aGlzIG1vdmllIGlzbid0IGJhZCBwZXIgc2UuIFlvdSBnZXQgd2hhdCB5b3UgcGF5IGZvci4gSXQgaXMgYSB0YWxlIG9mIGxvdmUsIGJldHJheWFsLCBsaWVzLCBzZXgsIHNjYW5kYWwsIGV2ZXJ5dGhpbmcgeW91IHdhbnQgaW4gYSBtb3ZpZS4gRGVmaW5pdGVseSBub3QgYSBIb2xseXdvb2QgYmxvY2tidXN0ZXIsIGJ1dCBmb3IgY2hlYXAgdGhyaWxscyBpdCBpcyBub3QgdGhhdCBiYWQuIEkgd291bGQgcHJvYmFibHkgbmV2ZXIgd2F0Y2ggdGhpcyBtb3ZpZSBhZ2Fpbi4gSW4gYSBudXRzaGVsbCB0aGlzIGlzIHRoZSBraW5kIG9mIG1vdmllIHRoYXQgeW91IHdvdWxkIHNlZSBlaXRoZXIgdmVyeSBsYXRlIGF0IG5pZ2h0IG9uIGEgbG9jYWwgdGVsZXZpc2lvbiBzdGF0aW9uIHRoYXQgaXMganVzdCB3YW50aW5nIHRvIHRha2UgdXAgc29tZSB0aW1lLCBvciB5b3Ugd291bGQgc2VlIGl0IG9uIGEgU3VuZGF5IGFmdGVybm9vbiBvbiBhIGxvY2FsIHRlbGV2aXNpb24gc3RhdGlvbiB0aGF0IGlzIHRyeWluZyB0byB0YWtlIHVwIHNvbWUgdGltZS4gRGVzcGl0ZSB0aGUgYmFkIGFjdGluZywgY2xpY2jDqSBsaW5lcywgYW5kIHN1YiBwYXIgY2FtZXJhIHdvcmsuIEkgZGlkbid0IGhhdmUgdGhlIGRlc2lyZSB0byB0dXJuIG9mZiB0aGUgbW92aWUgYW5kIHByZXRlbmQgbGlrZSBpdCBuZXZlciBwb3BwZWQgaW50byBteSBEVkQgcGxheWVyLiBUaGUgc3RvcnkgaGFzIGJlZW4gZG9uZSBtYW55IHRpbWVzIGluIG1hbnkgbW92aWVzLiBUaGlzIG9uZSBpcyBubyBkaWZmZXJlbnQsIG5vIGJldHRlciwgbm8gd29yc2UuIDxiciAvPjxiciAvPkp1c3QgeW91ciBhdmVyYWdlIG1vdmllLhkAAAAAAAAIQBqmChKaClRoaXMgc2hvdyBjb21lcyB1cCB3aXRoIGludGVyZXN0aW5nIGxvY2F0aW9ucyBhcyBmYXN0IGFzIHRoZSB0cmF2ZWwgY2hhbm5lbC4gSXQgaXMgYmlsbGVkIGFzIHJlYWxpdHkgYnV0IGluIGFjdHVhbGl0eSBpdCBpcyBwdXJlIHByaW1lIHRpbWUgc29hcCBvcGVyYS4gSXQncyB0cmllcyB0byB1c2UgZXhvdGljIGxvY2FsZXMgYXMgYSBmYWNhZGUgdG8gYnJpbmcgcGVvcGxlIGludG8gYSBwaG9ueSBjb250ZXN0ICYgdGhlbiBwcm9jZWVkcyB0byBob29rIHZpZXdlcnMgb24gdGhlIGNvbnRlc3RhbnRzIHNvYXAgb3BlcmEgc3R5bGUuPGJyIC8+PGJyIC8+SXQgYWxzbyBib3Jyb3dzIGZyb20gYW4gZWFybHkgQ0JTIGdhbWUgc2hvdyBwaW9uZWVyLSBCZWF0IFRoZSBDbG9jay0gYnkgaW52ZW50aW5nIHNpdHVhdGlvbnMgZm9yIGl0cyBjb250ZXN0YW50cyB0byB0cnkgJiBvdmVyY29tZS4gVGhlbiBpdCByZXdhcmRzIHRoZSB3aW5uZXIgbW9uZXkuIElmIHRoZXkgY2FuIHNwaWNlIGl0IHVwIHdpdGggYSBsaXR0bGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgY2hhcmFjdGVycywgZXZlbiBiZXR0ZXIuIFdoaWxlIHRoZSBnYW1lIGZvcm1hdCBpcyBpbiBzbG93IG1vdGlvbiB2ZXJzdXMgQmVhdCBUaGUgQ2xvY2stIHRoZSByZWFsIGFjY29tcGxpc2htZW50IG9mIHRoaXMgc2VyaWVzIGlzIHRvIGVzY2FwZSByZWFsaXR5LiA8YnIgLz48YnIgLz5UaGlzIHNob3cgaGFzIGVsZW1lbnRzIG9mIHNldmVyYWwgdHlwZXMgb2Ygc3VjY2Vzc2Z1bCBwYXN0IHByb2dyYW1zLiBSZWFsaXR5IHRlbGV2aXNpb24sIGhhcmRseSwgYnV0IGlmIHlvdXIgaG9va2VkIG9uIHRoZSBjb250ZXN0YW50cywgbG9jYWxlIG9yIGNvbnRlc3QsIHRoaXMgaXMgeW91ciBjdXAgb2YgdGVhLiBJZiB5b3VyIG5vdCwgdGhpcyBlbnRpcmUgc2VyaWVzIGlzIGFzIEkgc2F5LCBkcml2ZWwgZHJpcHBpbmcgd2l0aCBncmF2eS4gSXQgaXMgYW5vdGhlciBzaG93IGhpZGluZyBiZWhpbmQgdGhlIHJlYWxpdHkgbGFiZWwgd2hpY2ggaXMgdGhlIHRyZW5kIGl0IHN0YXJ0ZWQgaW4gMjAwMC48YnIgLz48YnIgLz5JdCBpcyBzbGljayAmIHdlbGwgcHJvZHVjZWQsIHNvIGl0IG1pZ2h0IGxhc3QgYSB3aGlsZSB5ZXQuIEFmdGVyIGFsbCwgc28gZG8gcmUtcnVucyBvZiBHaWxsaWdhbidzIElzbGFuZCwgR3JlZW4gQWNyZXMsIFRoZSBCZXZlcmx5IEhpbGxiaWxsaWVzICYgVGhlIEJyYWR5IEJ1bmNoLiBUaGlzIGp1c3QgZG9lc24ndCBlbXBsb3kgcHJvZmVzc2lvbmFsIGFjdG9ycy4gVGhlIGludGVsbGlnZW5jZSBsZXZlbCBpcyBhYm91dCB0aGUgc2FtZS4ZAAAAAAAACEAa8gQS5gRSb2JlcnQgSm9yZGFuIGlzIGEgdGVsZXZpc2lvbiBzdGFyLiBSb2JlcnQgSm9yZGFuIGxpa2VzIHRoaW5ncyBvcmRlcmx5LCBvbiB0aW1lIGFuZCBwcm9wZXJseSBleGVjdXRlZC4gSW4gaGlzIHdvcmxkIGNoaWxkcmVuIGFyZSB0byBiZSBzZWVuLCBub3QgaGVhcmQuIFNvIHdoeSB3b3VsZCBNci4gSm9yZGFuIHdhbnQgdG8gYmVjb21lIHRoZSBtYXN0ZXIgb2YgYSByYW1idW5jdGlvdXMgYmFuZCBvZiBCb3kgU2NvdXRzPyBSYXRpbmdzLiBIaXMgc3RhZmYgZmlndXJlcyB0aGF0IGlmIGxlYXJucyBob3cgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgeW91dGgsIHRoZXkgd2lsbCBiZSBtb3JlIGluY2xpbmVkIHRvIHdhdGNoIGhpcyBzaG93LiBPZiBjb3Vyc2Ugd2F0Y2hpbmcgSm9yZGFuIGNvcGUgY29tcHJpc2VzIG1vc3Qgb2YgdGhlIGZ1bi48YnIgLz48YnIgLz5MaWtlIE1yLiBCZWx2ZWRlcmUgYW5kIE1yLiBCZWx2ZWRlcmUgR29lcyB0byBDb2xsZWdlIHRoaXMgb25lIGlzIHN1cmUgdG8gcGxlYXNlLjxiciAvPjxiciAvPkFOWU9ORSBJTlRFUkVTVEVEIElOIE9CVEFJTklORyBBIENPUFkgT0YgVEhJUyBGSUxNIFBMRUFTRSBXUklURSBUTyBNRSBBVDogSUFNQVNFQUwyQFlBSE9PLkNPTRkAAAAAAAAIQBqQBRKEBU5pY2tlbG9kZW9uIGhhcyBnb25lIGRvd24gdGhlIHRvaWxldC4gVGhleSBoYXZlIGtpZHMgc2F5aW5nIHRoaW5ncyBsaWtlICJPaCBteSBHb2QhIiBhbmQgIldlJ3JlIHNjcmV3ZWQiPGJyIC8+PGJyIC8+VGhpcyBzaG93IHByb21vdGVzIGhhdGUgZm9yIHBlb3BsZSB3aG8gYXJlbid0IGdvb2QgbG9va2luZywgb3IgYXJlbid0IGluIHRoZSBpbiBjcm93ZC4gSXQgc2F5IHRoYXQgc2V4dWFsIHByb21pc2N1aXR5IGlzIGFscmlnaHQsIGJ5IGhhdmluZyBnaXJscyBzbG9iYmVyaW5nIG92ZXIgc2hpcnRsZXNzIGJveXMuIE5vdCB0byBtZW50aW9uIHRoZSBvdmVyd2VpZ2h0IGJveSB3aG8gdGFrZXMgb2ZmIGhpcyBzaGlydC4gVGhlIG1haW4gY2hhcmFjdGVycyBiYXNpY2FsbHkgc2h1biBhbnlvbmUgb3V0IG9mIHRoZSBvcmRpbmFyeS4gQ2FybHkncyBmcmllbmQgU2FtLCB3aG8gbWF5IGJlIGEgbGVzYmlhbiwgYmVhdHMgdGhlIHNub3Qgb3V0IG9mIGFueWJvZHkgdGhhdCBjcm9zc2VzIGhlciBwYXRoLCB3aGljaCBzYXlzIGl0J3MgYWxyaWdodCB0byBiZSBhIGIqKmNoLiBUaGlzIHNob3cgaGFzIHNvIG11Y2ggbmVnYXRpdml0eSBpbiBpdCB0aGF0IG5vYm9keSBzaG91bGQgd2F0Y2ggaXQhIEkgZ2l2ZSBpdCBhIDAgb3V0IG9mIDEwISEhGQAAAAAAAAhAGqsIEp8ISSBzZWUgdGhhdCBDLiBUaG9tYXMgSG93ZWxsIGhhcyBhcHBlYXJlZCBpbiBtYW55IG1vdmllcyBzaW5jZSBoaXMgaGV5ZGF5IGluIHRoZSA4MHMgYXMgYW4gYWNjb21wbGlzaGVkIHlvdW5nIGFjdG9yLjxiciAvPjxiciAvPkkgYm91Z2h0IHRoaXMgRFZEIGJlY2F1c2UgaXQgd2FzIGNoZWFwIGFuZCBpbiBwYXJ0IGZvciB0aGUgaW50ZXJuZXQtcmVsYXRlZCBwbG90IGFuZCB0byBzZWUgaG93IG11Y2ggb2xkZXIgQy4gVGhvbWFzIEhvd2VsbCBpczsgSSBkbyBub3QgcmVjYWxsIHNlZWluZyBoaW0gaW4gYW55IG1vdmllcyBzaW5jZSB0aGUgMTk4MHMuPGJyIC8+PGJyIC8+SW4ganVzdCBhIGZldyB3b3Jkczogd2hhdCBhIHZlcnkgYmlnIGRpc2FwcG9pbnRtZW50LiBJIGdpdmUgc29tZSBsb3cgYnVkZ2V0IG1vdmllcyBhIGNoYW5jZSwgYnV0IHRoaXMgb25lIHN0YXJ0ZWQgb3V0IGxhbWUuIFdpdGhpbiB0aGUgZmlyc3QgMTUgbWludXRlcyBvZiB0aGUgbW92aWUsIHRoaXMgZWx1c2l2ZSB3b21hbiBpcyBjaGF0dGluZyB3aXRoIGFuIEFzaWFuIGd1eSBpbiBhIGNoYXRyb29tLiBUaGV5IGJhc2ljYWxseSBzdGltdWxhdGUgdGhlbXNlbHZlcyB0byB0aGVpciBvd24gY2hhdCwgc2hlIHRoZW4gaW5zaXN0cyBvbiBtZWV0aW5nIHRoZSBwYXJ0aWNpcGFudCBpbiBwZXJzb24uIFNoZSBtZWV0cyBoaW0sIGhhcyBzZXgsIHRpZXMgaGltIHVwIGFuZCB0aGVuIG11cmRlcnMgaGltIGluIGNvbGQgYmxvb2QuIFRoZSBwbG90IHRoZW4gZGV0ZXJpb3JhdGVzIGZ1cnRoZXIuPGJyIC8+PGJyIC8+VGhlIHBsb3QgaXMgdGhpbiBhbmQgZmxpbXN5IGFuZCB0aGUgYWN0aW5nIGlzIHZlcnkgc3RpZmYuIERvIG5vdCBib3RoZXIgcmVudGluZyBpdCBtdWNoIGxlc3MgcHVyY2hhc2luZyBpdCwgZXZlbiBpZiBpdCBpcyBpbiB0aGUgJDEgRFZEIGJpbi4gSSBwbGFuIHRvIHRha2UgbXkgY29weSBvZiB0aGUgRFZEIHRvIEdvb2R3aWxsLiBJIGFtIHRydWx5IGFtYXplZCB0aGF0IGFueSBvZiB0aGUgcHJpb3IgcmV2aWV3ZXJzIGhlcmUgZ2F2ZSB0aGlzIG1vdmllIGEgYmFkIHJhdGluZy4ZAAAAAAAACEAapAUSmAVIb3cgaGFzIHRoaXMgcGllY2Ugb2YgY3JhcCBzdGF5ZWQgb24gVFYgdGhpcyBsb25nPyBJdCdzIHRlcnJpYmxlLiBJdCBtYWtlcyBtZSB3YW50IHRvIHNob290IHNvbWVvbmUuIEl0J3Mgc28gZmFrZSB0aGF0IGl0IGlzIGFjdHVhbGx5IHdvcnNlIHRoYW4gYSAxOTQwcyBzY2ktZmkgbW92aWUuIEknZCByYXRoZXIgaGF2ZSBhIHN0cm9rZSB0aGFuIHdhdGNoIHRoaXMgbm9uc2Vuc2UuIEkgcmVtZW1iZXIgd2F0Y2hpbmcgaXQgd2hlbiBpdCBmaXJzdCBjYW1lIG91dC4gSSB0aG91Z2h0LCBoZXkgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZywgdGhlbiBJIGZvdW5kIG91dCBob3cgYWJzb2x1dGVseSwgaW5zYW5lbHksIHJpZGljdWxvdXNseSBzdHVwaWQgaXQgcmVhbGx5IHdhcy4gSXQgd2FzIHNvIGJhZCB0aGF0IEkgYWN0dWFsbHkgdG9vayBvdXQgbXkgcG9ja2V0IGtuaWZlIGFuZCBzdHVjayBteSBoYW5kIHRvIHRoZSB0YWJsZS48YnIgLz48YnIgLz5QbGVhc2UgcGVvcGxlLCBzdG9wIHdhdGNoaW5nIHRoaXMgYW5kIGFsbCBvdGhlciByZWFsaXR5IHNob3dzLCB0aGV5J3JlIHRoZSB0cmFzaCB0aGF0IGlzIGphbW1pbmcgdGhlIG5ldHdvcmtzIGFuZCBjYW5jZWxpbmcgcXVhbGl0eSBwcm9ncmFtbWluZyB0aGF0IHJlcXVpcmVzIHNvbWUgdGhvdWdodCB0byBjcmVhdGUuGQAAAAAAAAhAGq0FEqEFd2hlbiBJIGZpcnN0IGhlYXJkIGFib3V0IHRoaXMgbW92aWUsIEkgbm90aWNlZCBpdCB3YXMgb25lIG9mIHRoZSBtb3N0IGNvbnRyb3ZlcnNpYWwgZmlsbXMgb2YgdGhlIDE5NzBzLiBJIG5vdGljZWQgdGhlIG11c2ljIHdhcyBieSBFbHRvbiBKb2huLCBzbyBJIGZpZ3VyZWQgSSBoYWQgbm90aGluZyB0byBsb29zZSwgc28gSSBnb3QgaXQuIFdoYXQgYSBTdXJwcmlzZSEhISBUaGUgbW92aWUgd2FzIGF3ZXNvbWUuIEl0IHdhcyB0cnVlIGxvdmUgaXMgYWxsIGFib3V0LiBUaGUgY2hhcmFjdGVycyAoUGF1bCBhbmQgTWljaGVsbGUpIGhhZCBubyBsdXh1cmllcywgbm8gbW9uZXksIGFuZCBzb21ldGltZXMgbm8gZm9vZCwgeWV0IHRoZXkgd2VyZSBzdGlsbCBoYXBweS4gSSByZWNvbW1lbmRlZCB0aGlzIGZpbG0gdG8gYWxsIG15IGZyaWVuZHMsIGJ1dCB0aGV5IGFsbCBjcml0aXplZCBteSB0YXN0ZXMsIGFuZCBldmVuIGNhbGxlZCBtZSBuYW1lcywgYmVjdWFzZSB0aGUgbW92aWUgZmVhdHVyZWQgdHdvIG1pbm9ycyBuYWtlZC4gSSB0aGluayB0aGF0IG9ubHkgbWFkZSB0aGUgbW92aWUgbW9yZSByZWFsaXN0aWMuIFRoZSBjaW5lbWF0b2dyYXBoeSB3YXMgZ3JlYXQgYW5kIGl0IG9ubHkgY29tZSB0byBzaG93IHRoZSBncmVhdCBhYmlsaXRpZXMgb2YgZGlyZWN0b3IgTGV3aXMgR2lsYmVydBkAAAAAAAAAQBqQCxKEC3dlbGwsIHRoZSB3cml0aW5nIHdhcyB2ZXJ5IHNsb3BweSwgdGhlIGRpcmVjdGluZyB3YXMgc2xvcHBpZXIsIGFuZCB0aGUgZWRpdGluZyBtYWRlIGl0IHdvcnNlIChhdCBsZWFzdCBpIGhvcGUgaXQgd2FzIHRoZSBlZGl0aW5nKS4gdGhlIGFjdGluZyB3YXNuJ3QgYmFkLCBidXQgaXQgd2Fzbid0IHRoYXQgZ29vZCBlaXRoZXIuIHByZXR0eSBtdWNoIG5vbmUgb2YgdGhlIGNoYXJhY3RlcnMgd2VyZSBsaWthYmxlLiBhdCBsZWFzdCA0NSBtaW51dGVzIG9mIHRoYXQgbW92aWUgd2FzIHdhc3RlZCB0aW1lIGFuZCB0aGUgb3RoZXIgaG91ciBvciBzbyB3YXMgbm90IHVzZWQgYW55d2hlcmUgbmVhciBpdHMgZnVsbCBwb3RlbnRpYWwuIGl0IHdhcyBhIGdyZWF0IGlkZWEsIGJ1dCB5ZXQgYW5vdGhlciB3YXN0ZWQgZ29vZCBpZGVhIGdvZXMgYnkuIGl0IGNvdWxkIGhhdmUgZW5kZWQgMyBkaWZmZXJlbnQgcGxhY2VzIGJ1dCBpdCBqdXN0IGtlcHQgZ29pbmcgb24gdG8gYSBtb3N0bHkgcHJlZGljdGFibGUgaG9sbHl3b29kIGVuZGluZy4gYW5kIHdoYXQgd2Fzbid0IHByZWRpY3RhYmxlIHdhcyBkb25lIHNvIGJhZGx5IHRoYXQgaXQgZGlkbid0IG1hdHRlci4gdGhlIGVuZGluZyB3YXMgbm90IHdvcnRoIHdhdGNoaW5nIGF0IGFsbC4gc2FuZHJhIGJ1bGxvY2sgd2FzIG91dCBvZiBoZXIgZWxlbWVudCBhbmQgc2hvdWxkIHN0YXkgYXdheSBmcm9tIHRoZXNlIHR5cGVzIG9mIG1vdmllcy4gdGhlIG1vdmllIGxvb2tlZCBydXNoZWQgYWxzby4gdGhlIG1vdmllIGp1c3Qgd2Fzbid0IHJlYWxseSB3b3J0aCBzZWVpbmcsIGFuZCBoYWQgaSBwYWlkIGZvciBpdCBpIHdvdWxkIGhhdmUgYmVlbiB2ZXJ5IG1hZC4gbWF5YmUgaSB3YXMgbW9yZSBkaXNhcHBvaW50ZWQgYmVjYXVzZSBpIGV4cGVjdGVkIGEgcmVhbGx5IGdvb2QgbW92aWUgYW5kIGdvdCBhIGJhZCBvbmUuIHRoZSBtb3ZpZSBvdmVyIGFsbCB3YXMgbm90IGhvcnJpZmlibHkgYmFkLCBidXQgaSB3b3VsZG4ndCByZWNjb21lbmQgaXQuIGkgZ2F2ZSBpdCAyIG91dCBvZiAxMCBiL2MgaSBsaWtlZCB0aGUgaWRlYSBzbyBtdWNoIGFuZCBpIGRpZCBsaWtlIG9uZSBjaGFyYWN0ZXIgKGp1c3RpbiBpIGJlbGlldmUsIHRoZSBzdXBlciBzbWFydCBvbmUpLiBhbmQgaXQgYWxzbyBoYWQgc29tZSB2ZXJ5IGNoZWFwIHdheXMgdG8gY292ZXIgcGxvdCBob2xlcy4gaXQgd2FzIGxpa2UgdHJ5aW5nIHRvIGNvdmVyIGEgdm9sY2FubyB3aXRoIGNoZWFwIG1hc2tpbmcgdGFwZSwgaXQgd2FzIG5vdCBwcmV0dHkuIGFueXdheSwgaWYgeW91IHNlZSBpdCwgd2FpdCBmb3IgdGhlICQxLjUwIHRoZWF0ZXIgb3IgdmlkZW8sIHVubGVzcyB5b3UgbGlrZSBwcmV0dHkgbXVjaCBldmVyeSBtb3ZpZSB5b3Ugc2VlLCB0aGVuIGkgZ3Vlc3MgeW91J2xsIGxpa2UgdGhpcyBvbmUuGQAAAAAAAABAGoICEvYBdGhpcyBtb3ZpZSBzdWNrcy4gZGlkIGFueW9uZSBub3RpY2UgdGhhdCB0aGUgZW50aXJlIG1vdmllIHdhcyBzaG90IGluIGxpa2UgMiByb29tcy4gdGhlcmUgYXJlIE5FVkVSIGFueSBvdXRzaWRlIHNob3RzIGFuZCBpZiB0aGVyZSBhcmUgaXRzIG9idmlvdXNseSBmaWxtIHRha2VuIGZyb20gc29tZXdoZXJlIGVsc2UuIHRoaXMgbW92aWUgYmxvd3MgaGFyZCwgcGFpbmZ1bCB0byBzaXQgdGhyb3VnaCB0b28uIHN0YXkgZmFyIGF3YXkuGQAAAAAAAABAGqYFEpoFdGhpcyBtb3ZpZSBiZWdpbnMgd2l0aCBhbiBvcmRpbmFyeSBmdW5lcmFsLi4uIGFuZCBpdCBpbnNpc3RzIHNvIGhhcmQgb24gdGhpcyBvcmRpbmFyeSBmdW5lcmFsIGZlZWwgdGhhdCBpIGxvc3QgaW50ZXJlc3Qgd2l0aGluIDUgbWludXRlcyBvZiB3YXRjaGluZywgYW5kIHN0YXJ0ZWQgc2tpcHBpbmcgc2NlbmVzLiBpdCBzZWVtcyB0byBtZSB3aG9tZXZlciBtYWRlIHRoaXMgbW92aWUgaXMgYWZmbGljdGVkIHRvIHRoZSBleHRlbnQgb2YgYmVjb21pbmcgdHJhcHBlZCBpbiBhIHBlcm1hbmVudCBtb3JiaWQgdHJhbmNlLCB1bmFibGUgdG8gY29udGVtcGxhdGUgYW55dGhpbmcgZWxzZSBidXQgZGVhdGggYW5kIGRlc3RydWN0aW9uLiB3ZWxsLCBpIGFpbid0IG9uZSBvZiB0aGUgZGFyayBraWRzIGZyb20gU291dGhwYXJrLCBpIHdhbnQgYSBtb3ZpZSB0aGF0IHdpdGhpbiAxMCBtaW51dGVzIGdldHMgbWUgd2VsbCBpbnRvIGFuIGludGVyZXN0aW5nIHN0b3J5LCBpIHdvbid0IHNpdCBhbmQgd2F0Y2ggMTAgbWludXRlcyBvZiBub3RoaW5nIGJ1dCBwcmVwYXJhdGlvbnMgZm9yIGEgZnVuZXJhbC4uIG15IGdyYW5kbWEgb24gaGVyIGxhc3QgeWVhcnMgd2FzIGZhc2NpbmF0ZWQgYnkgZnVuZXJhbHMsIHBlcmhhcHMgc2hlIG1pZ2h0IGhhdmUgZW5qb3llZCB0aGlzICJtb3ZpZSIuGQAAAAAAAABAGogHEvwGdGhpcyBpcyB0aGUgd29yc3QgZmlsbSBJJ3ZlIHNlZW4gaW4gYSBsb25nIGxvbmcgdGltZSwgbmV2ZXIgbWluZCB0aGUgZmFjdCB0aGF0IHNvIG1hbnkgdXNlZnVsIHRoaW5ncyBrZWVwIGFwcGVhcmluZyBvbiB0aGlzIGlzbGFuZCAiaG93IGNvbnZlbmllbnQhISEhIiwgdGhlIGFjdGluZyBpcyBiZXlvbmQgcG9vciBmcm9tIHRoZSBvdXRzZXQsIGl0cyBsaWtlIG9uZSBvZiB0aG9zZSByZWFsbHkgYmFkbHkgc2NyaXB0ZWQgc29mdCBwb3JuIGZpbG1zIG9uIGNoYW5uZWwgNSwgYSBjb21wbGV0ZSB3YXN0ZSBvZiB0aW1lLCBhbmQgaSBjYW50IHJlbWVtYmVyIHRoZSBsZWFkIGFjdG9ycyBuYW1lIGJ1dCBpIGNhbnQgYmVsaWV2ZSBoZSBzdGlsbCBnZXRzIHdvcmshISEgSSd2ZSBuZXZlciBzZWVuIGhpbSBhY3QgIkkndmUgc2VlbiBoaW0gaW4gbG90cyBvZiBmaWxtcy4uLiBCdXQgSSd2ZSBuZXZlciBzZWVuIGhpbSBhY3QuIGhlcmUgYXJlIGEgZmV3IG9mIHRoZSBibGFyaW5nbHkgb2J2aW91cyBlcnJvcnMsIGFwcGFyZW50bHkgcGV0cm9sIGxpZ2h0ZXJzIHN0aWxsIHdvcmsgZXZlbiB3aGVuIHRoZXkndmUgYmVlbiBzb2FrZWQgaW4gc2VhIHdhdGVyISEhIGFsc28gYWNjb3JkaW5nIHRvIHRoaXMgZmlsbSB5b3UgY2FuIHdhbGsgaW50byB0aGUgc2VhIG5ha2VkIGJ1dCBjb21lIG91dCB3ZWFyaW5nIGJpa2luaSBib3R0b21zIChJJ20gZ3Vlc3NpbmcgdGhlIGNhbWVyYSBtYW4gYW5kIGVkaXRvciB3ZXJlIHN0dWRlbnRzKXRoZXJlIGFyZSBwbGVudHkgbW9yZSBlcnJvcnMgYnV0IEknbSByYW50aW5nIG5vdywgYmVzaWRlcyBpdHMgbm8gc28gbXVjaCB0aGUgZXJyb3JzIGFzIHRoZSBjYXN0IHRoZSBzY3JpcHQgYW5kIHRoZSB3aG9sZSBmaWxtIGF2b2lkIGF0IGFsbCBjb3N0cxkAAAAAAAAAQBrQBxLEB2l0J3MgYW1hemluZyB0aGF0IHNvIG1hbnkgcGVvcGxlIHRoYXQgaSBrbm93IGhhdmVuJ3Qgc2VlbiB0aGlzIGxpdHRsZSBnZW0uIGV2ZXJ5Ym9keSBpIGhhdmUgdHVybmVkIG9uIHRvIGl0IGhhdmUgY29tZSBiYWNrIHdpdGggdGhlIHNhbWUgcmVhY3Rpb246IFdIQVQgQSBHUkVBVCBNT1ZJRSEhPGJyIC8+PGJyIC8+aSd2ZSBuZXZlciBtdWNoIGNhcmVkIGZvciBCcmFkIFBpdHQgKHRob3VnaCBoaXMgdHVybnMgaW4gMTIgbW9ua2V5cyBhbmQgRmlnaHQgQ2x1YiBzaG93IGltcHJvdmVtZW50KSBidXQgaGlzIHBlcmZvcm1hbmNlIGluIHRoaXMgZmlsbSBhcyBhIHBzeWNobyBpcyB1bm5lcnZpbmcsIGRhcmsgYW5kIHJpZ2h0IG9uIHRhcmdldC48YnIgLz48YnIgLz5ldmVyeW9uZSBlbHNlIGluIHRoZSBmaWxtIGdpdmVzIGV4Y2VsbGVudCBwZXJmb3JtYW5jZXMgYW5kIHRoZSBtb3ZpZSdzIHNsb3cgYW5kIGRlbGliZXJhdGUgcGFjaW5nIGdyZWF0bHkgZW5oYW5jZSB0aGUgcHJvY2VlZGluZ3MuIHRoZSBzZW5zZSBvZiBkcmVhZCBmb3IgdGhlIGNoYXJhY3RlcnMga2VlcHMgaW5jcmVhc2luZyBhcyB0aGV5IGNvbWUgdG8gcmVhbGl6ZSB3aGF0IGhhcyBiZWVuIHJlYWxseSBoYXBwZW5pbmcuPGJyIC8+PGJyIC8+dGhlIG9ubHkgdGhpbmcgdGhhdCBrZWVwcyB0aGlzIGZyb20gYSAxMCBpbiBteSBib29rLCBpcyB0aGF0IGNvbXBhcmVkIHRvIHdoYXQgY2FtZSBiZWZvcmUgaXQsIHRoZSBlbmRpbmcgaXMgYSBiaXQgdG9vIGxvbmcgYW5kIG92ZXJibG93bi4gYnV0IHRoYXQncyB0aGUgb25seSBmbGF3IGkgY291bGQgZmluZCBpbiB0aGlzIGN1bHQgY2xhc3NpYy48YnIgLz48YnIgLz5pZiB5b3UgY2hlY2sgdGhpcyBmaWxtIG91dCwgdHJ5IHRvIGdldCB0aGUgbGV0dGVyYm94ZWQgdW5yYXRlZCBkaXJlY3RvcidzIGN1dCBmb3IgdGhlIGJlc3Qgdmlld2luZyBvcHRpb24uPGJyIC8+PGJyIC8+cmF0aW5nOjkZAAAAAAAAAEAatggSqghpbiB0aGlzIG1vdmllLCBqb2UgcGVzY2kgc2xhbXMgZHVua3MgYSBiYXNrZXRiYWxsLiBqb2UgcGVzY2kuLi48YnIgLz48YnIgLz5hbmQgYmVpbmcgY29uc2lzdGVudCwgdGhlIHJlc3Qgb2YgdGhlIHNjcmlwdCBpcyBlcXVhbGx5IG5vdCBiZWxpZXZhYmxlLjxiciAvPjxiciAvPnBlc2NpIGlzIGEgZnVubnkgZ3V5LCB3aGljaCBzYXZlcyB0aGlzIGZpbG0gZnJvbSBzaW5raW5nIGludCB0aGUgYWJzb2x1dGUgYmFjayBvZiB0aGUgY2VsbGFyLCBidXQgdGhlIG90aGVyIHJvbGVzIHdlcmUgcHJldHR5IGJhZC4gdGhlIGZhdGhlciB3YXMgYSBncmVlZHkgYnVzaW5lc3NtYW4gd2hvIHZhbHVlZCBtb25leSBtb3JlIHRoYW4gcGVvcGxlLCB3aGljaCB3YXNuJ3QgZXZlbiB3ZWxsLXBsYXllZC4gaW5zdGVhZCBvZiB0aGUgbWFuIGJlaW5nIGFuIGFyY2hldHlwYWwgdmlsbGFpbiwgaGUgc2VlbWVkIG1vcmUgbGlrZSBhbiBhbW9yYWwgYW5kcm9pZCBwcm9ncmFtbWVkIHRvIG1ha2UgbW9uZXkgYXQgYWxsIGNvc3RzLiB0aGVuIHRoZXJlJ3MgdGhlIHRva2VuIHBpZWNlIHRoYXQgaXMgYXNzaWduZWQgdG8gcGVzY2kgYXMgYSBnaXJsZnJpZW5kIG9yIHNvbWV0aGluZy4uLmkgZG9uJ3QgZXZlbiByZW1lbWJlci4uLnNoZSB3YXMgdGhhdCBmb3JnZXR0YWJsZS48YnIgLz48YnIgLz5hbnlvbmUgd2hvIHJhdGVzIHRoaXMgbW92aWUgYWJvdmUgYSA1IG9yIDYgaXMgYSBwYWlkIG1lbWJlciBvZiBzb21lIHNvcnQgb2YgZmlsbSBzdHVkaW8gdHJ5aW5nIHRvIHVwIHRoZSByZXB1dGF0aW9uIG9mIHRoaXMgc3Vua2VuIGZpbG0sIG9yIGF0IGxlYXN0IG9uZSBvZiB0aG9zZSBtaWxsaW9ucyBvZiBtZWRpYSBtaW5pb25zIHdobyBjYW4ndCBjcml0aXF1ZSBlZmZpY2llbnRseSAoeW91IGtub3csIHRoZSBwZW9wbGUgd2hvIGZlZWwgYmFkIGlmIHRoZXkgZ2l2ZSBhbnl0aGluZyBhIG1hcmsgYmVsb3cgNikuPGJyIC8+PGJyIC8+c3RheSBhd2F5Li4uZmFyIGF3YXkuIGFuZCBzaGFtZSBvbiBjb21lZHkgY2VudHJhbCwgd2hlcmUgaSBzYXcgdGhpcyBmaWxtLiB0aGV5IHVzdWFsbHkgcGljayBiZXR0ZXIuGQAAAAAAAABAGuIKEtYKWW91IHdvdWxkIHByb2JhYmx5IGdldCBzb21ldGhpbmcgbGlrZSB0aGlzLiBJJ20gdHJhbnNsYXRpbmcgbW92aWVzIGZvciBhIGxpdmluZyBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgbW92aWUgaW4gbXkgNS15ZWFyIHdvcmtpbmcgZXhwZXJpZW5jZSB0aGF0IEkgZm91bmQgb2ZmZW5zaXZlIHRvIG15IGludGVsbGlnZW5jZS4gT2YgY291cnNlLCB0aGVyZSBhcmUgc3R1cGlkIEhvbGx5d29vZCBtb3ZpZXMgYWJvdXQgZHJ1bmtlbiB0ZWVuYWdlcnMgb24gYSBzcHJpbmcgYnJlYWssIGJ1dCB0aG9zZSBtb3ZpZXMgZG9uJ3QgZXZlbiBjbGFpbSB0byBiZSBzZXJpb3VzIHdvcmtzIG9mIGFydC4gQnV0IHdoZW4gc29tZW9uZSBzdHJpdmVzIGZvciBncmVhdG5lc3MgYW5kIHBvZXRyeSwgYnV0IGRlbGl2ZXJzIGEgbXVkZGxlZCAoYW5kIG9mdGVuIHJpZGljdWxvdXMpIHN0b3J5LCBhIGJ1bmNoIG9mIGRpc3BhcmF0ZSBzY2VuZXMsIHByZXRlbnRpb3VzIGRpYWxvZ3VlLi4uIFRoZW4geW91IGdldCB0aGUgd29yc3Qga2luZCBvZiBhIG1vdmllIHRoYXQgc29tZSBvdGhlciByZXZpZXdlciB2ZXJ5IGFjY3VyYXRlbHkgZGVmaW5lZCBhcyAicHJldGVudGlvdXMgY3JhcCIuIFRvIHRob3NlIHdobyBmaW5kIHRoaXMgbW92aWUgaW50ZWxsaWdlbnQgb3IgZXZlbiBtYXN0ZXJmdWwsIEkgY2FuIG9ubHkgc2F5IC0gaXQncyB5b3VyIGludGVsbGlnZW5jZSBhbmQgeW91ciBpbWFnaW5hdGlvbiB5b3Ugb2J2aW91c2x5IHVzZWQgdG8gdHJ5IGFuZCBtYWtlIHNvbWUgc2Vuc2Ugb2YgdGhpcyBwaXRpZnVsIGF0dGVtcHQgKGl0J3MgaW4gb3VyIGh1bWFuIG5hdHVyZSB0byB0cnkgYW5kIG1ha2Ugc2Vuc2Ugb2YgdGhpbmdzKSAuPGJyIC8+PGJyIC8+T25lIG1vcmUgdGhpbmc6IEkgY2FuIHRvbGVyYXRlIHBvbGl0aWNhbCBpbmNvcnJlY3RuZXNzIHZlcnkgd2VsbCwgSSdtIGFsbCBmb3IgYXJ0aXN0aWMgZnJlZWRvbSBhbmQgc3VzcGVuc2lvbiBvZiBkaXNiZWxpZWYsIGJ1dCB0aGUgU2xhdmljIGZlbWFsZSBjaGFyYWN0ZXIgd2FzIGp1c3QgdG9vIG11Y2guIEkgd2lzaCBzb21lb25lIHRvbGQgdGhlIGRpcmVjdG9yIHRoYXQgaXQncyBraW5kIG9mIHJpZGljdWxvdXMgKGV2ZW4gaW4gYW4gdW5yZWFsaXN0aWMgYXJ0IG1vdmllKSB0byBwb3J0cmF5IGEgU2xhdmljIHdvbWFuIGFzIGEgaGFsZi1hcnRpY3VsYXRlIGRpc2hldmVsbGVkIGNyZWF0dXJlIGNvbm5lY3RlZCB0byB0aGUgZm9yY2VzIG9mIG5hdHVyZSwgcHJvYmFibHkgZHVlIHRvIHRoZSBmYWN0IHRoYXQgc2hlIGhhZCBzcGVudCBoZXIgZW50aXJlIGNoaWxkaG9vZCBsb29raW5nIGF0IHRoZSBzdGFycyBhbmQgbWlsa2luZyBjb3dzIG9uIGEgdGhyZWUtbGVnZ2VkIHN0b29sLhkAAAAAAAAAQBrLGBK/GFlvdSBrbm93IGFsbCB0aG9zZSBsZXR0ZXJzIHRvICJGYXRoZXIgQ2hyaXN0bWFzIiBhbmQgIkplc3VzIiB0aGF0IGFyZSBzZW50IGV2ZXJ5IHllYXI/IFdlbGwsIGl0IHR1cm5zIG91dCB0aGF0IHRoZXkgYXJlIG5vdCBhY3R1YWxseSBkZWxpdmVyZWQgYnV0IGRyb3BwZWQgb2ZmIGluIGEgaGFsZi1mb3Jnb3R0ZW4gY29ybmVyIG9mIHRoZSBwb3N0IG9mZmljZSB0byByb3QgdW5sZXNzIHNvbWUgYnJpZ2h0IHNwYXJrIGZpZ3VyZXMgb3V0IGEgd2F5IG9mIHBvc3RpbmcgdGhlbS4gQXMgYml6YXJyZSBzZXR0aW5ncyBnbywgaXQncyBhIHdpbm5lciBhbmQgb25lIHdoaWNoIHBlcmZlY3RseSBmaXRzIHRoZSBzdHJhbmdlIG1vdmllIHRoYXQgaXMgIkRlYWQgTGV0dGVyIE9mZmljZSIuIEhhdmluZyBzYWlkIHRoYXQsIHRoaXMgaXMgb2J2aW91c2x5IGFuIEF1c3RyYWxpYW4gZmlsbSBhcyBvcHBvc2VkIHRvIGEgQnJpdGlzaCBvbmUuIElmIGl0IHdhcyBSb3lhbCBNYWlsLCBtb3N0IGxldHRlcnMgZ2V0IHRoaXMgc29ydCBvZiB0cmVhdG1lbnQgYW55d2F5LiBJIGhhdmVuJ3QgYmVlbiBpbiB0aGlzIGZsYXQgZm9yIHR3byB5ZWFycyBhbmQgd2UncmUgc3RpbGwgZ2V0dGluZyBsZXR0ZXJzIGZvciBhIE1yIFdhbmcsIHNvbWUgZmVtYWxlIHByaWVzdCBvZiB0aGUgQ2h1cmNoIG9mIExhdHRlciBEYXkgSSd2ZS1OZXZlci1IZWFyZC1PZi1Zb3UgYW5kIHZhcmlvdXMgY2F0YWxvZ3VlcyBmb3IgaW5kdXN0cmlhbCBlcXVpcG1lbnQgYWRkcmVzc2VkIHRvIGEgcGx1bWJpbmcgY29tcGFueS48YnIgLz48YnIgLz4iRGVhZCBMZXR0ZXIgT2ZmaWNlIiAodGhlIG5hbWUgZ2l2ZW4gdG8gdGhlIHBsYWNlIHdoZXJlIHVuZGVsaXZlcmFibGUgbWFpbCBlbmRzIHVwKSBmb2xsb3dzIHRoZSBzdG9yeSBvZiBBbGljZSAoTWlyYW5kYSBPdHRvKSB3aG8gZ3Jvd3MgdXAgaW4gYSBzZXJpb3VzbHkgZGl2aWRlZCBob21lLiBXcml0aW5nIHRvIGhlciBhYnNlbnQgZmF0aGVyLCBzaGUgb25seSBsZWFybnMgaW4gYWR1bHRob29kIHRoYXQgaGVyIGxldHRlcnMgaGF2ZW4ndCBiZWVuIGRlbGl2ZXJlZCBmb3Igb25lIHJlYXNvbiBvciBhbm90aGVyLiBTbywgbG9naWNhbGx5LCBzaGUgZ2V0cyBhIGpvYiBhdCB0aGUgRC5MLk8uIGFuZCBmaW5kcyBoZXJzZWxmIHdvcmtpbmcgYWxvbmdzaWRlIG90aGVyIHNvY2lhbCByZWplY3RzIGluY2x1ZGluZyB0aGUgYnJvb2RpbmcgQ2hpbGVhbiBpbW1pZ3JhbnQgRnJhbmsgTG9wZXogKEdlb3JnZSBEZWwgSG95bykuIFNsb3dseSwgc2hlIGZpbmRzIGhlcnNlbGYgZHJhd24gdG8gaGltIGJ1dCBjYW4gc2hlIGZpbmQgb3V0IHdoZXJlIGhlciBkYWQgaXMgd2l0aG91dCBicmluZ2luZyB0aGUgc2VsZi1jb250YWluZWQgd29ybGQgb2YgdGhlIERlYWQgTGV0dGVycyBPZmZpY2UgdG8gaXRzIGtuZWVzPzxiciAvPjxiciAvPk5vdGhpbmcgYWdhaW5zdCB0aGlzIGZpbG0gYnV0IEkgd2FzIHJlbWluZGVkIG9mIHRoZSBnb2QtYXdmdWwgSGVhdGhlciBHcmFoYW0gZmlsbSAiQ29tbWl0dGVkIiB3aGlsZSB3YXRjaGluZyB0aGlzLiBIb3dldmVyLCB0aGlzIGlzIHNvIG11Y2ggYmV0dGVyIHRoYW4gdGhhdCBwaWxlIG9mIGhvcnNlIGNyYXAgYnV0IHRoZW4gYWdhaW4sIHRoYXQgYWluJ3QgZGlmZmljdWx0LiBGb3IgYSBzdGFydCwgdGhpcyBmaWxtIGlzIG11Y2ggbW9yZSBsb2dpY2FsLiBUcnVlLCB0aGUgbWV0YXBob3JzIGFyZSBzb21ld2hhdCBibGF0YW50IGFuZCB0aGUgdW5kZXJmbG93aW5nIHN5bWJvbGlzbSBxdWlja2x5IGJlY29tZXMgYSBmbG9vZC4gQnV0IGF0IGxlYXN0IHRoaXMgaXMgY29oZXNpdmUgYW5kIHF1aXJreSB3aXRob3V0IGJlaW5nIGNvbXBsZXRlIGRyaXZlbC4gSXQgaXMgYWxzbyB3ZWxsIGFjdGVkLiBCb3RoIE90dG8gYW5kIERlbCBIb3lvIGFyZSB2ZXJ5IGdvb2QgYXMgdGhlIGxvdmVycyBsb29raW5nIGZvciBzb21ldGhpbmcgdGhleSBrbm93IHRoZXknbGwgbmV2ZXIgZmluZCB3aGlsZSBvdGhlciBjaGFyYWN0ZXJzIGFyZSBwZXJpcGhlcmFsIGF0IGJlc3QuIFBhcnQgb2YgdGhlIHRyb3VibGUgaXMgdGhhdCBpdCBzZWVtcyB0byB3cmFwIHVwIGZhciB0b28gcXVpY2tseSwgbGVhdmluZyB0aGlzIHZpZXdlciBzb21ld2hhdCBkaXNhcHBvaW50ZWQuIFRoZSBvdGhlciBwYXJ0IGlzIHRoYXQgd2hlbiB5b3UgY29uc2lkZXIgQXVzdHJhbGlhJ3MgZHJhY29uaWFuIGltbWlncmF0aW9uIHBvbGljeSAoaS5lLiBpZiB5b3UgZG9uJ3Qgc3BlYWsgRW5nbGlzaCwgcmFjayBvZmYhKSwgc3VjaCBhIHN0b3J5IGlzIHVubGlrZWx5IHRvIHRha2UgcGxhY2UgaW4gcmVhbGl0eS4gVGhlIG90aGVyIGNoYXJhY3RlcnMsIHNhZGx5LCBhbHNvIGhlbHAgdG8gZGVzdGFiaWxpc2UgdGhlIHJlYWxpc20gYnkgcHJvdmluZyB0byBiZSBsaXR0bGUgbW9yZSB0aGFuIG9kZC1iYWxsIHN0ZXJlb3R5cGVzLjxiciAvPjxiciAvPkRlc3BpdGUgdGhhdCwgIkRlYWQgTGV0dGVyIE9mZmljZSIgaXMgY2VydGFpbmx5IHNvbWV0aGluZyBhIGxpdHRsZSBkaWZmZXJlbnQuIEl0IG1pZ2h0IG5vdCBiZSB0byBldmVyeW9uZSdzIHRhc3RlIGJ1dCBJIGxpa2VkIGl0LiBZZXMsIGl0IHdhcyBoYWNrbmV5ZWQgYW5kIHByZWRpY3RhYmxlIGJ1dCBzb21ldGltZXMsIGl0J3MgbmljZSB0byB3YXRjaCBhIGZpbG0gd2l0aG91dCBndW5zIG9yIHZpb2xlbmNlIG9yIGhlYXZ5LWR1dHkgc3dlYXJpbmcgYW5kIG51ZGl0eSAobm8gY2hhbmNlIG9mIHRoYXQgaW4gYW4gQXVzdHJhbGlhbiBmaWxtKS4gVGhlcmUgYWluJ3QgYW55IG1ham9yIGxhdWdocywgdGhlcmUncyBubyBCdWxsZXQgVGltZSBhbmQgdGhlIGNoYXJhY3RlcnMgYXJlIHVzdWFsbHkgb25lLWRpbWVuc2lvbmFsLiBCdXQgaXQncyB0aGUgc3RvcnkgdGhhdCBjb3VudHMgaGVyZSBhbmQgd2hpbGUgaXQncyBub3QgZWFydGgtc2hhdHRlcmluZyBpbiBpdHMgbWFnbmlmaWNlbmNlLCBpdCdzIGEgcGxlYXNhbnQgZW5vdWdoIHdheSBvZiBwYXNzaW5nIHRoZSB0aW1lLiBJdCdzIHRoZSBtb3ZpZSBlcXVpdmFsZW50IG9mIGEgU2hlcnlsIENyb3cgQ0QgLSBuaWNlIHRvIGxpc3RlbiB0byBub3cgYW5kIGFnYWluIGJ1dCB5b3Ugd291bGRuJ3QgcmVhbGx5IG1pc3MgaXQgaWYgaXQgd2Fzbid0IHRoZXJlLhkAAAAAAAAAQBrbCRLPCVllcywgaW4gdGhpcyBtb3ZpZSB5b3UgYXJlIHRyZWF0ZWQgdG8gbXVsdGlwbGUgbGl0dGxlIHNub3dtZW4gb24gdGhlIGF0dGFjayBpbiBhcHBhcmVudGx5IGEgdmVyeSB3YXJtIGNsaW1hdGUgc28geWVzIHRoaXMgbW92aWUgaXMgZGVmaW5pdGVseSBub3QgdG8gYmUgdGFrZW4gc2VyaW91c2x5LiBJdCBpcyBpbiBmYWN0IGEgbXVjaCB3b3JzZSBtb3ZpZSB0aGFuIHRoZSBvcmlnaW5hbCBhcyBhdCBsZWFzdCB3aXRoIHRoYXQgb25lIHRoZSB3aG9sZSBwcm9kdWN0aW9uIGxvb2tlZCBsaWtlIGl0IGNvc3QgbW9yZSB0aGFuIGEgY291cGxlIG9mIGJ1Y2tzIGFuZCBhIHZpZGVvIGNhbWVyYSB0byBtYWtlLiBJdCBoYXMgaXRzIGZ1bm55IG1vbWVudHMsIGJ1dCByZWFsbHkgcGxheWluZyBvZmYgdGhlIGNoZWFwbmVzcyBvZiB5b3VyIG1vdmllIGFuZCBtYWtpbmcgdGhhdCBiZSB5b3VyIGludGVuZGVkIGxhdWdocyBpcyBraW5kIG9mIHdlYWsgZmlsbSBtYWtpbmcgaWYgeW91IGFzayBtZS4gWW91IGNhbiBub3QgY29tZSB1cCB3aXRoIGEgZ29vZCBzdG9yeSwgeW91ciBlZmZlY3RzIGFyZSBnb2luZyB0byByZWFsbHkgYmUgYmFkLCBoZXkgbGV0IHVzIGp1c3QgbWFrZSB0aGUgbW92aWUgbG9vayBhcyBiYWQgYXMgcG9zc2libGUgd2l0aCBob3JyaWJsZSBvbmUgbGluZXJzIGFuZCB3ZSBoYXZlIG91ciBtb3ZpZS4gVGhlIGZpcnN0IG9uZSBhdCBsZWFzdCBoYWQgYSBzb21ld2hhdCBjcmVkaWJsZSBzdG9yeSBhcyB0aGUgc25vd21hbiBpbiB0aGF0IG9uZSBhdHRhY2tlZCBkdXJpbmcgdGhlIHdpbnRlciBhbmQgbm90IHdoYXQgYW1vdW50cyB0byBhIHJlc29ydC4gSXQgYWxzbyBoYWQgYmV0dGVyIGVmZmVjdHMgdG9vLCB0aGlzIG9uZSBpcyBqdXN0IGEgc3RlcCBvciB0d28gYWhlYWQgb2YgIkhvYmdvYmxpbnMiIGFzIGZhciBhcyB0aGUgbW9uc3RlcnMgYXJlIGNvbmNlcm5lZCBhbmQgeW91IHJlYWxseSB3YW50IHRvIGJlIG1vcmUgdGhhbiBhIHN0ZXAgYSB0d28gYWJvdmUgYSBidW5jaCBvZiBoYW5kIHB1cHBldHMuIFN0aWxsLCBpdCBtYWtlcyB1cCBmb3IgYWxsIG9mIHRoaXMgd2l0aCBhIHN1cGVyIGVuZGluZyB0aGF0IGRlcGljdHMgYSBncmVhdCBzZWEgdmVzc2VsIGJlaW5nIHRha2VuIG91dCBieSB0aGUgbWlnaHR5IGZyb3N0LiBBY3R1YWxseSwgSSBhbSBqdXN0IGtpZGRpbmcsIGJ1dCByZWFsbHkgaXQgd2FzIHRoZSBmdW5uaWVzdCBwYXJ0IG9mIHRoZSBtb3ZpZS4ZAAAAAAAAAEAanAgSkAhZZXMsIGhlIGlzISAuLi5Obywgbm90IGJlY2F1c2Ugb2YgUGludGlsaWUgbGlrZXMgdG8gdW5kcmVzcyBoaXMgYWN0b3JzIGFuZCBzaG93IHB1YmxpY2x5IHRoZWlyIHByaXZpZXMuIFBpbnRpbGllIElTIFRIRSBuYWtlZCAiZW1wZXJvciIgLSBzbyB0byBzcGVhay4uLjxiciAvPjxiciAvPkl0J3MgYmlnIHRpbWUgZm9yIHNvbWVvbmUgdG8gc3RhdGUgdGhlIHRydXRoLiBUaGlzIGltcG9zdG9yIGlzIGEgdm95ZXVyLCBhIGJyYXQgbG9ja2VkIGluIGFuIG9sZCBtYW4ncyBib2R5LiBIaXMgYWJ1bmRhbmNlIG9mIG51ZGUgc2NlbmVzIGhhdmUgbm8gYXJ0aXN0aWMgbGVnaXRpbWFjeSB3aGF0c29ldmVyLiBJdCBpcyAxMDAlIHZpc3VhbCBwZXJ2ZXJzaW9uOiBoZSBnZXRzIGhpcyBraWNrcyBieSBtYWtpbmcgdGhlIGFjdG9ycyBzdHJpcCBpbiB0aGUgYnVmZiBhbmQgbG9vayBhdCB0aGVpciB3aWxsaWVzLiBBbmQgaWYgaGUgZG9lcyB0aGlzIGluIGZyb250IG9mIHRoZSBhdWRpZW5jZSwgaGUgbWlnaHQgZXZlIGdldCBhIGhhcmQtb24hIERpZCB5b3Uga25vdyB0aGF0LCBvbiB0aGUgc2V0IG9mICJOaWtpIEFyZGVsZWFuIiwgaGUgdXNlZCB0byBlbWJhcnJhc3MgcG9vciBDb2NhIEJsb3NzLCBieSB0ZWxsaW5nIGhlcjogIk9oLCBDb2NhLCBob3cgSSB3YW5uYSBmKioqIHlvdSEiPyBTaGUgaXMgYSBncmVhdCBsYWR5LCB2ZXJ5IGRlY2VudCBhbmQgc2Vuc2l0aXZlLCBhbmQgc2hlIGJlY2FtZSB1bnNwZWFrYWJseSBhc2hhbWVkIC0gdG8gaGlzIHBldHR5IHNhdGlzZmFjdGlvbiEgQW5kLCBhcyBhIHdvcnJ5aW5nIGFsYXJtIHNpZ25hbCBhYm91dCB0aGUgZGVncmVlIG9mIHZ1bGdhcml0eSBhbmQgbGFjayBvZiBlZHVjYXRpb24gaW4gUm9tYW5pYW4gYXVkaWVuY2VzLCBzbyBtYW55IHBlb3BsZSBhcmUgc3RpbGwgc28gZm9vbGlzaCB0byBkZWNsYXJlIHRoZXNlIHZpc3VhbCBvYnNjZW5pdGllcyAid29ya3Mgb2YgYXJ0IiEgV2lsbCBhbnlvbmUgaGF2ZSBldmVyIHRoZSBkZWNlbmN5IHRvIGV4cG9zZSB0aGUgdHJ1dGggb2YgaXQgYWxsPxkAAAAAAAAAQCWYdqNEKp+KPgqkBiKYBkxvdmVkIHRvZGF5J3Mgc2hvdyEhISBJdCB3YXMgYSB2YXJpZXR5IGFuZCBub3Qgc29sZWx5IGNvb2tpbmcgKHdoaWNoIHdvdWxkIGhhdmUgYmVlbiBncmVhdCB0b28pLiBWZXJ5IHN0aW11bGF0aW5nIGFuZCBjYXB0aXZhdGluZywgYWx3YXlzIGtlZXBpbmcgdGhlIHZpZXdlciBwZWVraW5nIGFyb3VuZCB0aGUgY29ybmVyIHRvIHNlZSB3aGF0IHdhcyBjb21pbmcgdXAgbmV4dC4gU2hlIGlzIGFzIGRvd24gdG8gZWFydGggYW5kIGFzIHBlcnNvbmFibGUgYXMgeW91IGdldCwgbGlrZSBvbmUgb2YgdXMgd2hpY2ggbWFkZSB0aGUgc2hvdyBhbGwgdGhlIG1vcmUgZW5qb3lhYmxlLiBTcGVjaWFsIGd1ZXN0cywgd2hvIGFyZSBmcmllbmRzIGFzIHdlbGwgbWFkZSBmb3IgYSBuaWNlIHN1cnByaXNlIHRvby4gTG92ZWQgdGhlICdmaXJzdCcgdGhlbWUgYW5kIHRoYXQgdGhlIGF1ZGllbmNlIHdhcyBpbnZpdGVkIHRvIHBsYXkgYWxvbmcgdG9vLiBJIG11c3QgYWRtaXQgSSB3YXMgc2hvY2tlZCB0byBzZWUgaGVyIGNvbWUgaW4gdW5kZXIgaGVyIHRpbWUgbGltaXRzIG9uIGEgZmV3IHRoaW5ncywgYnV0IHNoZSBkaWQgaXQgYW5kIGJ5IGdvbGx5IEknbGwgYmUgd3JpdGluZyB0aG9zZSByZWNpcGVzIGRvd24uIFNhdmluZyB0aW1lIGluIHRoZSBraXRjaGVuIG1lYW5zIG1vcmUgdGltZSB3aXRoIGZhbWlseS4gVGhvc2Ugd2hvIGhhdmVuJ3QgdHVuZWQgaW4geWV0LCBmaW5kIG91dCB3aGF0IGNoYW5uZWwgYW5kIHRoZSB0aW1lLCBJIGFzc3VyZSB5b3UgdGhhdCB5b3Ugd29uJ3QgYmUgZGlzYXBwb2ludGVkLikAAAAAAAAUQAqHCAgBEAEi9wdIaWxhcmlvdXMsIGNsZWFuLCBsaWdodC1oZWFydGVkLCBhbmQgcXVvdGUtd29ydGh5LiBXaGF0IGVsc2UgY2FuIHlvdSBhc2sgZm9yIGluIGEgZmlsbT8gVGhpcyBpcyBteSBhbGwtdGltZSwgbnVtYmVyIG9uZSBmYXZvcml0ZSBtb3ZpZS4gRXZlciBzaW5jZSBJIHdhcyBhIGxpdHRsZSBnaXJsLCBJJ3ZlIGRyZWFtZWQgb2Ygb3duaW5nIGEgYmx1ZSB2YW4gd2l0aCBmbGFtZXMgYW5kIGFuIG9ic2VydmF0aW9uIGJ1YmJsZS48YnIgLz48YnIgLz5UaGUgY2xpY2jDqSBjaGFyYWN0ZXJzIGluIHJpZGljdWxvdXMgc2l0dWF0aW9ucyBhcmUgd2hhdCBtYWtlIHRoaXMgZmlsbSBzdWNoIGdyZWF0IGZ1bi4gVGhlIHdvbmRlcmZ1bCBjb21lZGljIGNoZW1pc3RyeSBiZXR3ZWVuIFN0ZXBoZW4gRnVyc3QgKEhhcm9sZCkgYW5kIEFuZHkgVGVubmFudCAoTWVsaW8pIG1ha2UgdXAgbW9zdCBvZiBteSBmYXZvcml0ZSBwYXJ0cyBvZiB0aGUgbW92aWUuIEFuZCB3aG8gZGlkbid0IGxvdmUgdGhlIGhvcGVsZXNzIGF3a3dhcmRuZXNzIG9mIEZseW5jaD8gRG9uJ3QgZm9yZ2V0IHRoZSBhaXJwb3J0IGFudGljcyBvZiBMZW9uJ3MgY3JvbmllcywgZHJlc3NlZCB1cCBhcyBIYXJpIEtyaXNobmFzOiBkYW5jaW5nLCBjaGFudGluZyBhbmQgcGxheWluZyB0aGUgdGFtYm91cmluZS0tdW5iZWF0YWJsZSEgVGhlIGNsdWVzIGFyZSBnZW5pdXMsIHRoZSBsb2NhdGlvbnMgYXJlIGNsYXNzaWMsIGFuZCB0aGUgcGxvdCBpcyB0aW1lbGVzcy48YnIgLz48YnIgLz5BIHdvcmQgdG8gdGhlIHdpc2UsIGlmIHlvdSBkaWRuJ3Qgd2F0Y2ggdGhpcyBmaWxtIHdoZW4geW91IHdlcmUgbGl0dGxlLCBpdCBwcm9iYWJseSB3b24ndCB3aW4gYSBwbGFjZSBpbiB5b3VyIGhlYXJ0IHRvZGF5LiBCdXQgbmV2ZXJ0aGVsZXNzIGdpdmUgaXQgYSBjaGFuY2UsIHlvdSBtYXkgZmluZCB0aGF0ICJJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHlvdSBzYXksIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgeW91IGRvLCB5b3UndmUgZ290dGEgcGxheS4iKQAAAAAAABBACrwNCAIQAiKsDVlvdSBkbyByZWFsaXplIHRoYXQgeW91J3ZlIGJlZW4gd2F0Y2hpbmcgdGhlIEVYQUNUIFNBTUUgU0hPVyBmb3IgZWlnaHQgeWVhcnMsIHJpZ2h0PyBJIGNvdWxkIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgY3VyaW9zaXR5IG9mIHNlZWluZyBzdHJhbmdlcnMgY28tZXhpc3Qgb24gYW4gSXNsYW5kLCBidXQgeW91J2QgdGhpbmsgdGhhdCBhZnRlciB3YXRjaGluZyB1bmtlbXB0LCBzdGluay1sYWRlbmVkIGhlcm9lcyBydW4gcm91Z2hzaG9kIHRocm91Z2ggdGhlIGJ1c2ggd2l0aCBhbiBlZ2cgb24gYSBzcG9vbiBmb3IgaGFsZiBhIGRlY2FkZSB3b3VsZCBiZSBlbm91Z2ggdG8gZ2V0IHlvdSB0byBjb21taXQgdG8gc29tZXRoaW5nIGEgbGl0dGxlIG1vcmUgb3JpZ2luYWwgKGFuZCBpbnRlcmVzdGluZykuPGJyIC8+PGJyIC8+QW5kIEknbSBub3QgZXZlbiBzcGVha2luZyBvZiB0aGUgc2hvd3MgdmFsaWRpdHkgd2hpY2ggZm9yIHRoZSByZWNvcmQgSSBmaW5kIHF1ZXN0aW9uYWJsZS4gSXQncyBqdXN0IGhhcmQgdG8gc3VzcGVuZCBkaXNiZWxpZWYgZm9yICJCdXNoeSBCaWxsIiBlYXRpbmcgYSByYXQgd2hlbiB0aGUgZW50aXJlIGNyZXcgb2YgcHJvZHVjZXJzIGFuZCBjYW1lcmEgcGVvcGxlIGFyZSBob3VzZWQgaW4gYW4gYWlyIGNvbmRpdGlvbmVkIG1ha2Utc2hpZnQgYmlvLWRvbWUgc2lwcGluZyBmcm9zdHkgbW9jaGNpbm5vJ3Mgd2l0aCBtb3h5LjxiciAvPjxiciAvPldoYXQncyB0aGUgYXBwZWFsIGhlcmU/IEkgZG9uJ3QgY2FyZSBhYm91dCB0aGVzZSBwZW9wbGUgb3IgdGhlaXIgbWVhbmRlcmluZyBsaXZlcy4gSSBqdXN0IGRvbid0IGdldCBpdC4gQnV0IGlmIHlvdSBETyBmaW5kIHlvdXJzZWxmIGJlaW5nIGNhcHRpdmF0ZWQgYnkgaGFpcnksIHVud2FzaGVkIHBlb3BsZSwgSSBzdWdnZXN0IHlvdSB0dXJuIG9mZiB5b3VyIFRWIGFuZCBqdXN0IHRha2UgYSB0cmlwIHRvIHlvdXIgbG9jYWwgYnVzIHN0YXRpb24gd2hlcmUgeW91IGNhbiBzZWUgcGVvcGxlIGxpa2UgdGhpcyBpbiB0aGVpciBUUlVFIGhhYml0YXQuIFRoZXkgY2FsbCB0aGVtIEhPTUVMRVNTIFBFT1BMRSwgYW5kIGZyZWUgb2YgY2hhcmdlLCB5b3UgY2FuIHNpdCBiYWNrIGFuZCBtYXJ2ZWwgaW4gdGhlaXIgdW5jYW5ueSBhYmlsaXR5IHRvIHJldHJpZXZlIHZhcmlvdXMgY2lnYXJldHRlIGRlYnJpcyBmcm9tIGEgcGxldGhvcmEgb2YgZ2FyYmFnZSBjYW5pc3RlcnMsIGV2ZW50dWFsbHkgc3RyaWtpbmcgInBheS1kaXJ0IiBhbmQgZmFzaGlvbmluZyBhIGhvbWVtYWRlIERyLiBGcmFua2Vuc3RlaW4tc3R5bGVkIGNhbmNlci1zdGljaywgYWxsIHRoZSB3aGlsZSBiZWdnaW5nIHBlb3BsZSBmb3IgY2hhbmdlIGZvciBmb29kIHdoZW4gdGhlIHN0aW5rIG9mICJBcXVhIFZlbHZhIiBvbiB0aGVpciBicmVhdGggaXMgZW5vdWdoIHRvIHN1Z2dlc3Qgb3RoZXJ3aXNlLiBBbmQgdGhlIGJlc3QgcGFydD8gTXVjaCBsaWtlIFN1cnZpdm9yLCBldmVyeSB3ZWVrIG9uZSBtZW1iZXIgb2YgdGhlIHRyaWJlICJMZWF2ZXMiIHRoZSAiSXNsYW5kIiB3aGVuIHRoZXkgYXJlIHVuY2VyZW1vbmlvdXNseSBzZW50IHBhY2tpbmcgdG8gdGhlIGxvY2FsIEluc3RpdHV0aW9uIHdoZW4gdGhlIGZyaWdodGVuaW5nIHVubWVkaWNhdGVkIHN0YXRlIG9mIGZ1bGwtYmxvd24gc2NoaXpvcGhyZW5pYSBraWNrcyBpbnRvIGdlYXIhIE5vdyBUSEFUJ1MgRU5URVJUQUlOTUVOVCEpAAAAAAAACEAK0AcIAxADIsAHV2hlbiBpIGdvdCB0aGlzIG1vdmllIGZyZWUgZnJvbSBteSBqb2IsIGFsb25nIHdpdGggdGhyZWUgb3RoZXIgc2ltaWxhciBtb3ZpZXMuLiBJIHdhdGNoZWQgdGhlbiB3aXRoIHZlcnkgbG93IGV4cGVjdGF0aW9ucy4gTm93IHRoaXMgbW92aWUgaXNuJ3QgYmFkIHBlciBzZS4gWW91IGdldCB3aGF0IHlvdSBwYXkgZm9yLiBJdCBpcyBhIHRhbGUgb2YgbG92ZSwgYmV0cmF5YWwsIGxpZXMsIHNleCwgc2NhbmRhbCwgZXZlcnl0aGluZyB5b3Ugd2FudCBpbiBhIG1vdmllLiBEZWZpbml0ZWx5IG5vdCBhIEhvbGx5d29vZCBibG9ja2J1c3RlciwgYnV0IGZvciBjaGVhcCB0aHJpbGxzIGl0IGlzIG5vdCB0aGF0IGJhZC4gSSB3b3VsZCBwcm9iYWJseSBuZXZlciB3YXRjaCB0aGlzIG1vdmllIGFnYWluLiBJbiBhIG51dHNoZWxsIHRoaXMgaXMgdGhlIGtpbmQgb2YgbW92aWUgdGhhdCB5b3Ugd291bGQgc2VlIGVpdGhlciB2ZXJ5IGxhdGUgYXQgbmlnaHQgb24gYSBsb2NhbCB0ZWxldmlzaW9uIHN0YXRpb24gdGhhdCBpcyBqdXN0IHdhbnRpbmcgdG8gdGFrZSB1cCBzb21lIHRpbWUsIG9yIHlvdSB3b3VsZCBzZWUgaXQgb24gYSBTdW5kYXkgYWZ0ZXJub29uIG9uIGEgbG9jYWwgdGVsZXZpc2lvbiBzdGF0aW9uIHRoYXQgaXMgdHJ5aW5nIHRvIHRha2UgdXAgc29tZSB0aW1lLiBEZXNwaXRlIHRoZSBiYWQgYWN0aW5nLCBjbGljaMOpIGxpbmVzLCBhbmQgc3ViIHBhciBjYW1lcmEgd29yay4gSSBkaWRuJ3QgaGF2ZSB0aGUgZGVzaXJlIHRvIHR1cm4gb2ZmIHRoZSBtb3ZpZSBhbmQgcHJldGVuZCBsaWtlIGl0IG5ldmVyIHBvcHBlZCBpbnRvIG15IERWRCBwbGF5ZXIuIFRoZSBzdG9yeSBoYXMgYmVlbiBkb25lIG1hbnkgdGltZXMgaW4gbWFueSBtb3ZpZXMuIFRoaXMgb25lIGlzIG5vIGRpZmZlcmVudCwgbm8gYmV0dGVyLCBubyB3b3JzZS4gPGJyIC8+PGJyIC8+SnVzdCB5b3VyIGF2ZXJhZ2UgbW92aWUuKQAAAAAAAAhACqoKCAQQBCKaClRoaXMgc2hvdyBjb21lcyB1cCB3aXRoIGludGVyZXN0aW5nIGxvY2F0aW9ucyBhcyBmYXN0IGFzIHRoZSB0cmF2ZWwgY2hhbm5lbC4gSXQgaXMgYmlsbGVkIGFzIHJlYWxpdHkgYnV0IGluIGFjdHVhbGl0eSBpdCBpcyBwdXJlIHByaW1lIHRpbWUgc29hcCBvcGVyYS4gSXQncyB0cmllcyB0byB1c2UgZXhvdGljIGxvY2FsZXMgYXMgYSBmYWNhZGUgdG8gYnJpbmcgcGVvcGxlIGludG8gYSBwaG9ueSBjb250ZXN0ICYgdGhlbiBwcm9jZWVkcyB0byBob29rIHZpZXdlcnMgb24gdGhlIGNvbnRlc3RhbnRzIHNvYXAgb3BlcmEgc3R5bGUuPGJyIC8+PGJyIC8+SXQgYWxzbyBib3Jyb3dzIGZyb20gYW4gZWFybHkgQ0JTIGdhbWUgc2hvdyBwaW9uZWVyLSBCZWF0IFRoZSBDbG9jay0gYnkgaW52ZW50aW5nIHNpdHVhdGlvbnMgZm9yIGl0cyBjb250ZXN0YW50cyB0byB0cnkgJiBvdmVyY29tZS4gVGhlbiBpdCByZXdhcmRzIHRoZSB3aW5uZXIgbW9uZXkuIElmIHRoZXkgY2FuIHNwaWNlIGl0IHVwIHdpdGggYSBsaXR0bGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgY2hhcmFjdGVycywgZXZlbiBiZXR0ZXIuIFdoaWxlIHRoZSBnYW1lIGZvcm1hdCBpcyBpbiBzbG93IG1vdGlvbiB2ZXJzdXMgQmVhdCBUaGUgQ2xvY2stIHRoZSByZWFsIGFjY29tcGxpc2htZW50IG9mIHRoaXMgc2VyaWVzIGlzIHRvIGVzY2FwZSByZWFsaXR5LiA8YnIgLz48YnIgLz5UaGlzIHNob3cgaGFzIGVsZW1lbnRzIG9mIHNldmVyYWwgdHlwZXMgb2Ygc3VjY2Vzc2Z1bCBwYXN0IHByb2dyYW1zLiBSZWFsaXR5IHRlbGV2aXNpb24sIGhhcmRseSwgYnV0IGlmIHlvdXIgaG9va2VkIG9uIHRoZSBjb250ZXN0YW50cywgbG9jYWxlIG9yIGNvbnRlc3QsIHRoaXMgaXMgeW91ciBjdXAgb2YgdGVhLiBJZiB5b3VyIG5vdCwgdGhpcyBlbnRpcmUgc2VyaWVzIGlzIGFzIEkgc2F5LCBkcml2ZWwgZHJpcHBpbmcgd2l0aCBncmF2eS4gSXQgaXMgYW5vdGhlciBzaG93IGhpZGluZyBiZWhpbmQgdGhlIHJlYWxpdHkgbGFiZWwgd2hpY2ggaXMgdGhlIHRyZW5kIGl0IHN0YXJ0ZWQgaW4gMjAwMC48YnIgLz48YnIgLz5JdCBpcyBzbGljayAmIHdlbGwgcHJvZHVjZWQsIHNvIGl0IG1pZ2h0IGxhc3QgYSB3aGlsZSB5ZXQuIEFmdGVyIGFsbCwgc28gZG8gcmUtcnVucyBvZiBHaWxsaWdhbidzIElzbGFuZCwgR3JlZW4gQWNyZXMsIFRoZSBCZXZlcmx5IEhpbGxiaWxsaWVzICYgVGhlIEJyYWR5IEJ1bmNoLiBUaGlzIGp1c3QgZG9lc24ndCBlbXBsb3kgcHJvZmVzc2lvbmFsIGFjdG9ycy4gVGhlIGludGVsbGlnZW5jZSBsZXZlbCBpcyBhYm91dCB0aGUgc2FtZS4pAAAAAAAACEAK9gQIBRAFIuYEUm9iZXJ0IEpvcmRhbiBpcyBhIHRlbGV2aXNpb24gc3Rhci4gUm9iZXJ0IEpvcmRhbiBsaWtlcyB0aGluZ3Mgb3JkZXJseSwgb24gdGltZSBhbmQgcHJvcGVybHkgZXhlY3V0ZWQuIEluIGhpcyB3b3JsZCBjaGlsZHJlbiBhcmUgdG8gYmUgc2Vlbiwgbm90IGhlYXJkLiBTbyB3aHkgd291bGQgTXIuIEpvcmRhbiB3YW50IHRvIGJlY29tZSB0aGUgbWFzdGVyIG9mIGEgcmFtYnVuY3Rpb3VzIGJhbmQgb2YgQm95IFNjb3V0cz8gUmF0aW5ncy4gSGlzIHN0YWZmIGZpZ3VyZXMgdGhhdCBpZiBsZWFybnMgaG93IHRvIGludGVyYWN0IHdpdGggdGhlIHlvdXRoLCB0aGV5IHdpbGwgYmUgbW9yZSBpbmNsaW5lZCB0byB3YXRjaCBoaXMgc2hvdy4gT2YgY291cnNlIHdhdGNoaW5nIEpvcmRhbiBjb3BlIGNvbXByaXNlcyBtb3N0IG9mIHRoZSBmdW4uPGJyIC8+PGJyIC8+TGlrZSBNci4gQmVsdmVkZXJlIGFuZCBNci4gQmVsdmVkZXJlIEdvZXMgdG8gQ29sbGVnZSB0aGlzIG9uZSBpcyBzdXJlIHRvIHBsZWFzZS48YnIgLz48YnIgLz5BTllPTkUgSU5URVJFU1RFRCBJTiBPQlRBSU5JTkcgQSBDT1BZIE9GIFRISVMgRklMTSBQTEVBU0UgV1JJVEUgVE8gTUUgQVQ6IElBTUFTRUFMMkBZQUhPTy5DT00pAAAAAAAACEAKlAUIBhAGIoQFTmlja2Vsb2Rlb24gaGFzIGdvbmUgZG93biB0aGUgdG9pbGV0LiBUaGV5IGhhdmUga2lkcyBzYXlpbmcgdGhpbmdzIGxpa2UgIk9oIG15IEdvZCEiIGFuZCAiV2UncmUgc2NyZXdlZCI8YnIgLz48YnIgLz5UaGlzIHNob3cgcHJvbW90ZXMgaGF0ZSBmb3IgcGVvcGxlIHdobyBhcmVuJ3QgZ29vZCBsb29raW5nLCBvciBhcmVuJ3QgaW4gdGhlIGluIGNyb3dkLiBJdCBzYXkgdGhhdCBzZXh1YWwgcHJvbWlzY3VpdHkgaXMgYWxyaWdodCwgYnkgaGF2aW5nIGdpcmxzIHNsb2JiZXJpbmcgb3ZlciBzaGlydGxlc3MgYm95cy4gTm90IHRvIG1lbnRpb24gdGhlIG92ZXJ3ZWlnaHQgYm95IHdobyB0YWtlcyBvZmYgaGlzIHNoaXJ0LiBUaGUgbWFpbiBjaGFyYWN0ZXJzIGJhc2ljYWxseSBzaHVuIGFueW9uZSBvdXQgb2YgdGhlIG9yZGluYXJ5LiBDYXJseSdzIGZyaWVuZCBTYW0sIHdobyBtYXkgYmUgYSBsZXNiaWFuLCBiZWF0cyB0aGUgc25vdCBvdXQgb2YgYW55Ym9keSB0aGF0IGNyb3NzZXMgaGVyIHBhdGgsIHdoaWNoIHNheXMgaXQncyBhbHJpZ2h0IHRvIGJlIGEgYioqY2guIFRoaXMgc2hvdyBoYXMgc28gbXVjaCBuZWdhdGl2aXR5IGluIGl0IHRoYXQgbm9ib2R5IHNob3VsZCB3YXRjaCBpdCEgSSBnaXZlIGl0IGEgMCBvdXQgb2YgMTAhISEpAAAAAAAACEAKrwgIBxAHIp8ISSBzZWUgdGhhdCBDLiBUaG9tYXMgSG93ZWxsIGhhcyBhcHBlYXJlZCBpbiBtYW55IG1vdmllcyBzaW5jZSBoaXMgaGV5ZGF5IGluIHRoZSA4MHMgYXMgYW4gYWNjb21wbGlzaGVkIHlvdW5nIGFjdG9yLjxiciAvPjxiciAvPkkgYm91Z2h0IHRoaXMgRFZEIGJlY2F1c2UgaXQgd2FzIGNoZWFwIGFuZCBpbiBwYXJ0IGZvciB0aGUgaW50ZXJuZXQtcmVsYXRlZCBwbG90IGFuZCB0byBzZWUgaG93IG11Y2ggb2xkZXIgQy4gVGhvbWFzIEhvd2VsbCBpczsgSSBkbyBub3QgcmVjYWxsIHNlZWluZyBoaW0gaW4gYW55IG1vdmllcyBzaW5jZSB0aGUgMTk4MHMuPGJyIC8+PGJyIC8+SW4ganVzdCBhIGZldyB3b3Jkczogd2hhdCBhIHZlcnkgYmlnIGRpc2FwcG9pbnRtZW50LiBJIGdpdmUgc29tZSBsb3cgYnVkZ2V0IG1vdmllcyBhIGNoYW5jZSwgYnV0IHRoaXMgb25lIHN0YXJ0ZWQgb3V0IGxhbWUuIFdpdGhpbiB0aGUgZmlyc3QgMTUgbWludXRlcyBvZiB0aGUgbW92aWUsIHRoaXMgZWx1c2l2ZSB3b21hbiBpcyBjaGF0dGluZyB3aXRoIGFuIEFzaWFuIGd1eSBpbiBhIGNoYXRyb29tLiBUaGV5IGJhc2ljYWxseSBzdGltdWxhdGUgdGhlbXNlbHZlcyB0byB0aGVpciBvd24gY2hhdCwgc2hlIHRoZW4gaW5zaXN0cyBvbiBtZWV0aW5nIHRoZSBwYXJ0aWNpcGFudCBpbiBwZXJzb24uIFNoZSBtZWV0cyBoaW0sIGhhcyBzZXgsIHRpZXMgaGltIHVwIGFuZCB0aGVuIG11cmRlcnMgaGltIGluIGNvbGQgYmxvb2QuIFRoZSBwbG90IHRoZW4gZGV0ZXJpb3JhdGVzIGZ1cnRoZXIuPGJyIC8+PGJyIC8+VGhlIHBsb3QgaXMgdGhpbiBhbmQgZmxpbXN5IGFuZCB0aGUgYWN0aW5nIGlzIHZlcnkgc3RpZmYuIERvIG5vdCBib3RoZXIgcmVudGluZyBpdCBtdWNoIGxlc3MgcHVyY2hhc2luZyBpdCwgZXZlbiBpZiBpdCBpcyBpbiB0aGUgJDEgRFZEIGJpbi4gSSBwbGFuIHRvIHRha2UgbXkgY29weSBvZiB0aGUgRFZEIHRvIEdvb2R3aWxsLiBJIGFtIHRydWx5IGFtYXplZCB0aGF0IGFueSBvZiB0aGUgcHJpb3IgcmV2aWV3ZXJzIGhlcmUgZ2F2ZSB0aGlzIG1vdmllIGEgYmFkIHJhdGluZy4pAAAAAAAACEAKqAUICBAIIpgFSG93IGhhcyB0aGlzIHBpZWNlIG9mIGNyYXAgc3RheWVkIG9uIFRWIHRoaXMgbG9uZz8gSXQncyB0ZXJyaWJsZS4gSXQgbWFrZXMgbWUgd2FudCB0byBzaG9vdCBzb21lb25lLiBJdCdzIHNvIGZha2UgdGhhdCBpdCBpcyBhY3R1YWxseSB3b3JzZSB0aGFuIGEgMTk0MHMgc2NpLWZpIG1vdmllLiBJJ2QgcmF0aGVyIGhhdmUgYSBzdHJva2UgdGhhbiB3YXRjaCB0aGlzIG5vbnNlbnNlLiBJIHJlbWVtYmVyIHdhdGNoaW5nIGl0IHdoZW4gaXQgZmlyc3QgY2FtZSBvdXQuIEkgdGhvdWdodCwgaGV5IHRoaXMgY291bGQgYmUgaW50ZXJlc3RpbmcsIHRoZW4gSSBmb3VuZCBvdXQgaG93IGFic29sdXRlbHksIGluc2FuZWx5LCByaWRpY3Vsb3VzbHkgc3R1cGlkIGl0IHJlYWxseSB3YXMuIEl0IHdhcyBzbyBiYWQgdGhhdCBJIGFjdHVhbGx5IHRvb2sgb3V0IG15IHBvY2tldCBrbmlmZSBhbmQgc3R1Y2sgbXkgaGFuZCB0byB0aGUgdGFibGUuPGJyIC8+PGJyIC8+UGxlYXNlIHBlb3BsZSwgc3RvcCB3YXRjaGluZyB0aGlzIGFuZCBhbGwgb3RoZXIgcmVhbGl0eSBzaG93cywgdGhleSdyZSB0aGUgdHJhc2ggdGhhdCBpcyBqYW1taW5nIHRoZSBuZXR3b3JrcyBhbmQgY2FuY2VsaW5nIHF1YWxpdHkgcHJvZ3JhbW1pbmcgdGhhdCByZXF1aXJlcyBzb21lIHRob3VnaHQgdG8gY3JlYXRlLikAAAAAAAAIQAqxBQgJEAkioQV3aGVuIEkgZmlyc3QgaGVhcmQgYWJvdXQgdGhpcyBtb3ZpZSwgSSBub3RpY2VkIGl0IHdhcyBvbmUgb2YgdGhlIG1vc3QgY29udHJvdmVyc2lhbCBmaWxtcyBvZiB0aGUgMTk3MHMuIEkgbm90aWNlZCB0aGUgbXVzaWMgd2FzIGJ5IEVsdG9uIEpvaG4sIHNvIEkgZmlndXJlZCBJIGhhZCBub3RoaW5nIHRvIGxvb3NlLCBzbyBJIGdvdCBpdC4gV2hhdCBhIFN1cnByaXNlISEhIFRoZSBtb3ZpZSB3YXMgYXdlc29tZS4gSXQgd2FzIHRydWUgbG92ZSBpcyBhbGwgYWJvdXQuIFRoZSBjaGFyYWN0ZXJzIChQYXVsIGFuZCBNaWNoZWxsZSkgaGFkIG5vIGx1eHVyaWVzLCBubyBtb25leSwgYW5kIHNvbWV0aW1lcyBubyBmb29kLCB5ZXQgdGhleSB3ZXJlIHN0aWxsIGhhcHB5LiBJIHJlY29tbWVuZGVkIHRoaXMgZmlsbSB0byBhbGwgbXkgZnJpZW5kcywgYnV0IHRoZXkgYWxsIGNyaXRpemVkIG15IHRhc3RlcywgYW5kIGV2ZW4gY2FsbGVkIG1lIG5hbWVzLCBiZWN1YXNlIHRoZSBtb3ZpZSBmZWF0dXJlZCB0d28gbWlub3JzIG5ha2VkLiBJIHRoaW5rIHRoYXQgb25seSBtYWRlIHRoZSBtb3ZpZSBtb3JlIHJlYWxpc3RpYy4gVGhlIGNpbmVtYXRvZ3JhcGh5IHdhcyBncmVhdCBhbmQgaXQgb25seSBjb21lIHRvIHNob3cgdGhlIGdyZWF0IGFiaWxpdGllcyBvZiBkaXJlY3RvciBMZXdpcyBHaWxiZXJ0KQAAAAAAAABACpQLCAoQCiKEC3dlbGwsIHRoZSB3cml0aW5nIHdhcyB2ZXJ5IHNsb3BweSwgdGhlIGRpcmVjdGluZyB3YXMgc2xvcHBpZXIsIGFuZCB0aGUgZWRpdGluZyBtYWRlIGl0IHdvcnNlIChhdCBsZWFzdCBpIGhvcGUgaXQgd2FzIHRoZSBlZGl0aW5nKS4gdGhlIGFjdGluZyB3YXNuJ3QgYmFkLCBidXQgaXQgd2Fzbid0IHRoYXQgZ29vZCBlaXRoZXIuIHByZXR0eSBtdWNoIG5vbmUgb2YgdGhlIGNoYXJhY3RlcnMgd2VyZSBsaWthYmxlLiBhdCBsZWFzdCA0NSBtaW51dGVzIG9mIHRoYXQgbW92aWUgd2FzIHdhc3RlZCB0aW1lIGFuZCB0aGUgb3RoZXIgaG91ciBvciBzbyB3YXMgbm90IHVzZWQgYW55d2hlcmUgbmVhciBpdHMgZnVsbCBwb3RlbnRpYWwuIGl0IHdhcyBhIGdyZWF0IGlkZWEsIGJ1dCB5ZXQgYW5vdGhlciB3YXN0ZWQgZ29vZCBpZGVhIGdvZXMgYnkuIGl0IGNvdWxkIGhhdmUgZW5kZWQgMyBkaWZmZXJlbnQgcGxhY2VzIGJ1dCBpdCBqdXN0IGtlcHQgZ29pbmcgb24gdG8gYSBtb3N0bHkgcHJlZGljdGFibGUgaG9sbHl3b29kIGVuZGluZy4gYW5kIHdoYXQgd2Fzbid0IHByZWRpY3RhYmxlIHdhcyBkb25lIHNvIGJhZGx5IHRoYXQgaXQgZGlkbid0IG1hdHRlci4gdGhlIGVuZGluZyB3YXMgbm90IHdvcnRoIHdhdGNoaW5nIGF0IGFsbC4gc2FuZHJhIGJ1bGxvY2sgd2FzIG91dCBvZiBoZXIgZWxlbWVudCBhbmQgc2hvdWxkIHN0YXkgYXdheSBmcm9tIHRoZXNlIHR5cGVzIG9mIG1vdmllcy4gdGhlIG1vdmllIGxvb2tlZCBydXNoZWQgYWxzby4gdGhlIG1vdmllIGp1c3Qgd2Fzbid0IHJlYWxseSB3b3J0aCBzZWVpbmcsIGFuZCBoYWQgaSBwYWlkIGZvciBpdCBpIHdvdWxkIGhhdmUgYmVlbiB2ZXJ5IG1hZC4gbWF5YmUgaSB3YXMgbW9yZSBkaXNhcHBvaW50ZWQgYmVjYXVzZSBpIGV4cGVjdGVkIGEgcmVhbGx5IGdvb2QgbW92aWUgYW5kIGdvdCBhIGJhZCBvbmUuIHRoZSBtb3ZpZSBvdmVyIGFsbCB3YXMgbm90IGhvcnJpZmlibHkgYmFkLCBidXQgaSB3b3VsZG4ndCByZWNjb21lbmQgaXQuIGkgZ2F2ZSBpdCAyIG91dCBvZiAxMCBiL2MgaSBsaWtlZCB0aGUgaWRlYSBzbyBtdWNoIGFuZCBpIGRpZCBsaWtlIG9uZSBjaGFyYWN0ZXIgKGp1c3RpbiBpIGJlbGlldmUsIHRoZSBzdXBlciBzbWFydCBvbmUpLiBhbmQgaXQgYWxzbyBoYWQgc29tZSB2ZXJ5IGNoZWFwIHdheXMgdG8gY292ZXIgcGxvdCBob2xlcy4gaXQgd2FzIGxpa2UgdHJ5aW5nIHRvIGNvdmVyIGEgdm9sY2FubyB3aXRoIGNoZWFwIG1hc2tpbmcgdGFwZSwgaXQgd2FzIG5vdCBwcmV0dHkuIGFueXdheSwgaWYgeW91IHNlZSBpdCwgd2FpdCBmb3IgdGhlICQxLjUwIHRoZWF0ZXIgb3IgdmlkZW8sIHVubGVzcyB5b3UgbGlrZSBwcmV0dHkgbXVjaCBldmVyeSBtb3ZpZSB5b3Ugc2VlLCB0aGVuIGkgZ3Vlc3MgeW91J2xsIGxpa2UgdGhpcyBvbmUuKQAAAAAAAABACoYCCAsQCyL2AXRoaXMgbW92aWUgc3Vja3MuIGRpZCBhbnlvbmUgbm90aWNlIHRoYXQgdGhlIGVudGlyZSBtb3ZpZSB3YXMgc2hvdCBpbiBsaWtlIDIgcm9vbXMuIHRoZXJlIGFyZSBORVZFUiBhbnkgb3V0c2lkZSBzaG90cyBhbmQgaWYgdGhlcmUgYXJlIGl0cyBvYnZpb3VzbHkgZmlsbSB0YWtlbiBmcm9tIHNvbWV3aGVyZSBlbHNlLiB0aGlzIG1vdmllIGJsb3dzIGhhcmQsIHBhaW5mdWwgdG8gc2l0IHRocm91Z2ggdG9vLiBzdGF5IGZhciBhd2F5LikAAAAAAAAAQAqqBQgMEAwimgV0aGlzIG1vdmllIGJlZ2lucyB3aXRoIGFuIG9yZGluYXJ5IGZ1bmVyYWwuLi4gYW5kIGl0IGluc2lzdHMgc28gaGFyZCBvbiB0aGlzIG9yZGluYXJ5IGZ1bmVyYWwgZmVlbCB0aGF0IGkgbG9zdCBpbnRlcmVzdCB3aXRoaW4gNSBtaW51dGVzIG9mIHdhdGNoaW5nLCBhbmQgc3RhcnRlZCBza2lwcGluZyBzY2VuZXMuIGl0IHNlZW1zIHRvIG1lIHdob21ldmVyIG1hZGUgdGhpcyBtb3ZpZSBpcyBhZmZsaWN0ZWQgdG8gdGhlIGV4dGVudCBvZiBiZWNvbWluZyB0cmFwcGVkIGluIGEgcGVybWFuZW50IG1vcmJpZCB0cmFuY2UsIHVuYWJsZSB0byBjb250ZW1wbGF0ZSBhbnl0aGluZyBlbHNlIGJ1dCBkZWF0aCBhbmQgZGVzdHJ1Y3Rpb24uIHdlbGwsIGkgYWluJ3Qgb25lIG9mIHRoZSBkYXJrIGtpZHMgZnJvbSBTb3V0aHBhcmssIGkgd2FudCBhIG1vdmllIHRoYXQgd2l0aGluIDEwIG1pbnV0ZXMgZ2V0cyBtZSB3ZWxsIGludG8gYW4gaW50ZXJlc3Rpbmcgc3RvcnksIGkgd29uJ3Qgc2l0IGFuZCB3YXRjaCAxMCBtaW51dGVzIG9mIG5vdGhpbmcgYnV0IHByZXBhcmF0aW9ucyBmb3IgYSBmdW5lcmFsLi4gbXkgZ3JhbmRtYSBvbiBoZXIgbGFzdCB5ZWFycyB3YXMgZmFzY2luYXRlZCBieSBmdW5lcmFscywgcGVyaGFwcyBzaGUgbWlnaHQgaGF2ZSBlbmpveWVkIHRoaXMgIm1vdmllIi4pAAAAAAAAAEAKjAcIDRANIvwGdGhpcyBpcyB0aGUgd29yc3QgZmlsbSBJJ3ZlIHNlZW4gaW4gYSBsb25nIGxvbmcgdGltZSwgbmV2ZXIgbWluZCB0aGUgZmFjdCB0aGF0IHNvIG1hbnkgdXNlZnVsIHRoaW5ncyBrZWVwIGFwcGVhcmluZyBvbiB0aGlzIGlzbGFuZCAiaG93IGNvbnZlbmllbnQhISEhIiwgdGhlIGFjdGluZyBpcyBiZXlvbmQgcG9vciBmcm9tIHRoZSBvdXRzZXQsIGl0cyBsaWtlIG9uZSBvZiB0aG9zZSByZWFsbHkgYmFkbHkgc2NyaXB0ZWQgc29mdCBwb3JuIGZpbG1zIG9uIGNoYW5uZWwgNSwgYSBjb21wbGV0ZSB3YXN0ZSBvZiB0aW1lLCBhbmQgaSBjYW50IHJlbWVtYmVyIHRoZSBsZWFkIGFjdG9ycyBuYW1lIGJ1dCBpIGNhbnQgYmVsaWV2ZSBoZSBzdGlsbCBnZXRzIHdvcmshISEgSSd2ZSBuZXZlciBzZWVuIGhpbSBhY3QgIkkndmUgc2VlbiBoaW0gaW4gbG90cyBvZiBmaWxtcy4uLiBCdXQgSSd2ZSBuZXZlciBzZWVuIGhpbSBhY3QuIGhlcmUgYXJlIGEgZmV3IG9mIHRoZSBibGFyaW5nbHkgb2J2aW91cyBlcnJvcnMsIGFwcGFyZW50bHkgcGV0cm9sIGxpZ2h0ZXJzIHN0aWxsIHdvcmsgZXZlbiB3aGVuIHRoZXkndmUgYmVlbiBzb2FrZWQgaW4gc2VhIHdhdGVyISEhIGFsc28gYWNjb3JkaW5nIHRvIHRoaXMgZmlsbSB5b3UgY2FuIHdhbGsgaW50byB0aGUgc2VhIG5ha2VkIGJ1dCBjb21lIG91dCB3ZWFyaW5nIGJpa2luaSBib3R0b21zIChJJ20gZ3Vlc3NpbmcgdGhlIGNhbWVyYSBtYW4gYW5kIGVkaXRvciB3ZXJlIHN0dWRlbnRzKXRoZXJlIGFyZSBwbGVudHkgbW9yZSBlcnJvcnMgYnV0IEknbSByYW50aW5nIG5vdywgYmVzaWRlcyBpdHMgbm8gc28gbXVjaCB0aGUgZXJyb3JzIGFzIHRoZSBjYXN0IHRoZSBzY3JpcHQgYW5kIHRoZSB3aG9sZSBmaWxtIGF2b2lkIGF0IGFsbCBjb3N0cykAAAAAAAAAQArUBwgOEA4ixAdpdCdzIGFtYXppbmcgdGhhdCBzbyBtYW55IHBlb3BsZSB0aGF0IGkga25vdyBoYXZlbid0IHNlZW4gdGhpcyBsaXR0bGUgZ2VtLiBldmVyeWJvZHkgaSBoYXZlIHR1cm5lZCBvbiB0byBpdCBoYXZlIGNvbWUgYmFjayB3aXRoIHRoZSBzYW1lIHJlYWN0aW9uOiBXSEFUIEEgR1JFQVQgTU9WSUUhITxiciAvPjxiciAvPmkndmUgbmV2ZXIgbXVjaCBjYXJlZCBmb3IgQnJhZCBQaXR0ICh0aG91Z2ggaGlzIHR1cm5zIGluIDEyIG1vbmtleXMgYW5kIEZpZ2h0IENsdWIgc2hvdyBpbXByb3ZlbWVudCkgYnV0IGhpcyBwZXJmb3JtYW5jZSBpbiB0aGlzIGZpbG0gYXMgYSBwc3ljaG8gaXMgdW5uZXJ2aW5nLCBkYXJrIGFuZCByaWdodCBvbiB0YXJnZXQuPGJyIC8+PGJyIC8+ZXZlcnlvbmUgZWxzZSBpbiB0aGUgZmlsbSBnaXZlcyBleGNlbGxlbnQgcGVyZm9ybWFuY2VzIGFuZCB0aGUgbW92aWUncyBzbG93IGFuZCBkZWxpYmVyYXRlIHBhY2luZyBncmVhdGx5IGVuaGFuY2UgdGhlIHByb2NlZWRpbmdzLiB0aGUgc2Vuc2Ugb2YgZHJlYWQgZm9yIHRoZSBjaGFyYWN0ZXJzIGtlZXBzIGluY3JlYXNpbmcgYXMgdGhleSBjb21lIHRvIHJlYWxpemUgd2hhdCBoYXMgYmVlbiByZWFsbHkgaGFwcGVuaW5nLjxiciAvPjxiciAvPnRoZSBvbmx5IHRoaW5nIHRoYXQga2VlcHMgdGhpcyBmcm9tIGEgMTAgaW4gbXkgYm9vaywgaXMgdGhhdCBjb21wYXJlZCB0byB3aGF0IGNhbWUgYmVmb3JlIGl0LCB0aGUgZW5kaW5nIGlzIGEgYml0IHRvbyBsb25nIGFuZCBvdmVyYmxvd24uIGJ1dCB0aGF0J3MgdGhlIG9ubHkgZmxhdyBpIGNvdWxkIGZpbmQgaW4gdGhpcyBjdWx0IGNsYXNzaWMuPGJyIC8+PGJyIC8+aWYgeW91IGNoZWNrIHRoaXMgZmlsbSBvdXQsIHRyeSB0byBnZXQgdGhlIGxldHRlcmJveGVkIHVucmF0ZWQgZGlyZWN0b3IncyBjdXQgZm9yIHRoZSBiZXN0IHZpZXdpbmcgb3B0aW9uLjxiciAvPjxiciAvPnJhdGluZzo5KQAAAAAAAABACroICA8QDyKqCGluIHRoaXMgbW92aWUsIGpvZSBwZXNjaSBzbGFtcyBkdW5rcyBhIGJhc2tldGJhbGwuIGpvZSBwZXNjaS4uLjxiciAvPjxiciAvPmFuZCBiZWluZyBjb25zaXN0ZW50LCB0aGUgcmVzdCBvZiB0aGUgc2NyaXB0IGlzIGVxdWFsbHkgbm90IGJlbGlldmFibGUuPGJyIC8+PGJyIC8+cGVzY2kgaXMgYSBmdW5ueSBndXksIHdoaWNoIHNhdmVzIHRoaXMgZmlsbSBmcm9tIHNpbmtpbmcgaW50IHRoZSBhYnNvbHV0ZSBiYWNrIG9mIHRoZSBjZWxsYXIsIGJ1dCB0aGUgb3RoZXIgcm9sZXMgd2VyZSBwcmV0dHkgYmFkLiB0aGUgZmF0aGVyIHdhcyBhIGdyZWVkeSBidXNpbmVzc21hbiB3aG8gdmFsdWVkIG1vbmV5IG1vcmUgdGhhbiBwZW9wbGUsIHdoaWNoIHdhc24ndCBldmVuIHdlbGwtcGxheWVkLiBpbnN0ZWFkIG9mIHRoZSBtYW4gYmVpbmcgYW4gYXJjaGV0eXBhbCB2aWxsYWluLCBoZSBzZWVtZWQgbW9yZSBsaWtlIGFuIGFtb3JhbCBhbmRyb2lkIHByb2dyYW1tZWQgdG8gbWFrZSBtb25leSBhdCBhbGwgY29zdHMuIHRoZW4gdGhlcmUncyB0aGUgdG9rZW4gcGllY2UgdGhhdCBpcyBhc3NpZ25lZCB0byBwZXNjaSBhcyBhIGdpcmxmcmllbmQgb3Igc29tZXRoaW5nLi4uaSBkb24ndCBldmVuIHJlbWVtYmVyLi4uc2hlIHdhcyB0aGF0IGZvcmdldHRhYmxlLjxiciAvPjxiciAvPmFueW9uZSB3aG8gcmF0ZXMgdGhpcyBtb3ZpZSBhYm92ZSBhIDUgb3IgNiBpcyBhIHBhaWQgbWVtYmVyIG9mIHNvbWUgc29ydCBvZiBmaWxtIHN0dWRpbyB0cnlpbmcgdG8gdXAgdGhlIHJlcHV0YXRpb24gb2YgdGhpcyBzdW5rZW4gZmlsbSwgb3IgYXQgbGVhc3Qgb25lIG9mIHRob3NlIG1pbGxpb25zIG9mIG1lZGlhIG1pbmlvbnMgd2hvIGNhbid0IGNyaXRpcXVlIGVmZmljaWVudGx5ICh5b3Uga25vdywgdGhlIHBlb3BsZSB3aG8gZmVlbCBiYWQgaWYgdGhleSBnaXZlIGFueXRoaW5nIGEgbWFyayBiZWxvdyA2KS48YnIgLz48YnIgLz5zdGF5IGF3YXkuLi5mYXIgYXdheS4gYW5kIHNoYW1lIG9uIGNvbWVkeSBjZW50cmFsLCB3aGVyZSBpIHNhdyB0aGlzIGZpbG0uIHRoZXkgdXN1YWxseSBwaWNrIGJldHRlci4pAAAAAAAAAEAK5goIEBAQItYKWW91IHdvdWxkIHByb2JhYmx5IGdldCBzb21ldGhpbmcgbGlrZSB0aGlzLiBJJ20gdHJhbnNsYXRpbmcgbW92aWVzIGZvciBhIGxpdmluZyBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgbW92aWUgaW4gbXkgNS15ZWFyIHdvcmtpbmcgZXhwZXJpZW5jZSB0aGF0IEkgZm91bmQgb2ZmZW5zaXZlIHRvIG15IGludGVsbGlnZW5jZS4gT2YgY291cnNlLCB0aGVyZSBhcmUgc3R1cGlkIEhvbGx5d29vZCBtb3ZpZXMgYWJvdXQgZHJ1bmtlbiB0ZWVuYWdlcnMgb24gYSBzcHJpbmcgYnJlYWssIGJ1dCB0aG9zZSBtb3ZpZXMgZG9uJ3QgZXZlbiBjbGFpbSB0byBiZSBzZXJpb3VzIHdvcmtzIG9mIGFydC4gQnV0IHdoZW4gc29tZW9uZSBzdHJpdmVzIGZvciBncmVhdG5lc3MgYW5kIHBvZXRyeSwgYnV0IGRlbGl2ZXJzIGEgbXVkZGxlZCAoYW5kIG9mdGVuIHJpZGljdWxvdXMpIHN0b3J5LCBhIGJ1bmNoIG9mIGRpc3BhcmF0ZSBzY2VuZXMsIHByZXRlbnRpb3VzIGRpYWxvZ3VlLi4uIFRoZW4geW91IGdldCB0aGUgd29yc3Qga2luZCBvZiBhIG1vdmllIHRoYXQgc29tZSBvdGhlciByZXZpZXdlciB2ZXJ5IGFjY3VyYXRlbHkgZGVmaW5lZCBhcyAicHJldGVudGlvdXMgY3JhcCIuIFRvIHRob3NlIHdobyBmaW5kIHRoaXMgbW92aWUgaW50ZWxsaWdlbnQgb3IgZXZlbiBtYXN0ZXJmdWwsIEkgY2FuIG9ubHkgc2F5IC0gaXQncyB5b3VyIGludGVsbGlnZW5jZSBhbmQgeW91ciBpbWFnaW5hdGlvbiB5b3Ugb2J2aW91c2x5IHVzZWQgdG8gdHJ5IGFuZCBtYWtlIHNvbWUgc2Vuc2Ugb2YgdGhpcyBwaXRpZnVsIGF0dGVtcHQgKGl0J3MgaW4gb3VyIGh1bWFuIG5hdHVyZSB0byB0cnkgYW5kIG1ha2Ugc2Vuc2Ugb2YgdGhpbmdzKSAuPGJyIC8+PGJyIC8+T25lIG1vcmUgdGhpbmc6IEkgY2FuIHRvbGVyYXRlIHBvbGl0aWNhbCBpbmNvcnJlY3RuZXNzIHZlcnkgd2VsbCwgSSdtIGFsbCBmb3IgYXJ0aXN0aWMgZnJlZWRvbSBhbmQgc3VzcGVuc2lvbiBvZiBkaXNiZWxpZWYsIGJ1dCB0aGUgU2xhdmljIGZlbWFsZSBjaGFyYWN0ZXIgd2FzIGp1c3QgdG9vIG11Y2guIEkgd2lzaCBzb21lb25lIHRvbGQgdGhlIGRpcmVjdG9yIHRoYXQgaXQncyBraW5kIG9mIHJpZGljdWxvdXMgKGV2ZW4gaW4gYW4gdW5yZWFsaXN0aWMgYXJ0IG1vdmllKSB0byBwb3J0cmF5IGEgU2xhdmljIHdvbWFuIGFzIGEgaGFsZi1hcnRpY3VsYXRlIGRpc2hldmVsbGVkIGNyZWF0dXJlIGNvbm5lY3RlZCB0byB0aGUgZm9yY2VzIG9mIG5hdHVyZSwgcHJvYmFibHkgZHVlIHRvIHRoZSBmYWN0IHRoYXQgc2hlIGhhZCBzcGVudCBoZXIgZW50aXJlIGNoaWxkaG9vZCBsb29raW5nIGF0IHRoZSBzdGFycyBhbmQgbWlsa2luZyBjb3dzIG9uIGEgdGhyZWUtbGVnZ2VkIHN0b29sLikAAAAAAAAAQArPGAgREBEivxhZb3Uga25vdyBhbGwgdGhvc2UgbGV0dGVycyB0byAiRmF0aGVyIENocmlzdG1hcyIgYW5kICJKZXN1cyIgdGhhdCBhcmUgc2VudCBldmVyeSB5ZWFyPyBXZWxsLCBpdCB0dXJucyBvdXQgdGhhdCB0aGV5IGFyZSBub3QgYWN0dWFsbHkgZGVsaXZlcmVkIGJ1dCBkcm9wcGVkIG9mZiBpbiBhIGhhbGYtZm9yZ290dGVuIGNvcm5lciBvZiB0aGUgcG9zdCBvZmZpY2UgdG8gcm90IHVubGVzcyBzb21lIGJyaWdodCBzcGFyayBmaWd1cmVzIG91dCBhIHdheSBvZiBwb3N0aW5nIHRoZW0uIEFzIGJpemFycmUgc2V0dGluZ3MgZ28sIGl0J3MgYSB3aW5uZXIgYW5kIG9uZSB3aGljaCBwZXJmZWN0bHkgZml0cyB0aGUgc3RyYW5nZSBtb3ZpZSB0aGF0IGlzICJEZWFkIExldHRlciBPZmZpY2UiLiBIYXZpbmcgc2FpZCB0aGF0LCB0aGlzIGlzIG9idmlvdXNseSBhbiBBdXN0cmFsaWFuIGZpbG0gYXMgb3Bwb3NlZCB0byBhIEJyaXRpc2ggb25lLiBJZiBpdCB3YXMgUm95YWwgTWFpbCwgbW9zdCBsZXR0ZXJzIGdldCB0aGlzIHNvcnQgb2YgdHJlYXRtZW50IGFueXdheS4gSSBoYXZlbid0IGJlZW4gaW4gdGhpcyBmbGF0IGZvciB0d28geWVhcnMgYW5kIHdlJ3JlIHN0aWxsIGdldHRpbmcgbGV0dGVycyBmb3IgYSBNciBXYW5nLCBzb21lIGZlbWFsZSBwcmllc3Qgb2YgdGhlIENodXJjaCBvZiBMYXR0ZXIgRGF5IEkndmUtTmV2ZXItSGVhcmQtT2YtWW91IGFuZCB2YXJpb3VzIGNhdGFsb2d1ZXMgZm9yIGluZHVzdHJpYWwgZXF1aXBtZW50IGFkZHJlc3NlZCB0byBhIHBsdW1iaW5nIGNvbXBhbnkuPGJyIC8+PGJyIC8+IkRlYWQgTGV0dGVyIE9mZmljZSIgKHRoZSBuYW1lIGdpdmVuIHRvIHRoZSBwbGFjZSB3aGVyZSB1bmRlbGl2ZXJhYmxlIG1haWwgZW5kcyB1cCkgZm9sbG93cyB0aGUgc3Rvcnkgb2YgQWxpY2UgKE1pcmFuZGEgT3R0bykgd2hvIGdyb3dzIHVwIGluIGEgc2VyaW91c2x5IGRpdmlkZWQgaG9tZS4gV3JpdGluZyB0byBoZXIgYWJzZW50IGZhdGhlciwgc2hlIG9ubHkgbGVhcm5zIGluIGFkdWx0aG9vZCB0aGF0IGhlciBsZXR0ZXJzIGhhdmVuJ3QgYmVlbiBkZWxpdmVyZWQgZm9yIG9uZSByZWFzb24gb3IgYW5vdGhlci4gU28sIGxvZ2ljYWxseSwgc2hlIGdldHMgYSBqb2IgYXQgdGhlIEQuTC5PLiBhbmQgZmluZHMgaGVyc2VsZiB3b3JraW5nIGFsb25nc2lkZSBvdGhlciBzb2NpYWwgcmVqZWN0cyBpbmNsdWRpbmcgdGhlIGJyb29kaW5nIENoaWxlYW4gaW1taWdyYW50IEZyYW5rIExvcGV6IChHZW9yZ2UgRGVsIEhveW8pLiBTbG93bHksIHNoZSBmaW5kcyBoZXJzZWxmIGRyYXduIHRvIGhpbSBidXQgY2FuIHNoZSBmaW5kIG91dCB3aGVyZSBoZXIgZGFkIGlzIHdpdGhvdXQgYnJpbmdpbmcgdGhlIHNlbGYtY29udGFpbmVkIHdvcmxkIG9mIHRoZSBEZWFkIExldHRlcnMgT2ZmaWNlIHRvIGl0cyBrbmVlcz88YnIgLz48YnIgLz5Ob3RoaW5nIGFnYWluc3QgdGhpcyBmaWxtIGJ1dCBJIHdhcyByZW1pbmRlZCBvZiB0aGUgZ29kLWF3ZnVsIEhlYXRoZXIgR3JhaGFtIGZpbG0gIkNvbW1pdHRlZCIgd2hpbGUgd2F0Y2hpbmcgdGhpcy4gSG93ZXZlciwgdGhpcyBpcyBzbyBtdWNoIGJldHRlciB0aGFuIHRoYXQgcGlsZSBvZiBob3JzZSBjcmFwIGJ1dCB0aGVuIGFnYWluLCB0aGF0IGFpbid0IGRpZmZpY3VsdC4gRm9yIGEgc3RhcnQsIHRoaXMgZmlsbSBpcyBtdWNoIG1vcmUgbG9naWNhbC4gVHJ1ZSwgdGhlIG1ldGFwaG9ycyBhcmUgc29tZXdoYXQgYmxhdGFudCBhbmQgdGhlIHVuZGVyZmxvd2luZyBzeW1ib2xpc20gcXVpY2tseSBiZWNvbWVzIGEgZmxvb2QuIEJ1dCBhdCBsZWFzdCB0aGlzIGlzIGNvaGVzaXZlIGFuZCBxdWlya3kgd2l0aG91dCBiZWluZyBjb21wbGV0ZSBkcml2ZWwuIEl0IGlzIGFsc28gd2VsbCBhY3RlZC4gQm90aCBPdHRvIGFuZCBEZWwgSG95byBhcmUgdmVyeSBnb29kIGFzIHRoZSBsb3ZlcnMgbG9va2luZyBmb3Igc29tZXRoaW5nIHRoZXkga25vdyB0aGV5J2xsIG5ldmVyIGZpbmQgd2hpbGUgb3RoZXIgY2hhcmFjdGVycyBhcmUgcGVyaXBoZXJhbCBhdCBiZXN0LiBQYXJ0IG9mIHRoZSB0cm91YmxlIGlzIHRoYXQgaXQgc2VlbXMgdG8gd3JhcCB1cCBmYXIgdG9vIHF1aWNrbHksIGxlYXZpbmcgdGhpcyB2aWV3ZXIgc29tZXdoYXQgZGlzYXBwb2ludGVkLiBUaGUgb3RoZXIgcGFydCBpcyB0aGF0IHdoZW4geW91IGNvbnNpZGVyIEF1c3RyYWxpYSdzIGRyYWNvbmlhbiBpbW1pZ3JhdGlvbiBwb2xpY3kgKGkuZS4gaWYgeW91IGRvbid0IHNwZWFrIEVuZ2xpc2gsIHJhY2sgb2ZmISksIHN1Y2ggYSBzdG9yeSBpcyB1bmxpa2VseSB0byB0YWtlIHBsYWNlIGluIHJlYWxpdHkuIFRoZSBvdGhlciBjaGFyYWN0ZXJzLCBzYWRseSwgYWxzbyBoZWxwIHRvIGRlc3RhYmlsaXNlIHRoZSByZWFsaXNtIGJ5IHByb3ZpbmcgdG8gYmUgbGl0dGxlIG1vcmUgdGhhbiBvZGQtYmFsbCBzdGVyZW90eXBlcy48YnIgLz48YnIgLz5EZXNwaXRlIHRoYXQsICJEZWFkIExldHRlciBPZmZpY2UiIGlzIGNlcnRhaW5seSBzb21ldGhpbmcgYSBsaXR0bGUgZGlmZmVyZW50LiBJdCBtaWdodCBub3QgYmUgdG8gZXZlcnlvbmUncyB0YXN0ZSBidXQgSSBsaWtlZCBpdC4gWWVzLCBpdCB3YXMgaGFja25leWVkIGFuZCBwcmVkaWN0YWJsZSBidXQgc29tZXRpbWVzLCBpdCdzIG5pY2UgdG8gd2F0Y2ggYSBmaWxtIHdpdGhvdXQgZ3VucyBvciB2aW9sZW5jZSBvciBoZWF2eS1kdXR5IHN3ZWFyaW5nIGFuZCBudWRpdHkgKG5vIGNoYW5jZSBvZiB0aGF0IGluIGFuIEF1c3RyYWxpYW4gZmlsbSkuIFRoZXJlIGFpbid0IGFueSBtYWpvciBsYXVnaHMsIHRoZXJlJ3Mgbm8gQnVsbGV0IFRpbWUgYW5kIHRoZSBjaGFyYWN0ZXJzIGFyZSB1c3VhbGx5IG9uZS1kaW1lbnNpb25hbC4gQnV0IGl0J3MgdGhlIHN0b3J5IHRoYXQgY291bnRzIGhlcmUgYW5kIHdoaWxlIGl0J3Mgbm90IGVhcnRoLXNoYXR0ZXJpbmcgaW4gaXRzIG1hZ25pZmljZW5jZSwgaXQncyBhIHBsZWFzYW50IGVub3VnaCB3YXkgb2YgcGFzc2luZyB0aGUgdGltZS4gSXQncyB0aGUgbW92aWUgZXF1aXZhbGVudCBvZiBhIFNoZXJ5bCBDcm93IENEIC0gbmljZSB0byBsaXN0ZW4gdG8gbm93IGFuZCBhZ2FpbiBidXQgeW91IHdvdWxkbid0IHJlYWxseSBtaXNzIGl0IGlmIGl0IHdhc24ndCB0aGVyZS4pAAAAAAAAAEAK3wkIEhASIs8JWWVzLCBpbiB0aGlzIG1vdmllIHlvdSBhcmUgdHJlYXRlZCB0byBtdWx0aXBsZSBsaXR0bGUgc25vd21lbiBvbiB0aGUgYXR0YWNrIGluIGFwcGFyZW50bHkgYSB2ZXJ5IHdhcm0gY2xpbWF0ZSBzbyB5ZXMgdGhpcyBtb3ZpZSBpcyBkZWZpbml0ZWx5IG5vdCB0byBiZSB0YWtlbiBzZXJpb3VzbHkuIEl0IGlzIGluIGZhY3QgYSBtdWNoIHdvcnNlIG1vdmllIHRoYW4gdGhlIG9yaWdpbmFsIGFzIGF0IGxlYXN0IHdpdGggdGhhdCBvbmUgdGhlIHdob2xlIHByb2R1Y3Rpb24gbG9va2VkIGxpa2UgaXQgY29zdCBtb3JlIHRoYW4gYSBjb3VwbGUgb2YgYnVja3MgYW5kIGEgdmlkZW8gY2FtZXJhIHRvIG1ha2UuIEl0IGhhcyBpdHMgZnVubnkgbW9tZW50cywgYnV0IHJlYWxseSBwbGF5aW5nIG9mZiB0aGUgY2hlYXBuZXNzIG9mIHlvdXIgbW92aWUgYW5kIG1ha2luZyB0aGF0IGJlIHlvdXIgaW50ZW5kZWQgbGF1Z2hzIGlzIGtpbmQgb2Ygd2VhayBmaWxtIG1ha2luZyBpZiB5b3UgYXNrIG1lLiBZb3UgY2FuIG5vdCBjb21lIHVwIHdpdGggYSBnb29kIHN0b3J5LCB5b3VyIGVmZmVjdHMgYXJlIGdvaW5nIHRvIHJlYWxseSBiZSBiYWQsIGhleSBsZXQgdXMganVzdCBtYWtlIHRoZSBtb3ZpZSBsb29rIGFzIGJhZCBhcyBwb3NzaWJsZSB3aXRoIGhvcnJpYmxlIG9uZSBsaW5lcnMgYW5kIHdlIGhhdmUgb3VyIG1vdmllLiBUaGUgZmlyc3Qgb25lIGF0IGxlYXN0IGhhZCBhIHNvbWV3aGF0IGNyZWRpYmxlIHN0b3J5IGFzIHRoZSBzbm93bWFuIGluIHRoYXQgb25lIGF0dGFja2VkIGR1cmluZyB0aGUgd2ludGVyIGFuZCBub3Qgd2hhdCBhbW91bnRzIHRvIGEgcmVzb3J0LiBJdCBhbHNvIGhhZCBiZXR0ZXIgZWZmZWN0cyB0b28sIHRoaXMgb25lIGlzIGp1c3QgYSBzdGVwIG9yIHR3byBhaGVhZCBvZiAiSG9iZ29ibGlucyIgYXMgZmFyIGFzIHRoZSBtb25zdGVycyBhcmUgY29uY2VybmVkIGFuZCB5b3UgcmVhbGx5IHdhbnQgdG8gYmUgbW9yZSB0aGFuIGEgc3RlcCBhIHR3byBhYm92ZSBhIGJ1bmNoIG9mIGhhbmQgcHVwcGV0cy4gU3RpbGwsIGl0IG1ha2VzIHVwIGZvciBhbGwgb2YgdGhpcyB3aXRoIGEgc3VwZXIgZW5kaW5nIHRoYXQgZGVwaWN0cyBhIGdyZWF0IHNlYSB2ZXNzZWwgYmVpbmcgdGFrZW4gb3V0IGJ5IHRoZSBtaWdodHkgZnJvc3QuIEFjdHVhbGx5LCBJIGFtIGp1c3Qga2lkZGluZywgYnV0IHJlYWxseSBpdCB3YXMgdGhlIGZ1bm5pZXN0IHBhcnQgb2YgdGhlIG1vdmllLikAAAAAAAAAQAqgCAgTEBMikAhZZXMsIGhlIGlzISAuLi5Obywgbm90IGJlY2F1c2Ugb2YgUGludGlsaWUgbGlrZXMgdG8gdW5kcmVzcyBoaXMgYWN0b3JzIGFuZCBzaG93IHB1YmxpY2x5IHRoZWlyIHByaXZpZXMuIFBpbnRpbGllIElTIFRIRSBuYWtlZCAiZW1wZXJvciIgLSBzbyB0byBzcGVhay4uLjxiciAvPjxiciAvPkl0J3MgYmlnIHRpbWUgZm9yIHNvbWVvbmUgdG8gc3RhdGUgdGhlIHRydXRoLiBUaGlzIGltcG9zdG9yIGlzIGEgdm95ZXVyLCBhIGJyYXQgbG9ja2VkIGluIGFuIG9sZCBtYW4ncyBib2R5LiBIaXMgYWJ1bmRhbmNlIG9mIG51ZGUgc2NlbmVzIGhhdmUgbm8gYXJ0aXN0aWMgbGVnaXRpbWFjeSB3aGF0c29ldmVyLiBJdCBpcyAxMDAlIHZpc3VhbCBwZXJ2ZXJzaW9uOiBoZSBnZXRzIGhpcyBraWNrcyBieSBtYWtpbmcgdGhlIGFjdG9ycyBzdHJpcCBpbiB0aGUgYnVmZiBhbmQgbG9vayBhdCB0aGVpciB3aWxsaWVzLiBBbmQgaWYgaGUgZG9lcyB0aGlzIGluIGZyb250IG9mIHRoZSBhdWRpZW5jZSwgaGUgbWlnaHQgZXZlIGdldCBhIGhhcmQtb24hIERpZCB5b3Uga25vdyB0aGF0LCBvbiB0aGUgc2V0IG9mICJOaWtpIEFyZGVsZWFuIiwgaGUgdXNlZCB0byBlbWJhcnJhc3MgcG9vciBDb2NhIEJsb3NzLCBieSB0ZWxsaW5nIGhlcjogIk9oLCBDb2NhLCBob3cgSSB3YW5uYSBmKioqIHlvdSEiPyBTaGUgaXMgYSBncmVhdCBsYWR5LCB2ZXJ5IGRlY2VudCBhbmQgc2Vuc2l0aXZlLCBhbmQgc2hlIGJlY2FtZSB1bnNwZWFrYWJseSBhc2hhbWVkIC0gdG8gaGlzIHBldHR5IHNhdGlzZmFjdGlvbiEgQW5kLCBhcyBhIHdvcnJ5aW5nIGFsYXJtIHNpZ25hbCBhYm91dCB0aGUgZGVncmVlIG9mIHZ1bGdhcml0eSBhbmQgbGFjayBvZiBlZHVjYXRpb24gaW4gUm9tYW5pYW4gYXVkaWVuY2VzLCBzbyBtYW55IHBlb3BsZSBhcmUgc3RpbGwgc28gZm9vbGlzaCB0byBkZWNsYXJlIHRoZXNlIHZpc3VhbCBvYnNjZW5pdGllcyAid29ya3Mgb2YgYXJ0IiEgV2lsbCBhbnlvbmUgaGF2ZSBldmVyIHRoZSBkZWNlbmN5IHRvIGV4cG9zZSB0aGUgdHJ1dGggb2YgaXQgYWxsPykAAAAAAAAAQAqXBQgUEBQihwVZZXMsIGJhZCBhY3RpbmcgaXNuJ3Qgb25seSBvbmUgdGhpbmcgdG8gbWVudGlvbi4gQmFkIHNjcmlwdCxub3Qgc28gYmFkIG11c2ljLiBVbmZvcnR1bmF0ZWx5LjxiciAvPjxiciAvPk5pY2UgZ2lybCBhbmQgbmljZSBib3kgd2l0aCBwZXJmZWN0IGJvZGllcyBhbmQgc3VwZXIgdGVldGgganVzdCBpc24ndCBlbm91Z2ggZm9yIG1lIGFuZCBmb3IgeW91IHRvby48YnIgLz48YnIgLz5GaXJzdCB0aGluZyBpbiB0aGUgbW9ybmluZyBhZnRlciBjcmFzaCB0aGV5IGdvIHRvIHN3aW0gdG8gdGhlIHNlYSwgdG8gaGF2ZSBzb21lIGZ1biAhISEgU21pbGluZyAuLi48YnIgLz48YnIgLz5UaGV5IGZpbmQgZXZlcnl0aGluZyBpbiB0aGUgc2VhLiBJIG1lYW4gdGhpbmdzIGxpa2UgZmlzaGluZy1uZXQsIGtuaWZlLCBzY3ViYSBkaXZlIHRoaW5ncywgcm9wZXMsIGJvdHRsZXMsIGh1c2JhbmQgLi4uPGJyIC8+PGJyIC8+V29vZG9vIHN0dWZmICwgYXJlIHlvdSBraWRkaW5nLiBTdHVwaWQuIFRoZXkgYXJlIHNvIGhhcHB5IG9uIHRoZSBpc2xhbmQsIHRoZXkgYXJlIGdvaW5nIHRvIGRpZSwgYW5kIHRoZXkgYXJlIGhhcHB5LiBMb3ZlLCBwZWFjZS4gTG92ZS4gSnVzdCBzdHVwaWQuPGJyIC8+PGJyIC8+VGVycmlibGUsIHNraXAgdGhpcyBvbmUgcGxlYXNlLikAAAAAAAAAQAr4BwgVEBUi6AdZZXAsIHRoaXMgaGFzIGdvdCB0byBiZSBvbmUgb2YgdGhlIGxhbWVzdCBtb3ZpZXMgSSd2ZSBldmVyIHNlZW4uIEl0J3MgdXR0ZXJseSB0YXN0ZWxlc3MsIGhhcyBubyBzdHlsZSB3aGF0c29ldmVyLCB0aGUgc3RvcnkgaXMgc28gdGhpbiB0aGF0IHlvdSBjYW4gd2F0Y2ggdGVsZXZpc2lvbiB0aHJvdWdoIGl0LCBhbmQgdGhlIHdob2xlIGZpbG0gaGFzIHNvIG1hbnkgaG9sZXMgeW91IGNvdWxkIGRyaXZlIGFuIG9pbCB0YW5rZXIgdGhyb3VnaCBpdC48YnIgLz48YnIgLz5TdXJlLCBJIGFwcHJlY2lhdGUgYSBnb29kIEItbW92aWUgYXMgbXVjaCBhcyBtb3N0IG1hbGUgd2hpdGUgaG9tbyBzYXBpZW5zIGRvLiBCdXQgdGhpcyBoYXMgZ290IHRvIGJlIHRoZSB3b3JzdCBJJ3ZlIHNlZW4uIEluIGZhY3QgaXQncyBzbyBCIHRoYXQgaXQgbGFja3MgZXZlcnl0aGluZyB0aGF0IG1ha2VzIGEgQi1tb3ZpZSBpbnRlcmVzdGluZy48YnIgLz48YnIgLz5UaGUgd2hvbGUgbW92aWUgaXMgYmFzZWQgYXJvdW5kIHN1Y2ggY2hhcm1pbmcgYXJ0ZWZhY3RzIGFzIHRoZSBjaGFyYWN0ZXJzIGJlYXRpbmcgdGhlIGNyYXAgb3V0IG9mIGVhY2ggb3RoZXIsIHZhcmlvdXMgYm9kaWx5IGZ1bmN0aW9ucyBhbmQgdGhlIGNvbXBsZXRlIGxhY2sgb2Ygc2FuaXR5IG9mIGFueXRoaW5nIG9uLXNjcmVlbi48YnIgLz48YnIgLz5JdCdzIG5vdCBldmVuIGZ1bm55LiBJbiBmYWN0IGl0J3MgcXVpdGUgdGhlIG9wcG9zaXRlLiBJIGZvdW5kIGl0IGV2ZW4gYm9yaW5nIGF0IHRpbWVzIGR1ZSB0byBpdCdzIGV4dHJlbWUgcHJlZGljdGFiaWxpdHkuPGJyIC8+PGJyIC8+SSBmaW5kIG5vdGhpbmcgZ29vZCB0byBzYXkgYWJvdXQgdGhpcyBtb3ZpZS4gSXQgd2FzIGEgd2FzdGUgb2YgdGltZSB3YXRjaGluZyBpdCwgYW5kIEkgaG9wZSBvdGhlcnMgZG9uJ3QgZG8gdGhlIHNhbWUgbWlzdGFrZS4gSWYgeW91IGFsc28gcGF5IGZvciBpdCB5b3Ugc2hvdWxkIGdldCBhIHNlcmlvdXMgYnJhaW5zY2FuIGRvbmUuKQAAAAAAAABACs4ICBYQFiK+CFdvdy4gSSB0aG91Z2h0LCBFc2tpbW8gTGltb24gd2FzIHRoZSBtb3N0IGF3ZnVsIGFuZCBlbWJhcnJhc3NpbmcgZmlyc3Qtc2V4IG1vdmllIGV2ZXIuIEJ1dCBJIGhhZCBmb3Jnb3R0ZW4gdGhhdCBHZXJtYW55IGFsd2F5cyB0cmllcyB0byBjb21wZXRlLiBJbiB0aGlzIGNhc2UsIHRoZSB3ZWxsLWtub3duIEdlcm1hbiBmaWxtIHByb2R1Y2VyIEJlcm5kIEVpY2hpbmdlciB3YXMgc3VjY2Vzc2Z1bCBpbiBwcm9kdWNpbmcgZXZlbiB3b3JzZSBjcmFwLiBIYXJ0ZSBKdW5ncyBpcyBzdHVwaWQsIG5vdCBiZWxpZXZhYmxlIGFuZCBwcmVkaWN0YWJsZSwgYW5kIGFib3ZlIGFsbDogbm90IGZ1bm55LiBJdCdzIGFsbW9zdCBhIHRyYWdlZHkgdGhhdCBzbyBtYW55IGtpZHMgd2VudCB0byBzZWUgdGhpcyBpbiBHZXJtYW55IChhbmQsIEknbSBhZnJhaWQsIGFsc28gQXVzdHJpYSkuPGJyIC8+PGJyIC8+VG9iaWFzIFNjaGVua2UsIDE5LCBsb29rcyB0b28gbmljZSB0byBoYXZlIG5vIGdpcmxmcmllbmQgYW5kIHRvbyByaXBlIHRvIGJlIDE1LCBhbmQgaGlzIGNoYXJhY3RlciBpcyB0b28gZHVtYiB0byBiZSB0cnVlLiBTY2hlbmtlIHRyaWVzIHJlYWwgaGFyZCB0byBtYWtlIHVzIGJlbGlldmUgdGhhdCBoZSBkb2Vzbid0IGtub3cgQU5ZdGhpbmcgYWJvdXQgc2V4LCBidXQgdGhhdCBkb2Vzbid0IGhlbHAuIEhhcnRlIEp1bmdzIHNlZW1zIHRvIGJlIG1hZGUgYnkgc29tZW9uZSB3aG8gd2F0Y2hlZCBBbCBCdW5keSBhbmQgdG9vayBoaW0gdG9vIHNlcmlvdXNseS48YnIgLz48YnIgLz5UaGUgYmVzdCBhY3RvcnMgaW4gdGhlIG1vdmllIGFyZSBTaXNzaSBQZXJsaW5nZXIgYW5kIFN0ZWZhbiBKw7xyZ2VucyB3aG8gcGxheSBTY2hlbmtlJ3Mgc2VtaS1saWJlcmFsIHBhcmVudHMuIFBlcmxpbmdlciBhbmQgSsO8cmdlbnMgYXJlIHN0YW5kLXVwIGNvbWVkaWFucyB3aG8gYXJlIG5vdCBwYXJ0aWN1bGFybHkgdGFsZW50ZWQgaW4gbW92aWUgYWN0aW5nLiBTdGlsbCwgdGhlaXIgcGVyZm9ybWFuY2VzIGFyZSB0aGUgYGJlc3QnIGFuZCBgZnVubmllc3QnIGluIGNvbXBhcmlzb24uPGJyIC8+PGJyIC8+QSBjb21wbGV0ZSBmYWlsdXJlLikAAAAAAAAAQAryBwgXEBci4gdXb3csIHRoaXMgZmlsbSB3YXMgdGVycmlibGUuIEl0IGlzIGFzIHNpbXBsZSBhcyB0aGF0LiBJdCBpcyBhY3R1YWxseSB0aGUgZmlyc3QgdGltZSB0aGF0IEkgd2Fsa2VkIG91dCBlYXJseSwgYXMgZmFyIGFzIEkgY2FuIHJlbWVtYmVyLiBUaGlzIHR1cm5lZCBvdXQgb2theSwgdGhvdWdoOiBJIGhhZCBhIHZlcnkgbmljZSBjaGF0IHdpdGggdHdvIG1vc3QgY2hhcm1pbmcgZ2lybHMgd2hpbGUgd2UgYWxsIHdhaXRlZCBmb3IgdGhlIHJlc3QgdG8gZmluYWxseSBnaXZlIHVwIG9uIHRoYXQgY3JhcCB0aGV5IGNhbGxlZCBhICJtb3ZpZSIuPGJyIC8+PGJyIC8+V2hlcmUgdG8gc3RhcnQuIEJhZCBhY3RpbmcsIGJhZCBqb2tlcy4gRmFlY2FsIGh1bW91ciwgd2hpY2ggSSBzaW1wbHkgY2Fubm90IHN0YW5kLiBTb3JyeSwgYnV0IHNub3QsIHBlZSBhbmQgc2NhdCBhcmUgKm5vdCogZnVubnkuIFlvdSBoYXZlIHNlZW4gdGhlIHRpdGxlIHBpY3R1cmU/IFRoYXQgc2NlbmUgYWN0dWFsbHkgZHJhZ3Mgb24gZm9yIGFib3V0IDUgbWludXRlcywgd2l0aCB0aGUgdHdvICJoZXJvZXMiIGhpdHRpbmcgYW5kIG11dGlsYXRpbmcgZWFjaCBvdGhlciwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUgaHVtb3JvdXMgYWxsIGJ5IGl0c2VsZi4gSXQgaXMgbm90LjxiciAvPjxiciAvPkFwYXJ0IGZyb20gYm9keSBmbHVpZHMsIHZpb2xlbmNlIGFuZCBjcm9zcy1kcmVzc2luZywgSSBkbyBub3QgcmVtZW1iZXIgbXVjaCBhYm91dCB0aGlzLiBBdCBsZWFzdCBub3QgbXVjaCBnb29kLiBJIHdhcyByZWFsbHksIHJlYWxseSBkaXNhcHBvaW50ZWQgYnkgdGhpcyBwaWVjZSBvZiBnYXJiYWdlLiBPciBsZXQgdXMgYmUgaG9uZXN0IGhlcmU6IGdpdmVuIHRoYXQgSSBhbSBhY3R1YWxseSBhIGJpZyBmYW4gb2YgImJyaXRpc2giIChpLmUuLCBibGFjaykgaHVtb3VyLCBJIHdhcyBhbmdyeS48YnIgLz48YnIgLz5Tbywgd2FudCBteSBhZHZpY2U/IFRocmVlIHdvcmRzOiBkbyBub3Qgd2F0Y2guKQAAAAAAAABACqIICBgQGCKSCFdvdywgaGVyZSBpdCBmaW5hbGx5IGlzOyB0aGUgYWN0aW9uICJtb3ZpZSIgd2l0aG91dCBhY3Rpb24uIEluIGEgcmVhbCBsb3ctYnVkZ2V0IHNldHRpbmcgKGRvbid0IG1pc3MgdGhlIGhpbGFyaW91cyBmbHlpbmcgc2F1Y2VycyBmbHlpbmcgYnkgYSBmZXcgdGltZXMpIG9mIGEgZnV0dXJlIFNlYXR0bGUgd2UgZmluZCBhIG5vLWJyYWluIGhhcmRib2R5IHNlZWtpbmcgdG8gYXZlbmdlIGhlciBjaGlsZGhvb2QuPGJyIC8+PGJyIC8+VGhlcmUgaXMgbm90aGluZyBldmVuIHJlbW90ZWx5IG9yaWdpbmFsIG9yIGludGVyZXN0aW5nIGFib3V0IHRoZSBwbG90IGFuZCB0aGUgYWN0b3JzJyBwZXJmb3JtYW5jZSBpcyBvbmx5IHJpdmFsbGVkIGluIHN0dXBpZGl0eSBieSB0aGUgYXR0ZW1wdHMgdG8gc3RlYWwgZnJvbSBvdGhlciBtb3ZpZXMsIG1haW5seSAiTWF0cml4IiB3aXRob3V0IGhhdmluZyB0aGUgbW9uZXkgdG8gZG8gaXQgcmlnaHQuIFllcywgd2UgZG8gZ2V0IHRvIHNlZSBzb21lIHJ1bm5pbmcgb24gd2FsbHMgYW5kIHNsb3cgbW90aW9uIHNob290LW91dHMgKDQ1IHNlY3MgYXBwcm94LikgYnV0IHRoZXNlIHNjZW5lcyBhcmUgYWJvdXQgYXMgY29vbCBhcyB0aGUgc3R1cGlkIGhhcmRib2R5J3MgYXR0ZW1wdHMgYXQgbWFraW5nIGpva2VzIGFib3V0IG1hbGUgaW5jb21wZXRlbmNlIG5vdyBhbmQgdGhlbi48YnIgLz48YnIgLz5BbmQsIHllcywgd2UgYXJlIGFsc28gc2VydmVkIGEgbnVtYmVyIG9mIGxlYWRzIHRoYXQgbGVhZCBhYnNvbHV0ZWx5IG5vd2hlcmUsIGFzIGlmIHRoZSBzY3JpcHQgd2FzIHRob3VnaHQtb3V0IGJ5IHRoZSBwcmV2aW91c2x5IHVuc2VlbiBjYXN0IHdoaWxlIHNob290aW5nIHRoZSBzY2VuZXMuPGJyIC8+PGJyIC8+QmVsaWV2ZSBtZSwgaXQgaXMgYXMgYmFkIGFzIGl0IHBvc3NpYmx5IGNhbiBnZXQuIEluIGZhY3QsIGl0IGRvZXNuJ3QgZGVzZXJ2ZSB0byBiZSB0YWtlbiBzZXJpb3VzbHksIGJ1dCBwZXJoYXBzIEkgY2FuIG1ha2Ugc29tZSBvZiB5b3Ugbm90IHJlbnQgaXQgYW5kIHNhdmUgeW91ciBtb25leS4pAAAAAAAAAEAK4Q4IGRAZItEOV293LCBJIGNhbid0IGJlbGlldmUgaSdtIHRoZSBmaXJzdCBhbmQgb25seSBvbmUgdG8gcG9zdCBhIGNvbW1lbnQgb24gdGhpcyBncmVhdCBtb3ZpZS48YnIgLz48YnIgLz5BbHRob3VnaCB0aGUgbW92aWUgaXRzZWxmIHNlZW1lZCBpbnRlcmVzdGluZyBlbm91Z2ggdGhlIHJlYWwgdGhpbmcgdGhhdCBhdHRyYWN0ZWQgbWUgdG8gdGhpcyBvbmUgaXMgTWF0dCBsaWxsYXJkLCBncmFudGVkIG1vc3QgcGVvcGxlIHByb2JhYmx5IGVpdGhlciB0aGluayBoZSdzIHRvbyBjYWZmZWluZSBoYXBweSBvciBqdXN0IHBsYWluIHN1Y2tzIGJ1dCB3ZSdyZSBib3RoIHRoZSBzYW1lIGFnZSBhbmQgZnJvbSB0aGUgc2FtZSBnZW5lcmF0aW9uIGFuZCBpJ3ZlIHdhdGNoZWQgdGhpcyBndXkgc28gbWFueSB0aW1lcyB0aGF0IGhlJ3Mgb25lIG9mIG15IGZhdm9yaXRlcyBub3cuIFRoaXMgaXMgb25lIG9mIHRoZSBmZXcgbW92aWVzIHdoZXJlIGhlIGlzIHRoZSBiaWcgc2hvdCBhbmQgbWFpbiBzdGFyIGtpbmQgb2YgbGlrZSBpbiBTTEMgUHVuaywgYW5vdGhlciBncmVhdCBMaWxsYXJkIGZpbG0uPGJyIC8+PGJyIC8+QmFpc2NhbGx5IHRoaXMgaXMgc3Rvcnl3aXNlIHlvdXIgdXN1YWwgaGVpc3QgbW92aWVzIGJ1dCB3aXRoIG1vcmUgdHdpc3RzIHRoYW4gYW55dGhpbmcsIHdoaWNoIHN0YXJ0IHRvIGFtb3VudCB0byBjcmF6aW5lc3MuIEFsc28gdmVyeSBub3RhYmxlIGluIHRoaXMgbW92aWUgaXMgYW5vdGhlciBncmVhdCBhY3RvciBuYW1lZCB2aW5jZW50IEQnb25vZnJpbywgYSB2ZXJ5IHVuZGVyIGFwcHJlY2lhdGVkIHBlcnNvbiBpbiB0aGUgZmlsbSBpbmR1c3RyeS4gVGhlIHdvbWFuIGluIHRoZSBtb3ZpZSBpcyBhIG5ld2NvbWVyIGFuZCBzaGUgaXNuJ3QgdG9vIGJhZCBhbHRob3VnaCB5b3Uga25vdyB0aGV5IGhpcmVkIGhlciBtYWlubHkgZm9yIGhlciBhY2NlbnQgYW5kIHRoZSBudWRlIHNjZW5lID0pPGJyIC8+PGJyIC8+SXQncyBhIGdhbWUgb2YgamFjayB2cyBqaWxsIHZzIGJvYiBhcyBlYWNoIHdhbnQgdG8gcmVhcCB0aGUgcmV3YXJkcyBidXQgc2hhcmUgd2l0aCBubyBvbmUuIFRoZXkgYWxsIHRyeSB0byBnZXQgZWFjaG90aGVyIHRvIGtpbGwgb2ZmIHRoZSBvdGhlciBhbmQgaXQncyBhIHRpbWVib21iIHdhaXRpbmcgdG8gZXhwbG9kZS4gTWF0dCBzaG93cyBoaXMgdHJ1ZSBwcm93ZXNzIGFzIHRoZSBzY2hlbWluZyBKQWNrIHdobyBpbml0aWFsbHkgc3RhcnRzIHRoZSB3aG9sZSBzY2hlbWUuIFZpbmNlbnQgYW5kIHdvbWFuIHBsYXkgYSBjb3VwbGUgb2YgYXJ0IHRoaWV2ZXMgd2hvIGFyZSBpbiBuZWVkIG9mIG1vbmV5IGR1ZSB0byBhIGxhY2sgb2YgYnVzaW5lc3MuIFZpbmNlJ3MgY2hhcmFjdGVyIGlzIGEgYml0IGRlcmFuZ2VkIGFuZCBza2l0eidzIHRocm91Z2hvdXQgdGhlIG1vdmllIGJ1dCB0aGF0IG9ubHkgYWRkIHRvIHRoZSBpbnRlbnNpdHkgb2YgdGhlIGZpbG0uPGJyIC8+PGJyIC8+VGhlIHN1cnByaXNlcyBsZWZ0IGFuZCByaWdodCBhcmUgd2VsbCB3ZWxjb21lZCBhbmQgdGhlIGVuZGluZyBpcyB2ZXJ5IG5vbiBjbGljaGUgYW5kIG1ha2VzIHlvdSBmZWVsIGhhcHB5LCB3ZWxsIG1heWJlIHRoYXQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBlbmRpbmdzIHlvdSBsaWtlLiBUaGlzIG1vdmllIGtlcHQgbWUgdmVyeSBpbnRlcmVzdGVkIGJlc2lkZXMgdGhlIGZhY3QgTWF0dCB3YXMgaW4gaXQsIGl0J3MgYSBncmVhdCBtb3ZpZSBhbmQgaSdkIGhpZ2hseSByZWNvbW1lbmQgaXQgdG8gYW55b25lIHdobyBsaWtlcyBtb3ZpZXMuIENyaXRpYydzIHByb2JhYmx5IHdvbid0IGxpa2UgdGhpcyBtb3ZpZSwgYnV0IHRoZXkgZG9uJ3Qgd2F0Y2ggbW92aWVzIGNhdXNlIHRoZXkgbGlrZSBtb3ZpZXMgYW55d2F5LikAAAAAAAAAQAqaCAgaEBoiighXb3chIFNvIG11Y2ggZnVuISBQcm9iYWJseSBhIGJpdCBtdWNoIGZvciBub3JtYWwgQW1lcmljYW4ga2lkcywgYW5kIHJlYWxseSBpdCdzIGEgc3RyZXRjaCB0byBjYWxsIHRoaXMgYSBraWQncyBmaWxtLCB0aGlzIG1vdmllIHJlbWluZGVkIG1lIGEgcXVpdGUgYSBiaXQgb2YgVGltZSBCYW5kaXRzIC0gdmVyeSBUZXJyeSBHaWxsaWFtIGFsbCB0aGUgd2F5IHRocm91Z2guIFdoaWxlIHRoZSBvdmVyYWxsIG5hcnJhdGl2ZSBpcyBwcmV0dHkgbXVjaCBzdHJhaWdodCBmb3J3YXJkLCBNaWlrZSBzdGlsbCB0aHJvd3MgaW4gQSBMT1Qgb2Ygc3VycmVhbCBhbmQgQnVudWVsLWVzcXVpcmUgbW9tZW50cy4gVGhlIHdob2xlIGZpcnN0IGFjdCB2aW9sZW50bHkganV4dGFwb3NlcyBmcm9tIHNjZW5lIHRvIHNjZW5lIHRoZSBub3JtYWwgZmFtaWx5IGxpZmUgb2YgdGhlIG1haW4ga2lkL2hlcm8sIHdpdGggdGhlIHNwaXJpdCB3b3JsZCBhbmQgdGhlIGV2aWwgdGhhbiBpcyBlbnN1aW5nIHRoZXJlaW4uIEFuZCB3aGlsZSB0aGUgZW5kaW5nIGRvZXMgaGF2ZSBhIGJpdCBvZiBhbiBhbWJpZ3VvdXMgYXNwZWN0IHRoYXQgYXJlIGNvbW1vbiBvZiBNaWlrZSdzIHdvcmssIHRoZSBsYXllcnMgb2YgbWVhbmluZyBhbmQgbWV0YXBob3IsIHBhcnRpY3VsYXJseSB0aGUgYW50aS13YXIgLyBhbnRpLXJldmVuZ2UgbWVzc2FnZSBvZiBodW1hbiBmb2xseSwgaXMgcHJldHR5IGRhbW4gcG9pZ25hbnQuIEFzIG1hbmljIGFuZCBpbWFnaW5hdGl2ZWx5IGZ1biBhcyBvdGhlciBncmVhdCBNaWlrZSBmaWxtcywgb25seSBpbnN0ZWFkIG9mIG92ZXIgdGhlIHRvcCB0b3J0dXJlIGFuZCBnb3JlLCBoZSBnaXZlcyB1cyBhbiBlbmRsZXNzIGFtb3VudCBvZiBtb25zdGVycyBhbmQgeW9rYWkgZnJvbSBKYXBhbmVzZSBmb2xrLWxvcmUgY3JlYXRpdmVseSBjb25jZWl2ZWQgdmlhIENHIGFuZCBwdXBwZXRyeSB3cmFwcGVkIGludG8gYW4gaW1hZ2luYXRpdmUgbXVsdGktZmFjZXRlZCBhZHZlbnR1cmUuIEYnbiByYWQsIGFuZCBvbmUgb2YgTWlpa2UncyBiZXN0ISkAAAAAAAAAQArCAQgbEBsisgFXb3JzdCBob3Jyb3IgZmlsbSBldmVyIGJ1dCBmdW5uaWVzdCBmaWxtIGV2ZXIgcm9sbGVkIGluIG9uZSB5b3UgaGF2ZSBnb3QgdG8gc2VlIHRoaXMgZmlsbSBpdCBpcyBzbyBjaGVhcCBpdCBpcyB1bmJlbGlhdmVibGUgYnV0IHlvdSBoYXZlIHRvIHNlZSBpdCByZWFsbHkhISEhIFAucyB3YXRjaCB0aGUgY2Fycm90KQAAAAAAAABACvEGCBwQHCLhBldpdGNoeSBIaWxkZWdhcmQgS25lZiB0cmFwcyBhIGdyb3VwIG9mIHBlb3BsZSBpbiBhbiBpc29sYXRlZCBob3RlbCBhbmQgcGlja3MgdGhlbSBvZmYgb25lIGJ5IG9uZSBpbiB0d2lzdGVkLCBkaXNndXN0aW5nIHdheXMuIEkgdGhvdWdodCBJJ2Qgc2VlbiBpdCBhbGwgdW50aWwgb25lIHVuZm9ydHVuYXRlIG1hbiBoZXJlIGlzIGNydWNpZmllZCBhbmQgdGhlbiBoYXMgaGlzIGhlYWQgc2V0IG9uIGZpcmUuIEhpbGR5IGlzIHF1aXRlIHRoZSBwcmFua3N0ZXIgdG9vOiBzaGUgdGFrZXMgYSBuYWdnaW5nIGhhcnB5IGFuZCBzZXdzIGhlciBtb3V0aCBzaHV0Li4udGhlbiBoYW5ncyBoZXIgdXBzaWRlIGRvd24gaW4gdGhlIGNoaW1uZXkganVzdCBpbiB0aW1lIGZvciBhIHJvYXJpbmcgZmlyZSEgIldpdGNoZXJ5IiBtYWRlIG1lIHNpY2suIEl0IG1hZGUgbXkgZXllcyBodXJ0LiBJIHdhcyByZWFkeSB0byB3cml0ZSBpdCBvZmYgYXMgdGhlIHdvcnN0IG1vdmllIGV2ZXItZXZlci1ldmVyIG1hZGUgYnkgb3RoZXJ3aXNlIGNvbXBldGVudCBwZW9wbGUuLi51bnRpbCB0aGUgZmluYWxlLiBJIGhhdmUgdG8gYWRtaXQgSSBsb3ZlZCB0aGUgZW5kaW5nLiBJdCBpbnZvbHZlcyBhIGJveSBhbmQgaGlzIHRveSB0YXBlLXJlY29yZGVyIGNvcm5lcmVkIGJ5IExpbmRhIEJsYWlyIGxvb2tpbmcgZmFudGFzdGljYWxseSBwb3NzZXNzZWQuIFRoZSBzY2VuZSBvbmx5IGxhc3RzIGZvciBhYm91dCBhIG1pbnV0ZSBhbmQgdGhlIG1vdmllJ3Mgb3ZlciwgYnV0IHlvdSBrbm93IHRoYXQgb2xkIHNheWluZzogIklmIHlvdSd2ZSBnb3QgYSBncmVhdCBlbmRpbmcsIHBlb3BsZSB3aWxsIGZvcmdpdmUgeW91IGZvciBqdXN0IGFib3V0IGFueXRoaW5nISIpAAAAAAAAAEAKtxsIHRAdIqcbV2l0Y2hjcmFmdC9XaXRjaGVyeS9MYSBDYXNhIDQvIGFuZCB3aGF0ZXZlciBlbHNlIHlvdSB3aXNoIHRvIGNhbGwgaXQuIEhvdyBhYm91dC4uQ3J1ZC48YnIgLz48YnIgLz5BIGdhdGhlcmluZyBvZiBwZW9wbGUgYXQgYSBNYXNzYWNodXNldHRzIGlzbGFuZCByZXNvcnQgYXJlIGJlc2llZ2VkIGJ5IHRoZSBibGFjayBtYWdpYyBwb3dlcnMgb2YgYW4gZXZpbCB3aXRjaCBraWxsaW5nIGVhY2ggaW5kaXZpZHVhbCB1c2luZyBjcnVlbCwgdG9ydHVyb3VzIG1ldGhvZHMuIFBob3RvZ3JhcGhlciBHYXJ5KERhdmlkIEhhc3NlbGhvZmYpaXMgdGFraW5nIHBpY3R1cmVzIGZvciBMaW5kYShDYXRoZXJpbmUgSGlja2xhbmQgd2hvc2Ugdm9pY2UgYW5kIGRlbWVhbm9yIHJlc2VtYmxlIEVFLVlPUiBvZiB0aGUgV2lubmllIHRoZSBQb28gY2FydG9vbiksIGEgdmlyZ2luIHN0dWR5aW5nIHdpdGNoY3JhZnQsIG9uIHRoZSBpc2xhbmQgcmVzb3J0IHdpdGhvdXQgcGVybWlzc2lvbi4gUm9zZSBCcm9va3MoQW5uaWUgUm9zcywgcG9ydHJheWluZyBhbiBpbmNyZWRpYmx5IHJ1ZGUgYml0Y2gpaXMgaW50ZXJlc3RlZCBpbiBwZXJoYXBzIHB1cmNoYXNpbmcgdGhlIHJlc29ydCBhbmQsIGFsb25nIHdpdGggaHVzYmFuZCBGcmVkZGllKFJvYmVydCBDaGFtcGFnbmUsIHdobyBpcyBhbHdheXMgb2dsaW5nIG90aGVyIHdvbWVuIG11Y2ggeW91bmdlciB0aGFuIGhpbSksIHByZWduYW50IGRhdWdodGVyIEphbmUoTGluZGEgQmxhaXIpYW5kIGdyYW5kc29uIFRvbW15KE1pY2hhZWwgTWFuY2hlc3Rlciwgd2hvIGp1c3QgbG9va3MgYm9yZWQgdGhyb3VnaG91dCwgcHJvYmFibHkgd2FudGluZyB0byB3YXRjaCBTZXNhbWUgU3RyZWV0IGluc3RlYWQgb2Ygc3RhcnJpbmcgaW4gdGhpcyBydWJiaXNoKSwgZ28gYnkgYm9hdCB0byB0aGUgcmVzb3J0IGJlaW5nIHRyZWF0ZWQgdG8gYSBsb29rIGF0IHRoZSBwcm9wZXJ0eSBieSBSZWFsdG9yIFRvbnkgR2lvcmRhbm8ncyBzb24gSmVycnkoUmljayBGYXJuc3dvcnRoKSwgb2J2aW91c2x5IGEgcHVwIGluIHRoZSBidXNpbmVzcyBnZXR0aW5nIGhpcyBmZWV0IHdldC4gQWxvbmcgd2l0aCB0aGVzZSBmb2xrcyBpcyBhcmNoaXRlY3QgTGVzbGllKExlc2xpZSBDdW1taW5nLCB3aG9zZSBjaGFyYWN0ZXIgaXMgYSBueW1waG8pd2hvIG1pZ2h0IGhlbHAgUm9zZSByZS1kZXNpZ24gdGhlIHJlc29ydC4gVGhlIGJvYXQncyBjYXB0YWluIGlzIGtpbGxlZCBieSBUaGUgTGFkeSBpbiBCbGFjayhIaWxkZWdhcmQgS25lZiwgd2VhcmluZyBoZXIgbWFrZS11cCBhbmQgbGlwLXN0aWNrIGV4dHJhIHRoaWNrKWFuZCBhIHN0b3JtIGlzIGJyZXdpbmcuIFRoZSBib2F0IGRyaXZlcyBvZmYgYnkgaXRzZWxmKC4uZ3VpZGVkIGJ5IHRoZSBpbnZpc2libGUgcG93ZXIgb2YgVGhlIExhZHkgaW4gQmxhY2ssIEkgZ3Vlc3Mpd2l0aCBldmVyeW9uZSBzdHVjayBpbiB0aGUgZGVjcmVwaXQgcmVzb3J0LCB3aGljaCBpcyBpbiBkaXJlIG5lZWQgb2YgcmVwYWlycy4gTW9zdCBvZiB0aGUgdmljdGltcywgYmVmb3JlIG1lZXRpbmcgdGhlaXIgZ3Jpc2x5IGZhdGVzIGFyZSBjYXJyaWVkIHRocm91Z2ggYSB0eXBlIG9mIHJlZCB3b3JtaG9sZSB3aG9zZSB2b3J0ZXggbGVhZHMgdG8gYW5vdGhlciBkaW1lbnNpb24oLi5wZXJoYXBzIGEgdHlwZSBvZiBoZWxsIG9yIHNvbWV0aGluZyl3aGVyZSB0aGV5IGFyZSB0b3J0dXJlZCBieSB0aGVzZSBmaWVuZHMgZHJlc3NlZCBpbiByYWdnZWR5IGNsb3RoZXMgd2l0aCBhIGNydW1teSB2aXNhZ2UuIE9uZSB2aWN0aW0gaGFzIGhlciBtb3V0aCBzb3duIGJlZm9yZSBiZWluZyBodW5nIHVwc2lkZSBkb3duIGluIGEgY2hpbW5leSwgcm9hc3RlZCBhcyB0aGUgb3RoZXJzIGxpZ2h0IHRoZSBmaXJlcGxhY2UuIE9uZSBwb29yIHNvdWwgaXMgdG9ydHVyZWQgYnkgaGFyc2ggdHdpc3RpbmdzIG9mIHJvcGUgd3JhcHBlZCB0aWdodGx5IGFyb3VuZCBoZXIgZmxlc2ggYmVmb3JlIGJlaW5nIGZvdW5kIGhhbmdpbmcgZnJvbSB0aGUgc25vdXQgb2YgYSBzd29yZGZpc2ggcGVuZXRyYXRpbmcgdGhyb3VnaCBoZXIgbmVjay4gT25lIGZlbGxvdyBpcyBzbG93bHkgc3VmZm9jYXRpbmcgYXMgaGlzIHZlaW5zIGJ1bGdlKC4uYW5kIGJsZWVkKSBhbmQgbmVjaydzIGJsb29kIHZlc3NlbHMgYnVyc3Qgc3F1aXJ0aW5nIGluIEhhc3NlbGhvZmYncyBmYWNlISBPbmUgZmVsbG93IGlzIGNydWNpZmllZCB3aXRoIG5haWxzIGhhbW1lcmVkIGludG8gaGlzIGhhbmRzIGJlZm9yZSBiZWluZyBodW5nIHVwc2lkZSBkb3duIG92ZXIgYW4gb3BlbiBmbGFtZS4gQmxhaXIncyBwcmVnbmFudCB2aWN0aW0gYmVjb21lcyBwb3NzZXNzZWQgd2l0aCBoZXIgaGFpciBzdGFuZGluZyBvbiBlbmQgc3BlYWtpbmcgaW4gYW5vdGhlciB3b21hbidzIHZvaWNlLiBPbmUgaXMgcmFwZWQgYnkgdGhpcyBkZW1vbmljIG1hbiB3aXRoIGEgImRpc2Vhc2VkIiBtb3V0aCBhcyB0aGUgaGVsbGlzaCBob2JvcyBzdGFuZCBuZWFyYnkgZ2xlZWZ1bGx5IGNoZWVyaW5nLiBUaGUgZmlsbSwgZGVzcGl0ZSBpdCdzIGV4Y2Vzc2VzLCBpcyBtb3N0bHkgZHVsbCBmb2RkZXIgZm9yIHRob3NlIHdobyByZWFsbHkgd2lzaCB0byBzZWUgdGhlIGxvd2VzdCBwb2ludCBpbiB0aGUgY2FyZWVycyBvZiBIYXNzZWxob2ZmIGFuZCBCbGFpciwgd2hvIGRlc2VydmUgYmV0dGVyIHRoYW4gdGhpcy4gQWxtb3N0IHVuYmVhcmFibGUgYXQgdGltZXMsIGJ1aWxkaW5nIGxpdHRsZS10by1ubyBzdXNwZW5zZS4gQ2x1bXN5IGV4ZWN1dGlvbiBvZiB0aGUgZGVhdGggc2VxdWVuY2VzIHdoaWNoIGxvb2sgY2hlYXAgYW5kIGxhdWdoYWJsZS4gU3VyZSBzb21lIGdvcmUgaXMgb2theSwgYnV0IG1vc3Qgb2YgdGhlIGZpbG0gc2hvd3MgdmljdGltcyBhZnRlciB0aGV5J3ZlIGJlZW4gcnVuIHRocm91Z2ggdGhlIHJpbmdlci4gV2UgZG8gZ2V0IGEgY2hhbmNlIHRvIHNlZSBwcmVnbmFudCB3b21lbiguLndobyBsb29rIGV4YWN0bHkgbGlrZSBzdHVudG1lbiBpbiBjb3N0dW1lIHdpdGggYmFkIHdpZ3MpIGp1bXBpbmcgb3V0IHRocmVlIHN0b3J5IHdpbmRvd3MuIE9oLCBhbmQgVGhlIExhZHkgaW4gQmxhY2sncyByZWZsZWN0ZWQgZmFjZSBvZnRlbiBwb3BzIHVwIG9uIGluYW5pbWF0ZSBvYmplY3RzIGZvciBjaGFyYWN0ZXJzIHRvIHNlZS4gVG9tbXkgaGFzIGEgbGl0dGxlIFNlc2FtZSBTdHJlZXQgcmVjb3JkZXIgd2hpY2ggdGFwZXMgVGhlIExhZHkgaW4gQmxhY2sncyBtdW1ibyBqdW1ibyBjaGFudHMsIG9idmlvdXNseSB1c2VkIGZvciBsYXRlci4gRm9yIHNvbWUgcmVhc29uLCBUaGUgTGFkeSBpbiBCbGFjayBsaWtlcyB0byB2aXNpdCBsaXR0bGUgVG9tbXkuIEhlJ3Mgbm90IGF0IGFsbCBzY2FyZWQgb2YgaGVyLCBmb3IgVG9tbXkncyBqdXN0IHRvbyBib3JlZCB0byBzaG93IGFueSBleHByZXNzaW9uIG9uIGhpcyBmYWNlLCBtdWNoIGxlc3MgZmVhci4gTmVlZCBJIHNheSBtb3JlPyBUaGlzIG9uZSdzIGEgcmVhbCBzdGlua2VyLiBVZ2guKQAAAAAAAABACrUhCB4QHiKlIVdoeSBkaWQgSSBoYXZlIHRvIGdvIG91dCBhbmQgYnV5ICh5ZXMgYnV5ISkgSkFDSyBGUk9TVCAyOiBSRVZFTkdFIE9GIFRIRSBNVVRBTlQgS0lMTEVSIFNOT1dNQU4/Pz8gTWF5YmUgaXQgd2FzIGEgYnVyc3Qgb2YgdGVtcG9yYXJ5IG1lbnRhbCBkZXJhbmdlbWVudD8gQnV0IEknbSBndWVzc2luZyBpdCdzIGJlY2F1c2UgSSBraW5kIG9mIGVuam95ZWQgdGhlIGZpcnN0IEpBQ0sgRlJPU1QuIEl0IHdhcyBhIHNpbGx5IGJ1dCBmdW5ueSBob3Jyb3ItY29tZWR5IHdoaWNoIGhhZCBzb21lIG9rYXkgZWZmZWN0cyBieSBTY3JlYW1pbmcgTWFkIEdlb3JnZS4gVGhhdCBhbmQgdGhlIGZhY3QgdGhhdCBvbiB0aGUgYmFjay1jb3ZlciBvZiB0aGUgc2VxdWVsIHRoZXJlIHdhcyB0aGlzIG5pY2UgcGljdHVyZSBvZiB0aGlzIGd1eSBpbXBhbGVkIGJ5IHRoaXMgZ2lhbnQgaWNpY2xlIChjb21pbmcgb3V0IG9mIGhpcyBtb3V0aCB3aXRoIGEgbG90IG9mIGJsb29kIGFuZCBhbGwpLiBTbyBJIHRob3VnaHQ6IGlmIGl0J3MgYXMgaWRpb3RpYyBhcyB0aGUgZmlyc3QgYW5kIGhhcyBzb21lIG5pY2Ugc3BsYXR0ZXIvZ29yZSBpbiBpdCwgaXQgc2hvdWxkIGJlIGZ1biwgcmlnaHQ/IFdlbGwsIEkgd2FzIHNvIGRlYWQgd3JvbmchIDxiciAvPjxiciAvPkxldCBtZSBmaXJzdCBzYXkgdGhhdCB0aGUgbW92aWUgZGVzZXJ2ZXMgc29tZSBjcmVkaXQgZm9yIGhhdmluZyBhbiBpbW1lbnNlbHkgaW5zYW5lIGFuZCByZXRhcmRlZCBwbG90LiBJIG1lYW4sIGEgbXV0YW50IGtpbGxlciBzbm93bWFuIG9uIGEgdHJvcGljYWwgaXNsYW5kIHRoYXQgc3Bhd25zIG11dGFudCBraWxsZXIgYmFieSBzbm93YmFsbHMgd2hpY2ggY2FuIG9ubHkgYmUga2lsbGVkIG9yIGhhcm1lZCBieSBiYW5hbmFzPz8/IEFzIG11Y2ggYXMgSSBsb3ZlIHRoZSBwcmVtaXNlLCBJIHJlYWxseSBoYXRlZCB0aGUgbW92aWUuIEZpcnN0IG9mIGFsbDogd2hpbGUgdGhlIGZpcnN0IEpBQ0sgRlJPU1QgbG9va2VkIGxpa2UgYW4gYWN0dWFsIG1vdmllIChzZWVtaW5nbHkgYmVpbmcgc2hvdCBvbiByZWFsIGZpbG0gYW5kIGFsbCksIHRoaXMgc2VxdWVsIGhhcyB0aGUgbG9vayBhbmQgZmVlbCBvZiBhIHRoaXJkLXJhdGUgc29hcC1vcGVyYS4gSXQgaGFzIHRoaXMgd2F5IHRvbyBzbGljayBzaG90LW9uLXZpZGVvIGxvb2suIFRoZSBsaWdodGluZyBpcyBqdXN0IHBsYWluIGF3ZnVsIChicmlnaHQgd2hpdGUgc3BvdHMgZm9yIHRoZSBkYXkgbG9vaywgYW5kIHN0dXBpZCBjb2xvcnMgbGlrZSBibHVlIGFuZCBncmVlbiBhdCBuaWdodCkuIFRoZSBhY3RpbmcuLi4gd2VsbCBkb24ndCBldmVuIGdvIHRoZXJlLiBUaGUgZGlhbG9ndWVzIHJhbmdlIGZyb20gc3RpZmYgdG8gZXh0cmVtZWx5IHNlbmlsZSAodGhhdCBKYW1haWNhbiBtYW4gd2FzIGp1c3QgbW9yb25pYywgc2F5aW5nICJtYW4iIGFmdGVyIGV2ZXJ5IHNlbnRlbmNlKS4gQW5kIHdoZW4gaXQgY29tZXMgdG8gdGhlIHZvaWNlIG9mIHRoZSBraWxsZXIgc25vd21hbiwgYWxsIEkgY291bGQgdGhpbmsgb2Ygd2FzIGEgc2V2ZW50aC1yYXRlIENodWNreSBmcm9tIENISUxEJ1MgUExBWSBzcGV3aW5nIGR1bWIgYW5kIHN1cHBvc2VkbHkgd2l0dHkgb25lLWxpbmVycyBiZWZvcmUgaGUga2lsbHMgc29tZW9uZS48YnIgLz48YnIgLz5UaGUgYmVzdCBqb2tlIHdhcyB3ZXJlIG9uZSBndXkgYXNrcyAiV2h5IGFyZSB5b3UgdGFsa2luZyB0byB5b3VyIHdhdGNoPyIuIEFuZCB0aGUgYmVzdCBzY2VuZSB3YXMgdW5kb3VidGVkbHkgdGhlIG9uZSB3aXRoIHRoYXQgYmVhdXRpZnVsIEFzaWFuIGNoaWNrIHBvcHBpbmcgdXAgb3V0IG9mIG5vd2hlcmUgYW5kIHRha2luZyBhIHN3aW0gaW4gdGhlIHBvb2wgdG90YWxseSBuYWtlZCAodGhhbmsgZ29kIGZvciB0aGF0ISkuIE9oLCB5ZWFoLCBhbmQgdGhhdCBsaXR0bGUgc2NlbmUgb3ZlciB0aGUgZW5kLWNyZWRpdHMgd2l0aCB0aG9zZSB0d28gSmFwYW5lc2UgZHVkZXMgb24gYSBtaW5pYXR1cmUgc2hpcCBiZWluZyBiYWRseSBkdWJiZWQgaGFkIG1lIGxhdWdoaW5nIHRvby4gQnV0IHRoZSB3b3JzdCB0aGluZyBhYm91dCB0aGlzIG1vdmllIHdhczogV2hlcmUgd2FzIHRoZSBnb3JlIGFuZCBzcGxhdHRlciBhY3Rpb24gZXZlcnlvbmUgaXMgdGFsa2luZyBhYm91dD8gVGhlcmUgd2VyZSBwbGVudHkgb2Ygb2NjYXNpb25zIHRvIHNob3cgc29tZSBkZWNlbnQgZ29yeSBraWxsaW5ncy4gQSBsb3Qgb2YgcGVvcGxlIHdlcmUga2lsbGVkIG9mZiBpbiBvcmlnaW5hbCB3YXlzIGhlcmUsIGJ1dCBhbGwgb2ZmLXNjcmVlbi4gTGlrZSBJJ3ZlIHJlYWQgaW4gbWFueSBvdGhlciBjb21tZW50cywgdGhlcmUgd2VyZSBpbmRlZWQgbmljZSBzZXQtdXBzIHRvIGEgaGVhZCBleHBsb3Npb24sIGEgY3J1c2hlZCBib2R5LCBleWVzIGJlaW5nIHBva2VkIG91dCwgdG9uZ3VlIHJpcHBlZCBvdXQsLi4uIGJ1dCBvbiB0aGUgY3J1Y2lhbCBtb21lbnRzIHRoZSBlZGl0b3IgY3V0cyBhd2F5IHRvIHNvbWUgYmxvb2Qgc3BsYXR0ZXJzIG9uIHRoZSBmbG9vciBvciBub3RoaW5nIGF0IGFsbC4gVGhhdCBmcm9udGFsIHNob3Qgb2YgdGhhdCBCcml0aXNoIGd1eSBiZWluZyBpbXBhbGVkIChmcm9tIHRoZSBiYWNrLWNvdmVyIG9mIHRoZSBEVkQpIHdhc24ndCBldmVuIGluIHRoZSBtb3ZpZS4gSSBvbmx5IHNhdyB0aGF0IHBhcnRpY3VsYXIga2lsbGluZyBmaWxtZWQgZnJvbSB0aGUgYmFjayAobWVhbmluZyBJIGRpZG4ndCBzZWUgc2ghdCEpLiBJIHdhcyB3YWl0aW5nIHRocm91Z2hvdXQgdGhlIHdob2xlIG1vdmllIGZvciB0aGF0IHRvIGhhcHBlbiwgYW5kIHRoZW4gSSBnZXQgdG8gc2VlIG5vdGhpbmc/IT8hIFdoYXQgYSBsZXQtZG93biEgQ291bGQgaXQgYmUgdGhhdCBJIHNhdyBhIGN1dCB2ZXJzaW9uIG9mIHRoZSBtb3ZpZT8gVGhhdCB3b3VsZCBiZSBhIHNoYW1lLCAnY2F1c2Ugb25seSBhIGRlY2VudCBhbW91bnQgb2Ygc3BsYXR0ZXItZnVuIGNvdWxkIGhhdmUgc2F2ZWQgdGhpcyBtb3ZpZSBpZiB5b3UgYXNrIG1lLiBTZWVpbmcgYSBsb3Qgb2Yga2lsbGVyIHNub3diYWxscyByZWR1Y2VkIHRvIGJsb29keSBwdWxwIGp1c3QgZGlkbid0IGN1dCBpdCBmb3IgbWUuIFNwZWFraW5nIG9mIHRob3NlIHNub3diYWxsczogdGhleSB3ZXJlIGRvbmUgdmVyeSBwb29ybHkuIFRoZXkgbWFkZSBNVU5DSElFUyBsb29rIGxpa2Ugc3RhdGUtb2YtdGhlLWFydCAnYW5pbWF0cm9uaWNzJy4gQnV0IEkgZ3Vlc3MgdGhhdCB3YXMgdGhlIHdob2xlIHBvaW50IG9mIGl0LiBBdCBzb21lIHBvaW50LCB0aGUgc3BlY2lhbCBlZmZlY3RzIGNyZXcgZXZlbiB0dXJuZWQgdG8gc29tZSBsYXVnaGFibHkgYmFkIENHSS4gQm95LCB5b3UgcmVhbGx5IGhhdmUgdG8gc2VlIGl0IHRvIGJlbGlldmUgaXQuIEJlc3QgaXMgdG8gbm90IHNlZSBpdCwgYWN0dWFsbHksICdjYXVzZSB0aGlzIGZsaWNrIGlzIGp1c3QgdG9vIGJhZCAob2theSwgSSBkaWQgbGF1Z2ggd2l0aCBpdCwgZm9yIGl0IGtlcHQgZ2V0dGluZyB3b3JzZSBhbmQgd29yc2UpLiBKdXN0IHN0aWNrIHdpdGggdGhlIGZpcnN0IEpBQ0sgRlJPU1QgKDE5OTYpIGFuZCB5b3UnbGwgYmUgb2theSAoanVzdCBiYXJlIGluIG1pbmQgdGhhdCBpdCdzIGEgcHJldHR5IHNpbGx5IGhvcnJvci1jb21lZHkgYnV0IGZ1biBpbiBpdCdzIG93biByaWdodCkuPGJyIC8+PGJyIC8+SXQncyBmdW5ueSwgYnV0IHdyaXRlci9kaXJlY3RvciBNaWNoYWVsIENvb25leSBzb21laG93IG11c3QgaGF2ZSByZWFsaXplZCB0aGF0IGhlIHdhcyBhIHByZXR0eSBiYWQgZGlyZWN0b3IgYWZ0ZXIgSkFDSyBGUk9TVCAyLCBhbmQgdGhlbiBmb2N1c2VkIG9uIHdyaXRpbmcuIFR1cm5zIG91dCBoZSB0aGVuIHdyb3RlIHR3byBwcmV0dHkgZ29vZCB0aHJpbGxlciBzY3JlZW5wbGF5cyBmb3IgVEhFIEkgSU5TSURFIChzdGFycmluZyBSeWFuIFBoaWxsaXBwZSkgYW5kIElERU5USVRZIChzdGFycmluZyBKb2huIEN1c2FjaykuIFNvIHRoZSBtYW4gc2VlbXMgdG8gaGF2ZSBzb21lIHRhbGVudCBhZnRlciBhbGwuPGJyIC8+PGJyIC8+Tm93IGl0IHdvdWxkIGJlIGZhciB0b28gZWFzeSB0byBnaXZlIEpBQ0sgRlJPU1QgMiB0aGUgbG93ZXN0IHJhdGluZyBwb3NzaWJsZS4gU28gSSBzYXkgb25lIHBvaW50IGZvciB0aGF0IG5ha2VkIEFzaWFuIGJhYmUgZG9pbmcgdGhlIHNraW5ueSBkaXBwaW5nIGFuZCBvbmUgcG9pbnQgZm9yIHRob3NlIGNvbXBsZXRlbHkgcmV0YXJkZWQgc25vd2JhbGwgYmFiaWVzLiBXYXkgdG8gZ28gTXIuIENvb25leSEpAAAAAAAAAEAKjQUIHxAfIv0EV2hvZXZlciB3cm90ZSB0aGUgc2NyZWVucGxheSBmb3IgdGhpcyBtb3ZpZSBvYnZpb3VzbHkgbmV2ZXIgY29uc3VsdGVkIGFueSBib29rcyBhYm91dCBMdWNpbGxlIEJhbGwsIGVzcGVjaWFsbHkgaGVyIGF1dG9iaW9ncmFwaHkuIEkndmUgbmV2ZXIgc2VlbiBzbyBtYW55IG1pc3Rha2VzIGluIGEgYmlvcGljLCByYW5naW5nIGZyb20gaGVyIGVhcmx5IHllYXJzIGluIENlbG9yb24gYW5kIEphbWVzdG93biB0byBoZXIgbGF0ZXIgeWVhcnMgd2l0aCBEZXNpLiBJIGNvdWxkIHdyaXRlIGEgd2hvbGUgbGlzdCBvZiBmYWN0dWFsIGVycm9ycywgYnV0IGl0IHdvdWxkIGdvIG9uIGZvciBwYWdlcy4gSW4gYWxsLCBJIGJlbGlldmUgdGhhdCBMdWNpbGxlIEJhbGwgaXMgb25lIG9mIHRob3NlIGluaW1pdGFibGUgcGVvcGxlIHdobyBzaW1wbHkgY2Fubm90IGJlIHBvcnRyYXllZCBieSBhbnlvbmUgb3RoZXIgdGhhbiB0aGVtc2VsdmVzLiBJZiBJIHdlcmUgTHVjaWUgQXJuYXogYW5kIERlc2ksIEpyLiwgSSB3b3VsZCBiZSBpcmF0ZSBhdCBob3cgbWFueSBtaXN0YWtlcyB3ZXJlIG1hZGUgaW4gdGhpcyBmaWxtLiBUaGUgZmlsbW1ha2VycyB0cmllZCBoYXJkLCBidXQgdGhlIG1vdmllIHNlZW1zIGF3ZnVsbHkgc2xvcHB5IHRvIG1lLikAAAAAAAAAQAqTBAggECAigwRXaGlsZSB0aGVyZSBhcmVuJ3QgYW55IHRhbGtpbmcgYW5pbWFscywgYmlnIGxhdmlzaCBzb25nIHByb2R1Y3Rpb24gbnVtYmVycywgb3IgdmlsbGlhbnMgd2l0aCBoYWxmIHdoaXRlIC8gaGFsZiBibGFjayBoYWlyIC4uLiBpdCBkb2VzIGhhdmUgMSB0aGluZyAuLi4gcmVhbGlzdGljIHBlb3BsZSBhY3Rpbmcgbm9ybWFsbHkgaW4gYSBzdHJhbmdlIGNpcmN1bXN0YW5jZSwgYW5kIFdhbHQgJiBSb3kgZGlkIGluIHRoZWlyIGVyYXMgd2l0aCB0aGUgc3R1ZGlvLiBJZiB5b3UgdGhvdWdodCB0aGluayAiVGhlIENhc3Rhd2F5cyIgb3IgIlRoZSBJc2xhbmQgQXQgVGhlIFRvcCBPZiBUaGUgV29ybGQiIHdlcmVuJ3QgaWRlbnRpY2FsLCBvciB5b3UgaG9sZCB0aGVtIHRvIGEgaGlnaGVyIGF1dGhvcml0eSB0aGFuIEF0bGFudGlzLCB0aGVuIHlvdXIgaWRlYWxpc20gaXMganVzdCBhcyB3aGFja2VkIGFzIGtlZXBpbmcgeW91ciBraWRzIHVwIHRpbGwgbWlkbmlnaHQgdG8gd2F0Y2ggYSBmcmlnZ2luJyBjYXJ0b29uLikAAAAAAAAAQArhBgghECEi0QZXaGVyZSB0byBCZWdpbiwgSSBsaWtlIHRoZSBzY2FyeSBzbm93LW1vbnN0ZXIgbmFtZWQgSmFjayBGcm9zdC4gVGhlIHdob2xlIGNvbmNlcHQgd29ya3Mgd2VsbCBmb3IgbWUsIHdlIHRob3VnaHQgaGUnZCBiZSBiYWNrIGFuZCBoZSB3YXMuIENoYW5naW5nIHRoZSBsb2NhbCB0byBhIHRyb3BpY2FsIHJlc29ydCB3b3Jrcy4gU2VlaW5nIG9sZCBmcmllbmRzIGFuZCBtZWV0aW5nIG5ldyBjaGFyYWN0ZXJzLiBTY290dCBNYWNEb25hbGQgZG9lcyBhIGdyZWF0IGpvYiBhcyBKYWNrIEZyb3N0LCB5b3UgY2FuIHRlbGwgd2hlbiBhbiBhY3RvciBoYXMgZnVuIHBsYXlpbmcgYSB2aWxsYWluLCB5b3UgY2FuIHNlZSBpdCBvciBpbiB0aGlzIGNhc2UgaGVhciBpdCBpbiB0aGUgcGVyZm9ybWFuY2UuIFl1cCwgSmFjayBGcm9zdCAyIGlzIGEgd2VsY29tZWQgc2VxdWVsIHRoYXQgaXMgYmV0dGVyIHRoZW4gdGhlIGZpcnN0LiBJIGRvIGhhdmUgb25lIGNvbXBsYWludCwgdGhlIGxpdHRsZSBKYWNrcyBvciB0aGUgSmFja2xpbmdzIGFzIEkgY2FsbCB0aGVtLiBUaGV5IGxvb2tlZCBsaWtlIGhhbmQgcHVwcGV0cy4gSSB0aGluayB0aGV5IGNvdWxkIGhhdmUgZG9uZSBhIGJldHRlciBqb2Igd2l0aCB0aGUgSmFja2xpbmdzLCB0aGUgbW91dGggY291bGQgaGF2ZSBvcGVuZWQgd2lkZXIsIGJ1dCB0aGUgQ0dJIHdhcyBnb29kIGFuZCBhcyBhIHdob2xlIHRoZSB3aG9sZSBtb3ZpZSBpcyB3b3J0aCB3YXRjaGluZyBvdmVyIGFuZCBvdmVyIGFnYWluLiBJZiB5b3UgbGlrZWQgSkFDSyBGUk9TVCwgdGhlbiB5b3Ugd2lsbCBsaWtlIHRoaXMgc2VxdWVsLiBObyBxdWVzdGlvbnMgb3IgZGViYXRlLCA5IEJJRyBTVEFSUy4pAAAAAAAAAEAKjAYIIhAiIvwFV2hlbiBteSBvd24gY2hpbGQgaXMgYmVnZ2luZyBtZSB0byBsZWF2ZSB0aGUgb3BlbmluZyBzaG93IG9mIHRoaXMgZmlsbSwgSSBrbm93IGl0IGlzIGJhZC4gSSB3YW50ZWQgdG8gY2xhdyBteSBleWVzIG91dC4gSSB3YW50ZWQgdG8gcmVhY2ggdGhyb3VnaCB0aGUgc2NyZWVuIGFuZCBzbGFwIE1pa2UgTXllcnMgZm9yIHNhY3JpZmljaW5nIHRoZSBsYXN0IHNocmVkIG9mIGRpZ25pdHkgaGUgaGFkLiBUaGlzIGlzIG9uZSBvZiB0aGUgZmV3IGZpbG1zIGluIG15IGxpZmUgSSBoYXZlIHdhdGNoZWQgYW5kIGltbWVkaWF0ZWx5IHdpc2hlZCB0byAidW53YXRjaCIsIGlmIG9ubHkgaXQgd2VyZSBwb3NzaWJsZS4gVGhlIG90aGVyIGZpbG1zIGJlaW5nICdUcm9sbCAyJyBhbmQgJ0Zhc3QgYW5kIEZ1cmlvdXMnLCBib3RoIHdoaWNoIGFyZSBiZXR0ZXIgdGhhbiB0aGlzIGNyYXAgaW4gdGhlIGhhdC48YnIgLz48YnIgLz5JIG1heSBkcmluayBteXNlbGYgdG8gc2xlZXAgdG9uaWdodCBpbiBhIHZhaW4gYXR0ZW1wdCB0byBmb3JnZXQgSSBldmVyIHdpdG5lc3NlZCB0aGlzIGJsYXNwaGVteSBvbiB0aGUgZ29vZCBTZXVzcyBuYW1lLjxiciAvPjxiciAvPlRvIE1pa2UgTXllcnMsIEkgc2F5IHN0aWNrIHdpdGggQXVzdGluIG9yIGV2ZW4gcmVzdXJyZWN0IFdheW5lcyBXb3JsZC4gSnVzdCBiZWNhdXNlIGl0IHdvcmtlZCBmb3IgSmltIENhcnJleSwgZG9lc24ndCBtZWFuIFNldXNzIGlzIGEgc3VjY2VzcyBmb3IgYWxsIENhbmFkaWFucy48YnIgLz48YnIgLz4pAAAAAAAAAEAKrw0IIxAjIp8NV2hlbiBNZWx2aWxsZSdzICJQaWVycmU7IG9yIFRoZSBBbWJpZ3VpdGllcyIgaGl0IGJvb2tzdG9yZXMgaW4gMTg1MiwgaGlzIGZpcnN0IHB1YmxpY2F0aW9uIHNpbmNlICJNb2J5IERpY2siIGEgeWVhciBlYXJsaWVyLCB0aGUgcHVibGljIHJlc3BvbnNlIHdhcyBzaW1pbGFyIHRvIHRoYXQgZm91bmQgYW1vbmcgdGhlIElNREIgcmV2aWV3cyBvZiAiUE9MQSBYIi4gTmV3c3BhcGVycyBldmVuIHB1Ymxpc2hlZCBoZWFkbGluZXMgbGlrZTogIk1lbHZpbGxlIEluc2FuZSEiIHdoaWNoLCBvZiBjb3Vyc2UsIGhlIHdhc24ndC4gQnV0LCB3aGVuIG9uZSBjb21wYXJlcyB0aGUgd3JpdGluZyBzdHlsZXMgZm91bmQgaW4gIk1vYnkgRGljayIgYW5kICJQaWVycmUsIiBvbmUgZmluZHMgaW4gdGhlIGxhdHRlciBhIHNoYXJwIGRlcGFydHVyZSBmcm9tIHRoZSBzaW1wbGUgYW5kIG9mdGVuIGRlY2xhbWF0b3J5IHN0eWxlIGZvdW5kIGluIHRoZSBmb3JtZXIuIENsZWFybHksIGhlIHdhcyBtaW1pY2tpbmcgdGhlIG92ZXJseSBmbG9yaWQgc3R5bGUgb2YgdGhlIG5vdy1mb3Jnb3R0ZW4gVmljdG9yaWFuIFJvbWFuY2VzIHRoYXQgd2VyZSBlYXNpbHkgb3V0c2VsbGluZyBoaXMgaW1tb3J0YWwgIk1vYnkgRGljay4iIEhlIHdhcyBub3QgY29udGVudCwgaG93ZXZlciwgdG8gdHVybiBvdXQgdGhlIHNvcnQgb2YgcHJvZHVjdCB0aGF0IGhpcyBwdWJsaXNoZXJzIHdhbnRlZCwgYW5kIHRoYXQgc3VyZWx5IHdvdWxkIGhhdmUgc29sZC4gSGlzIHZlcnNpb24gb2YgYSBWaWN0b3JpYW4gcm9tYW5jZSB3YXMgYSB0d2lzdGVkLCBjeW5pY2FsIG9uZSwgcGVyaGFwcywgYnV0IGJyaWxsaWFudCBpbiBpdHMgc3ludGhlc2lzLiBUaGUgYWx0ZXJuYXRlIHRpdGxlOiAiVGhlIGFtYmlndWl0aWVzIiBpcyBxdWl0ZSBhcHByb3ByaWF0ZS4gQXMgUGllcnJlIHNlYXJjaGVzIGZvciwgYW5kIHRoaW5rcyBoZSBmaW5kcywgdHJ1dGgsIHdlIGJlY29tZSBtb3JlIGFuZCBtb3JlIHVuY2VydGFpbiB3aGF0IGFuZCB3aG9tIHRvIGJlbGlldmUuIEFzIGhlIHNlYXJjaGVzIGZvciBoYXBwaW5lc3MsIGhlIGJlY29tZXMgbW9yZSBhbmQgbW9yZSBtaXNlcmFibGUuPGJyIC8+PGJyIC8+IlBPTEEgWCIgaXMgYSBmYXNjaW5hdGluZyBhZGFwdGF0aW9uIG9mIHRoaXMgbm92ZWwsIHNldCBpbiBtb2Rlcm4gb3IgbmVhcmx5IG1vZGVybiBGcmFuY2UuIFRob3VnaCwgaW4gc29tZSB3YXlzLCBpdCBsZWF2ZXMgbGl0dGxlIHRvIHRoZSBpbWFnaW5hdGlvbiwgYW5kIHNob3dzIHVzIGdyYXBoaWNhbGx5IHRoZSBpbmNlc3R1b3VzIHJlbGF0aW9ucyB0aGF0IE1lbHZpbGxlIGNvdWxkIG9ubHkgaGludCBhdCwgdGhlIGFtYmlndWl0aWVzIHdoaWNoIG1ha2UgdGhlIG5vdmVsIGFuZCBpdHMgbWVzc2FnZSBzbyBhbGx1cmluZyBhcmUgcGVyZmVjdGx5IGluIHRhY3QuIFRoZSBxdWVzdGlvbnMgaXQgcmFpc2VzIGFyZSBvbmVzIHRoYXQgZmV3IGZpbG1zIGhhdmUgdGhvdWdodCB0byBhc2ssIHlldCB0aGUgYW5zd2VycyBhcmUgbGVmdCB0byB0aGUgdmlld2VyLjxiciAvPjxiciAvPkkgcmVjb21tZW5kIGEgcmVhZGluZyBvZiB0aGUgbm92ZWwsIHdoaWNoIGlzIG11Y2ggc2hvcnRlciB0aGFuICJNb2J5IERpY2ssIiBiZWZvcmUgc2VlaW5nIHRoaXMgbW92aWUuIEkgaG9wZSBtb3JlIHBlb3BsZSBkaXNjb3ZlciB0aGlzIHRhbnRhbGl6aW5nIGZpbG0uKQAAAAAAAABACooCCCQQJCL6AVdoZW4gSSBmaXJzdCBzYXcgdGhpcyBmaWxtIGl0IHdhcyBub3QgYW4gaW1wcmVzc2l2ZSBvbmUuIE5vdyB0aGF0IEkgaGF2ZSBzZWVuIGl0IGFnYWluIHdpdGggc29tZSBmcmllbmRzIG9uIERWRCAoIHRoZXkgaGFkIG5vdCB2aWV3ZWQgaXQgb24gdGhlIHNpbHZlciBzY3JlZW4gKSwgbXkgb3BpbmlvbiByZW1haW5zIHRoZSBzYW1lLiBUaGUgc3ViamVjdCBtYXR0ZXIgaXMgcHVlcmlsZSBhbmQgdGhlIHBlcmZvcm1hbmNlcyBhcmUgd2Vhay4pAAAAAAAAAEAKsg0IJRAlIqINV2hlbiBJIGZpcnN0IHNhdyBhIGdsaW1wc2Ugb2YgdGhpcyBtb3ZpZSwgSSBxdWlja2x5IG5vdGljZWQgdGhlIGFjdHJlc3Mgd2hvIHdhcyBwbGF5aW5nIHRoZSByb2xlIG9mIEx1Y2lsbGUgQmFsbC4gUmFjaGVsIFlvcmsncyBwb3J0cmF5YWwgb2YgTHVjeSBpcyBhYnNvbHV0ZWx5IGF3ZnVsLiBMdWNpbGxlIEJhbGwgd2FzIGFuIGFzdG91bmRpbmcgY29tZWRpYW4gd2l0aCBpbmNyZWRpYmxlIHRhbGVudC4gVG8gdGhpbmsgYWJvdXQgYSBsZWdlbmQgbGlrZSBMdWNpbGxlIEJhbGwgYmVpbmcgcG9ydHJheWVkIHRoZSB3YXkgc2hlIHdhcyBpbiB0aGUgbW92aWUgaXMgaG9ycmVuZG91cy4gSSBjYW5ub3QgYmVsaWV2ZSBvdXQgb2YgYWxsIHRoZSBhY3RyZXNzZXMgaW4gdGhlIHdvcmxkIHdobyBjb3VsZCBwbGF5IGEgbXVjaCBiZXR0ZXIgTHVjeSwgdGhlIHByb2R1Y2VycyBkZWNpZGVkIHRvIGdldCBSYWNoZWwgWW9yay4gU2hlIG1pZ2h0IGJlIGEgZ29vZCBhY3RyZXNzIGluIG90aGVyIHJvbGVzIGJ1dCB0byBwbGF5IHRoZSByb2xlIG9mIEx1Y2lsbGUgQmFsbCBpcyB0b3VnaC4gSXQgaXMgcHJldHR5IGhhcmQgdG8gZmluZCBzb21lb25lIHdobyBjb3VsZCByZXNlbWJsZSBMdWNpbGxlIEJhbGwsIGJ1dCB0aGV5IGNvdWxkIGF0IGxlYXN0IGZpbmQgc29tZW9uZSBhIGJpdCBzaW1pbGFyIGluIGxvb2tzIGFuZCB0YWxlbnQuIElmIHlvdSBub3RpY2VkIFlvcmsncyBwb3J0cmF5YWwgb2YgTHVjeSBpbiBlcGlzb2RlcyBvZiBJIExvdmUgTHVjeSBsaWtlIHRoZSBjaG9jb2xhdGUgZmFjdG9yeSBvciB2aXRhdmV0YXZlZ2FtaW4sIG5vdGhpbmcgaXMgc2ltaWxhciBpbiBhbnkgd2F5LWhlciBleHByZXNzaW9uLCB2b2ljZSwgb3IgbW92ZW1lbnQuPGJyIC8+PGJyIC8+VG8gdG9wIGl0IGFsbCBvZmYsIERhbm55IFBpbm8gcGxheWluZyBEZXNpIEFybmF6IGlzIGhvcnJpYmxlLiBQaW5vIGRvZXMgbm90IHF1YWxpZnkgdG8gcGxheSBhcyBSaWNreS4gSGUncyBzbWFsbCBhbmQgc2tpbm55LCBoaXMgYWNjZW50IGlzIHVucmVhbCwgYW5kIG9uY2UgYWdhaW4sIGhpcyBhY3RpbmcgaXMgdW5iZWxpZXZhYmxlLiBBbHRob3VnaCBGcmVkIGFuZCBFdGhlbCB3ZXJlIG5vdCBzaW1pbGFyIGVpdGhlciwgdGhleSB3ZXJlIG5vdCBhcyBiYWQgYXMgdGhlIGNoYXJhY3RlcnMgb2YgTHVjeSBhbmQgUmlja3kuPGJyIC8+PGJyIC8+T3ZlcmFsbCwgZXh0cmVtZWx5IGhvcnJpYmxlIGNhc3RpbmcgYW5kIHRoZSBzdG9yeSBpcyBiYWRseSB0b2xkLiBJZiBwZW9wbGUgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWFsIGxpZmUgc2l0dWF0aW9uIG9mIEx1Y2lsbGUgQmFsbCwgSSBzdWdnZXN0IHdhdGNoaW5nIEEmRSBCaW9ncmFwaHkgb2YgTHVjeSBhbmQgRGVzaSwgcmVhZCB0aGUgYm9vayBmcm9tIEx1Y2lsbGUgQmFsbCBoZXJzZWxmLCBvciBQQlMnIEFtZXJpY2FuIE1hc3RlcnM6IEZpbmRpbmcgTHVjeS4gSWYgeW91IHdhbnQgdG8gc2VlIGEgZG9jdWRyYW1hLCAiQmVmb3JlIHRoZSBMYXVnaHRlciIgd291bGQgYmUgYSBiZXR0ZXIgY2hvaWNlLiBUaGUgY2FzdGluZyBvZiBMdWNpbGxlIEJhbGwgYW5kIERlc2kgQXJuYXogaW4gIkJlZm9yZSB0aGUgTGF1Z2h0ZXIiIGlzIG11Y2ggYmV0dGVyIGNvbXBhcmVkIHRvIHRoaXMuIEF0IGxlYXN0LCBhIHNpbWlsYXIgYXNwZWN0IGlzIHNob3duIHJhdGhlciB0aGFuIG5vdGhpbmcuKQAAAAAAAABACvwGCCYQJiLsBldoYXQgd2FzIGFuIGV4Y2l0aW5nIGFuZCBmYWlybHkgb3JpZ2luYWwgc2VyaWVzIGJ5IEZveCBoYXMgZGVncmFkZWQgZG93biB0byBtZWFuZGVyaW5nIHRyaXBlLiBEdXJpbmcgdGhlIGZpcnN0IHNlYXNvbiwgRGFyayBBbmdlbCB3YXMgb24gbXkgd2Vla2x5ICJtdXN0IHNlZSIgbGlzdCwgYW5kIG5vdCBqdXN0IGJlY2F1c2Ugb2YgSmVzc2ljYSBBbGJhLjxiciAvPjxiciAvPlVuZm9ydHVuYXRlbHksIHRoZSBwb3dlcnMtdGhhdC1iZSBvdmVyIGF0IEZveCBkZWNpZGVkIHRoYXQgdGhleSBuZWVkZWQgdG8gImZpbmUtdHVuZSIgdGhlIHBsb3RsaW5lLiBXaXRoaW4gMyBlcGlzb2RlcyBvZiB0aGUgc2Vhc29uIG9wZW5lciwgdGhleSBoYWQgdG90YWxseSBsb3N0IG1lIGFzIGEgdmlld2VyIChub3QgZXZlbiB0byBzZWUgSmVzc2ljYSBBbGJhISkuIEkgZm91bmQgdGhlIG5ldyBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBhZGRlZCBpbiB0aGUgc2Vjb25kIHNlYXNvbiB0byBiZSB0b28gcmlkaWN1bG91cyBhbmQgYW1hdGV1cmlzaC4gVGhlIG5ldyBwbG90bGluZXMgd2VyZSBzdHJldGNoaW5nIHRoZSBjb250aW51aXR5IGFuZCBjcmVkaWJpbGl0eSBvZiB0aGUgc2hvdyB0b28gdGhpbi4gT24gb25lIG9mIHRoZSBzZWNvbmQgc2Vhc29uIGVwaXNvZGVzLCB0aGV5IGV2ZW4gaGFkIE1heCBzbGVlcGluZyBhbmQgZHJlYW1pbmcgLSB3aGVyZSB0aGUgZmlyc3Qgc2Vhc29uIHN0YXRlZCBzaGUgYmlvbG9naWNhbGx5IGNvdWxkbid0IHNsZWVwLjxiciAvPjxiciAvPlRoZSBtb3JhbCBvZiB0aGUgc3RvcnkgKHRoZSBvbmUgdGhhdCBIb2xseXdvb2QgbmV2ZXIgZ2V0cyk6IElmIGl0IHdvcmtzLCBkb24ndCBzY3JldyB3aXRoIGl0ITxiciAvPjxiciAvPmF6amF6eikAAAAAAAAAQAqlHQgnECcilR1XaGF0IHRoZSBoZWNrIGlzIHRoaXMgYWJvdXQ/IEtlbGx5IChqZW5uaWZlcikgc2VlbXMgdG8gZHJvcCBhbGwgbW9yYWwgYmVoYXZpb3IgYXMgc29vbiBhcyBzaGUgYXJyaXZlcyB0byB0aGUgaXNsYW5kLiBTaGUgZmluZHMgdGhpcyBKdWFuIFAgKE1hbnVlbCkgZXhpc3RpbmcgYW5kIGV4b3RpYywgdGhvdWdoIHNoZSB3aXRuZXNzZWQgd2hlbiBoZSBzbGFwcGVkIGhpcyBleCBpbiB0aGUgZmFjZSwgd2hpY2ggaGUgYWxzbyBqdXN0aWZ5IGxhdGVyIG9uIGluIHRoZSBtb3ZpZSwgcmlnaHQgb3Igd3Jvbmc/IFRoZXNlIHR3byBndXlzIGFyZSB0aGUgZmlyc3QgdG8gZmluZCBlYWNoIG90aGVyIG9uIHRoZSBpc2xhbmQuIEtlbGx5IGFyZSB0b3RhbGx5IGxvc3QgaW4gZXZlcnkgc2Vuc2UgYW5kIHRoZSBncmVhdCBKdWFuIFAgY2FuIGZpc2ggYW5kIGJ1aWx0IGEgc29tZXdoYXQgaG91c2UuIE1yIGhhbmR5bWFuLiBUaGV5IHNlZW0gdG8gaGF2ZSBhIGdyZWF0IHRpbWUuIFRoZW4gQmlsbHkgWmFuZSAoSmFjaywgS2VsbHlzIGNoYXJhY3RlcnMgaHVzYmFuZCkgc2hvd3MgdXAgYW5kIG9mIGNvdXJzZSwgdHdvIGRheXMgd2l0aG91dCBrbm93aW5nIHdoYXQgaGlzIHdpZmUgaGFzIGJlZW4gZG9pbmcgd2hpdCB0aGlzIGdvcmdlb3VzIEp1YW4gUCwgaGUgaXMgYSBsaXR0bGUgYml0IGplYWxvdXMuIEJpbGx5IFogaXMgdGhlIHN0ZXJlb3R5cGUgcmljaCBndXkgYW5kIG1heWJlIG5vdCB0aGUgbmljZXN0IG1hbiBpbiB0aGUgd29ybGQuIEhlIGRpc2xpa2VzIEp1YW4gUCAoZm9yIGhpdHRpbmcgaGlzIGdpcmxmcmllbmQgYXQgdGhlIHBpZXIsIHdobyBjYW4gYmxhbWUgaGltPyBIZXMgYWxzbyBpcyBhcnJvZ2FudCwgYnV0IGhlIHBhaWQgbG9hZHMgb2YgbW9uZXkgdG8gcmVudCB0aGF0IGJvYXQgYW5kIEp1YW4gUCB3aG8gaXMgdGhlIHdhaXRlci9ldmVyeXRoaW5nIGNhbnQgZXZlbiBmZXRjaCBoaW0gYSBiZWVyIHdoaXQgaW4gMjAgbWluLiBXb3VsZG4ndCB5b3UgYmUgdXBzZXQ/IFlldCBCaWxseSBpcyBwcm9iYWJseSB0aGUgZ3V5IHlvdSB3YW50IHRvIHB1bmNoIGluIHRoZSBmYWNlIGlmIHlvdSBtZWV0IGhpbS4gQnV0IGF0IHRoZSBzYW1lIHRpbWUsIGhlIGlzLCBub3QgdG8gYmUgYmxhbWVkIGZvciwgc3VzcGljaW91cyBhYm91dCB0aGUgc2N1YmEgZ29nZ2xlcyBNYW51ZWwgaGFzLiBLZWxseSBhbmQgQmlsbHkganVzdCBsb3N0IHNvbWUgZGVhciBmcmllbmRzISBIb3cgY29udmVuaWVudCBoZSBqdXN0IGhhcHBlbnMgdG8gaGF2ZSB0aGVtLCBubyBtYXR0ZXIgd2hhdCEpLiBIb3dldmVyLCBmb3Igc29tZSBzdHJhbmdlIHJlYXNvbiBLZWxseSBsaWtlcyB0aGlzIGdpcmwgaGl0dGluZyBNYW51ZWwgYW5kIHN0YXJ0cyB0byBoYXRlIEJpbGx5IGZvciBiZWluZyBqZWFsb3VzLiBPSywgQmlsbHkgaXMgb3ZlcnJlYWN0aW5nLCB0aGF0cyBmb3Igc3VyZSwgYnV0IEtlbGx5IGlzbid0IGRvaW5nIG11Y2ggdG8gY29udmluY2UgaGltIGVpdGhlci4gU2hlIHNwZW5kcyBtb3JlIHRpbWUgd2l0aCBKdWFuIFAgYW5kIGV2ZW4gd2FudHMgaGltIHRvIHNsZWVwIHdpdGggdGhlbSBzaW5jZSBoZXMgYmVlbiBzbyBuaWNlIChhbmQgZXZlbiB0aG91Z2ggTWFudWVsIHllbGxlZCBhdCBoZXIgYW5kIGNhbGxpbmcgaGVyIHRoaW5ncyBmb3IgYXNraW5nIGhpbSBzb21lIGludGltYXRlIHF1ZXN0aW9ucy4gQnV0IEtlbGx5IGlzIFNPIGZvcmdpdmluZy4uLikuIFllYWggcmlnaHQuIEFuZCB0aGVuIHNoZSBzdGFydHMgdG8gaGF2ZSBzZXggd2l0aCB0aGlzIEp1YW4gUC4gSXQgc2hvdWxkIGJlIHNhaWQgdGhhdCBLZWxseSBhbmQgQmlsbHkgc2VlbXMgdG8gaGF2ZSBhIHdvcmtpbmcgcmVsYXRpb25zaGlwIGJlZm9yZSB0aGlzIGlzbGFuZCBpbmNpZGVudCwgYXQgbGVhc3QsIHRoZXkgaGF2ZSBpbnRpbWF0ZSBzZXggb24gdGhlIGJvYXQgYW5kIHRhbGtzIGxpa2UgcGVvcGxlIGRvIHdoZW4gdGhleSBsaWtlIGVhY2ggb3RoZXIuIE5vdywgeW91IGNhbiB0aGluayB0aGF0IHRoaXMgc2NlbmFyaW8gaXMgcG9zc2libGUuIEJ1dCBmb3IgcmVhbCwgaXMgaXQ/IEFyZSB5b3UgY2hlYXRpbmcgeW91ciBodXNiYW5kIGFmdGVyIHR3byBkYXlzIG9uIGEgY29jb251dCBpc2xhbmQganVzdCBiZWNhdXNlIGhlcyBqZWFsb3VzIGFuZCBhY3RzIGxpa2UgYSBkcnVuayBpbiB0aGUgYmFyPyAoaSB3b3VsZG4ndCBkaXNhZ3JlZSBpZiB0aGVyZSByZWxhdGlvbnNoaXAgd2FzIHJlYWxseSBiYWQgYnV0IHRoZSBkaXJlY3RvciBkb2Vzbid0IGdpdmUgbXVjaCBoaW50cyBpZiB0aGF0cyB0aGUgY2FzZSkuIEZvciBDaHJpc3Qgc2FrZSwgSnVhbiBQIGhhc24ndCByZWFsbHkgc2hvd24gaGltc2VsZiBiZWluZyBhIGdvb2QgcGVyc29uLiBDYXRjaGluZyBzb21lIGZpc2ggYW5kIGJ1aWx0IGEgd29vZCBob3VzZSB0byBnZXQgaW50byBzb21lb25lcyBwYW50aWVzLCBpcyB0aGF0IHNob3dpbmcgYSBnb29kIHNpZGU/IE5vdCB0cnlpbmcgdG8gYmVmcmllbmQgS2VsbHlzIGh1c2JhbmQgaW4gYW55d2F5ICh3aGljaCB3b3VsZCBiZSB2ZXJ5IHNpbXBsZSBieSBsZXR0aW5nIHRoZW0gYmUgYWxvbmUgbW9zdCBvZiB0aGUgaXNsYW5kLXRpbWUsIHNpbXBseSBiZSByZXNwZWN0KSBIZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlaXIgcmVsYXRpb25zaGlwIChhbmQgS2VsbHkgY2FudCBmaWd1cmUgdGhhdCBvbmUgb3V0KSwgaGUganVzdCB3YW50IHRvIGhhdmUgc2V4IHdpdGggS2VsbHkuIEtlbGx5cyBjaGFyYWN0ZXIgaXMganVzdCBub3QgdHJ1c3R3b3J0aHkgKGlmIHNoZSB3YXMgc3RyYW5kZWQgd2l0aCBCaWxseSBhbmQgYW5vdGhlciBhdHRyYWN0aXZlIGdpcmwsIHdvdWxkbid0IHNoZSBiZSB1cHNldCBvciB3aGF0PyEpLiBPciBtYXliZSBzaGUgaXM/IEJpbGx5IFphbmUgcGxheXMgYSBub3QgdmVyeSBuaWNlIHBlcnNvbiwgYW5kIEp1YW4gUCBpc24ndCBhY3R1YWxseSBtdWNoIGJldHRlciBpZiB5b3UgcmVhbGx5IHRoaW5rIGFib3V0IGl0LiBBbmQgcG9vciBLZWxseSBpcyBzbyBjb25mdXNlZCwgYW5kIGJlbGlldmVzIGhhdmluZyBzZXggd2l0aCBKdWFuIFAgd2lsbCBzb2x2ZSBldmVyeXRoaW5nIGJlY2F1c2UgaGVyIGh1c2JhbmQgaXMgc28gc3RyYW5nZSBhbmQgc28gYWdncmVzc2l2ZSB0b3dhcmRzIHBvb3IgSnVhbiBQPyBTby4uLiBmb3IgYWxsIG9mIHlvdSB3aG8gcmVhZHMgdGhpcy4uLiBXaGF0IGRvIHlvdSB0aGluayBhYm91dCBpdD8gSWYgeW91IHdoZXJlIHRoZSBLZWxseSBjaGFyYWN0ZXIsIHdvdWxkIHlvdSBjb25zaWRlciBjaGVhdGluZyBvbiB5b3VyIGh1c2JhbmQsIGtub3dpbmcgb25lIGRheSB5b3UnbGwgYmUgYmFjayBpbiByZWFsIGxpZmUsIGFuZCBhbGwgb2YgYSBzdWRkZW4gQmlsbHlzIG1heWJlIG5vdCB0aGF0IGhvcnJpYmxlIHBlcnNvbiBhZnRlciBhbGwuIEhlcyBqdXN0IHRvbyBqZWFsb3VzLiBBbmQgaWYgeW91IHdoZXJlIEJpbGx5cyBjaGFyYWN0ZXIsIHdoYXQgZG8geW91IHNheSwgaXMgaGUgdG90YWxseSB3cm9uZyBpbiBoaXMgYmVoYXZpb3I/IEFuZCBKdWFuIFAgY2hhcmFjdGVyIHdoYXQgZG8geW91IGd1eXMgcmVhbGx5IHRoaW5rIG9mIGhpbS4gT25lIHRoaW5nIGlzIGZvciBzdXJlLiBNYW51ZWxzIGV4aXN0ISBQcy4uLiBUaGUgdm9vZG9vIHRoaW5nIGlzIHNvIHRvdGFsbHkgd3JvbmcgaGVyZSEgV2hhdCB0aGUgaGVjayB3YXMgdGhhdCBhYm91dD8hIFNlcmlvdXNseSEgQW55b25lIHRlbGwgbWU/KQAAAAAAAABACpkFCCgQKCKJBVdoYXQgY2FuIHlvdSBzYXkgYWJvdXQgYSBncmFpbnksIHBvb3JseSBmaWxtZWQgMTZtbSBzdGFnIGZpbG0sIHdoZXJlIHRoZSBiZXN0IGFuZCBtb3N0IGF0dHJhY3RpdmUgcGVyZm9ybWVyIGlzIGEgR2VybWFuIFNoZXBoZXJkPyBOb3RoaW5nIHRoYXQgd291bGQgYmUgcG9zaXRpdmUuIEF2b2lkIHRoaXMgdHJhdmVzdHkgYXQgYWxsIGNvc3RzLiBJbiBhbnkgY2FzZSwgaXQgd291bGQgYmUgZGlmZmljdWx0IHRvIGZpbmQsIHNpbmNlIGJlc3RpYWxpdHkgcmVtYWlucyBhIHRhYm9vIGFuZCBpbGxlZ2FsIHN1YmplY3QgaW4gdGhlIFVTQS4gSSBzdHJvbmdseSBzdWdnZXN0IElNRGIgdG8gcmUtdmlzaXQgdGhlaXIgd2VpZ2h0aW5nIGZvcm11bGEgZm9yIGVzdGFibGlzaGluZyByYXRpbmdzLCBzaW5jZSBhbiA4LjggcmF0aW5nIGZvciB0aGlzIHBpZWNlIG9mIGZlY2FsIG1hdHRlciBpcyBhYnN1cmQhIEkgYW0sIGJ5IG5vIG1lYW5zLCBhIHBydWRlIGFuZCBoYXZlIHNwZW50IG1hbnkgaG91cnMgZW5qb3lpbmcgdGhlIGNsYXNzaWMgcG9ybiBtb3ZpZXMgb2YgdGhlIDcwJ3MgJiA4MCdzOyBidXQgdGhpcyBpcyBpbmZlcmlvciBwcm9kdWN0IGV2ZW4gYnkgdGhlIGxvb3NlciBzdGFuZGFyZHMgb2YgdGhlICh0aGVuIGlsbGVnYWwpIHN0YWcgbG9vcC4pAAAAAAAAAEAKhgIIKRApIvYBV2hhdCBjYW4gSSBzYXk/IEFuIGV4Y2VsbGVudCBlbmQgdG8gYW4gZXhjZWxsZW50IHNlcmllcyEgSXQgbmV2ZXIgcXVpdGUgZ290IHRoZSBleHBvc3VyZSBpdCBkZXNlcnZlZCBpbiBBc2lhLCBidXQgYnkgZmFyLCB0aGUgYmVzdCBjb3Agc2hvdyB3aXRoIHRoZSBiZXN0IHdyaXRpbmcgYW5kIHRoZSBiZXN0IGNhc3Qgb24gdGVsZXZpc29uLiBFVkVSISBUaGUgZW5kIG9mIGEgZ3JlYXQgZXJhLiBTb3JyeSB0byBzZWUgeW91IGdvLi4uKQAAAAAAAABACssGCCoQKiK7BldoYXQgYSBzaG9ja2VyLiBGb3Igc3RhcnRlcnMsIEkgY291bGRuJ3Qgc3RhbmQgdGhlIGNvbnN0YW50IHNjcmVhbWluZyBhbmQgbm9pc3kgcGFuaWNraW5nIGFsbCB0aGUgdGltZS4gSXQgZGlkbid0IG1ha2UgbWUgc2NhcmVkLCBob3JyaWZpZWQsIG9yIG1ha2UgbWUgc3ltcGF0aGV0aWMgdG93YXJkcyB0aGUgY2hhcmFjdGVyczsgaXQgd2FzIHNpbXBseSBhbm5veWluZy4gVGhlIGplcmt5IGNhbWVyYSBtb3ZlbWVudHMgd2VyZSBhbHNvIGFubm95aW5nLiBUaGUgcGxvdCB3YXMgdGhlIHNhbWUgYXMgcHJldHR5IG11Y2ggZXZlcnkgb3RoZXIgY2hlYXAgaG9ycm9yLiBUaGVyZSB3YXMgYSBmZXcgcGF0aGV0aWMgYXR0ZW1wdHMgdG8gZ2l2ZSB0aGUgY2hhcmFjdGVycyBzb21lIGRlcHRoLCBidXQgaXQgZGlkbid0IHJlYWxseSB3b3JrIGludG8gdGhlIHJlc3Qgb2YgdGhlIHBsb3QuIEFuZCB0aGVuIHRoZXJlJ3MgdGhlIGVuZGluZy4gSSdtIHN0aWxsIG5vdCByZWFsbHkgc3VyZSB3aGF0IHRvIG1ha2Ugb2YgaXQuIEkgZ3Vlc3MgaXQgd2FzIHN1cHBvc2VkIHRvIGJlIGNsZXZlciB0d2lzdCwgdGhlbiBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHNpdHVhdGlvbiwgYnV0IGl0IHdhcyBqdXN0IHN0dXBpZC48YnIgLz48YnIgLz5UaGUgY2FzZSBoYWQgYSBjb3VwbGUgb2YgdGhvc2UgbGl0dGxlIGF3YXJkIHdpbm5lci9ub21pbmF0aW9ucyBzeW1ib2xzIG9uIGl0LCBzbyBJIGZpZ3VyZWQgaXQgY291bGRuJ3QgYmUgdG9vIGJhZC4gSSB3YXMgd3JvbmcuIElmIHlvdSBzZWUgaXQsIHlvdSBzaG91bGQgcHJvYmFibHkganVzdCBsZWF2ZSBpdCBvbiB0aGUgc2hlbGYuKQAAAAAAAABACr4GCCsQKyKuBldoYXQgYSBjbHVua2VyITxiciAvPjxiciAvPkl0IE1VU1QgaGF2ZSBiZWVuIG1hZGUgZm9yIFRWIG9yIENhYmxlLjxiciAvPjxiciAvPkxvb2s6IGZvcmdldCB0aGUgc2NyZWVucGxheSAtIGZvcmdldCB0aGUgYnVuY2ggb2YgZm9yZ2V0dGFibGUgYWN0b3JzLiBFeGN1c2UgbWU/IENvbnRpbnVpdHk/IFRoZSBOU0EvTklBL3doYXRldmVyIG9yIHdob2V2ZXIgaGUgaXMgKGFuIGFnZW50KSB0YWtlcy1vZmYgaW4gYW4gRjE2IC0gaXMgc2hvd24gaW4gYW4gRjE4IGNodWNraW5nIGhpcyBndXRzIHVwIGFuZCwgbGF0ZXIsIHRoZSBhaXJjcmFmdCBzaG93biB0YXhpaW5nIGlzIGFuIEY0IFBoYW50b20hIE9vb2gsIHdpc2ggdGhhdCBJIGNvdWxkIGJlIHNvIGNhdmFsaWVyLjxiciAvPjxiciAvPkFwYXJ0IGZyb20gdGhlIG1hbGUgYWN0b3JzKCE/KSBUaGUgd29tZW4gYXJlIFdBU1BTOiBibHVlLWV5ZWQgYW5kIGxvbmctbGVnZ2VkIGFuZCwgZXZlbnR1YWxseSwgZ2V0IHRvIGNyeSBhYm91dCB0aGUgaGVyb2VzIHdobyBzYXZlIHRoZW0uIEV2ZW4gd2hlbiBhIHNvbGlkIHdlbGQgY291bGQgc2F2ZSBtb3N0IG9mIHRoZSBjb3Ntby0gYXN0cm8tbmF1dHMsIHRoZSBibG9uZCBkcm9wcyB0aGUgd2VsZGluZyB0b29sLiBEdWghPGJyIC8+PGJyIC8+QXMgYW4gU0YgbW92aWUgb25lIG91dCBvZiB0ZW4uIEFzIGEgbW92aWUgcGVyIHNlOiAxLzIgKHRoYXQncyBhIGhhbGYgcG9pbnQpLiBUaGV5IHNob3VsZCBoYXZlIGRpdGNoZWQgdGhlIHNwYWNlIHN0YXRpb24gYW5kIGhlYWRlZCBmb3IgTWFycy48YnIgLz48YnIgLz5NYWpvciByYXNwYmVycmllcy4pAAAAAAAAAEAKmAcILBAsIogHV2VsbCwgdGhlIGFydHlmYXJ0eXJhdGkgb2YgQ2FubmVzIG1heSBoYXZlIGxpa2VkIHRoaXMgZmlsbSBidXQgbm90IG1lIEkgYW0gYWZyYWlkLiBJZiB5b3UgbGlrZSB0aGUgdHlwZSBvZiBmaWxtIHdoZXJlIHNob3RzIGxpbmdlciBmb3Igc28gbG9uZyB0aGF0IHlvdSB3b25kZXIgd2hldGhlciB0aGUgYWN0b3IgaGFzIGZhbGxlbiBhc2xlZXAgb3IgdGhlIGNhbWVyYW1hbiBnb25lIGZvciBsdW5jaCB0aGVuIGl0IG1heSBiZSBmb3IgeW91LiBBIGxhcmdlIHBhcnQgb2YgaXQgaXMgbGlrZSB0aGlzIHdpdGggc2hvcnQgc29qb3VybnMgaW50byB0aGUgcmVhbG0gb2YgdW5wbGVhc2FudG5lc3MuIEkgZGlkIG5vdCBmaW5kIGl0IHNob2NraW5nIG5vciBkaXN0dXJiaW5nIGFzIHNvbWUgb3RoZXIgcmV2aWV3ZXJzIGhhdmUgLSBzaW1wbHkgYSBsaXR0bGUgZGlzdGFzdGVmdWwgYW5kIHBvaW50bGVzcy4gVGhlIG9ubHkgcmVhc29uIEkgZGlkIG5vdCBnaXZlIHRoaXMgb25lIHN0YXIgaXMgdGhhdCB0aGUgYWN0aW5nIGlzIGNvbW1lbmRhYmxlIGFucyB0aGUgZmlsbSBpcyBmYWlybHkgd2VsbCBzaG90LiBUaGUgcGxvdCwgaG93ZXZlciwgaGFzIGxpdHRsZSB0byByZWNvbW1lbmQuIEEgbGFyZ2UgcGFydCBvZiB0aGUgZmlsbSBqdXN0IHNob3dzIGEgZ3J1bXB5IHdvbWFuIHRlYWNoaW5nIG9yIGxpc3RlbmluZyB0byBwaWFubywgd2hpY2ggbWlnaHQgYXBwZWFsIHRvIHNvbWUgcGVvcGxlLiBCdXQgbGVzdCB5b3UgdGhpbmsgdGhpcyBpcyBoYXJtbGVzcyBlbm91Z2ggYmUgcHJlcGFyZWQgZm9yIHNvbWUgc25hdGNoZXMgb2YgcG9ybm9ncmFwaHkgYW5kIHNleHVhbCB2aW9sZW5jZSBqdXN0IHRvIHdha2UgeW91IHVwIHdpdGggYSBiYWQgdGFzdGUgaW4geW91ciBtb3V0aC4gTm90IHJlY29tbWVuZGVkLikAAAAAAAAAQAr2BggtEC0i5gZXZWxsIHRoZSBwcmV2aWV3cyBsb29rZWQgZnVubnkgYW5kIEkgdXN1YWxseSBkb24ndCBnbyB0byBtb3ZpZXMgb24gb3BlbmluZyBuaWdodCBlc3BlY2lhbGx5IHdpdGggbXkga2lkcyBiZWNhdXNlIC4uLi4uLndlbGwgeW91IG5ldmVyIGtub3cuIEhlcmUgaXMgYSBtb3ZpZSB0aGF0IGRvZXNuJ3QgYXBwZWFsIGVpdGhlciB0byBjaGlsZHJlbiBvciBhZHVsdHMgYXMgdGhlIGpva2VzIGFyZSB0b28gcGVydmVyc2UgZm9yIGNoaWxkcmVuIGFuZCBmYWxscyBjb21wbGV0ZWx5IGZsYXQgZm9yIGVudGVydGFpbm1lbnQgcHVycG9zZXMgZm9yIGFkdWx0cy4gSSB3YXMgYWN0dWFsbHkgZW1iYXJyYXNzZWQgdG8gYmUgd2l0aCBteSA5IGFuZCA2IHllYXIgb2xkIGFuZCBoYXZpbmcgdG8gZXhwbGFpbiB0byBteSA2IHllYXIgb2xkIHdoYXQgUyBIICogVCBzcGVsbHMuIEVzc2VudGlhbGx5IHdoYXQgaGFwcGVucyBoZXJlIGlzIGEgdG90YWwgdHdpc3Rpbmcgb2YgRHIuIFNldXNzJ3MgY2xhc3NpYy4gSXQgYWRkcyBhbiBldmlsIGFuZCBsYXp5IG5laWdoYm9yIHdobyB3YW50cyB0byBtYXJyeSB0aGUgY2hpbGRyZW4ncyBtb3RoZXIgZm9yIGhlciBtb25leS4gSWYgdGhhdCB3YXMgYSBzdWJwbG90LCB0aGVuIG1heWJlIHRoYXQgd291bGQgaGF2ZSBiZWVuIGZpbmUgYnV0IGl0IGVuZHMgdXAgYmVpbmcgdGhlIG1ham9yIHBsb3QgYXJvdW5kIHRoZSB3aG9sZSBtb3ZpZSBhbmQgInRoZSBjYXQiIHBsYXlzIG1vcmUgb2YgYSBzdWJwbG90IHJvbGUgaW4gZXhwb3NpbmcgdGhlIG5laWdoYm9yIHRvIHRoZSBtb20gZm9yIHdobyBoZSByZWFsbHkgaXMuIFRha2UgbXkgYWR2aWNlIGFuZCByZWFkIHRoZSBib29rIGFuZCBwYXNzIG9uIHRoZSBtb3ZpZS4pAAAAAAAAAEAK2wkILhAuIssJV2VsbCBJIGd1ZXNzIEkga25vdyB0aGUgYW5zd2VyIHRvIHRoYXQgcXVlc3Rpb24uIEZvciB0aGUgTU9ORVkhIFdlIGhhdmUgYmVlbiBzbyBib21iYXJkZWQgd2l0aCBDYXQgSW4gVGhlIEhhdCBhZHZlcnRpc2luZyBhbmQgbWVyY2hhbmRpc2UgdGhhdCB3ZSBhbG1vc3QgYmVsaWV2ZSB0aGVyZSBoYXMgdG8gYmUgc29tZXRoaW5nIGdvb2QgYWJvdXQgdGhpcyBtb3ZpZS4gSSBhZG1pdCwgSSB0aG91Z2h0IHRoZSB0cmFpbGVycyBsb29rZWQgYmFkLCBidXQgSSBzdGlsbCBoYWQgdG8gZ2l2ZSBpdCBhIGNoYW5jZS4gV2VsbCBJIHNob3VsZCBoYXZlIHdlbnQgd2l0aCBteSBpbnN0aW5jdHMuIEl0IHdhcyBhIGNvbXBsZXRlIHBpZWNlIEhvbGx5d29vZCB0cmFzaC4gT25jZSBhZ2FpbiBwcm92aW5nIHRoYXQgdGhlIGF2ZXJhZ2UgcGVyc29uIGNhbiBiZSBwcm9ncmFtZWQgaW50byBiZWxpZXZpbmcgYW55dGhpbmcgdGhleSBzYXkgaXMgZ29vZCwgbXVzdCBiZSBnb29kLiBBc2lkZSBmcm9tIHRoZSBpbnN1bHRpbmcgZmFjdCB0aGF0IHRoZSBmaWxtIGlzIG9ubHkgYWJvdXQgODAgbWludXRlcyBsb25nLCBpdCBvYnZpb3VzbHkgc3RhcnRlZCB3aXRoIGEgbW90aCBlYXRlbiBzY3JpcHQuIEl0J3MgY2hvY2sgZnVsbCBvZiBmYWlsZWQgYXR0ZW1wdHMgYXQgc2Vuc2VsZXNzIGh1bW9yLCBhbmQgYXdmdWwgcGFzdGVsIHNjZW5lcmllcy4gSXQganVtcHMgYWxsIG92ZXIgdGhlIHVuaXZlcnNlIHdpdGggbm8gZGVzdGluYXRpb24gbm9yIGRpcmVjdGlvbi4gVGhpcyBpcyB0aGVuIGNvbXBvdW5kZWQgd2l0aCwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnllcyBJJ2xsIHNheSBpdCwgQkFEIEFDVElORyEgSSBjb3VsZG4ndCBoZWxwIGJ1dCBmZWVsIGxpa2UgSSB3YXMgd2F0Y2hpbmcgIkNvZmZlZSBUYWxrIiBvbiBTTkwgZXZlcnkgdGltZSBNaWtlIE15ZXJzIG9wZW5lZCBoaXMgbW91dGguIFdhcyB0aGUgQ2F0IGludGVuZGVkIHRvIGJlIGEgbWlkZGxlIGFnZWQgSmV3aXNoIHdvbWFuPyBTcGVuY2VyIEJyZXNsaW4gYW5kIERha290YSBGYW5uaW5nIHdlcmUgbm8gcHJpemUgZWl0aGVyLCBidXQgTXIuIE15ZXJzIHNob3VsZCBkaXNhcHBlYXIgdW5kZXIgYSByb2NrIHNvbWV3aGVyZSB1bnRpbCBoZSdzIHJlYWR5IHRvIG1ha2UgYW5vdGhlciBBdXN0aW4gUG93ZXJzIG1vdmllLiBGLSwgbm8gc3RhcnMsIDAgb24gYSBzY2FsZSBvZiAxLTEwLiBTYXZlIHlvdXIgbW9uZXkhKQAAAAAAAABACvUKCC8QLyLlCldlIHdlcmUgZXhjaXRlZCB0byByZW50IHRoaXMgb25lIGFmdGVyIHJlYWRpbmcgYSBmZXcgcmV2aWV3cyBhbmQgc2VlaW5nIHRoYXQgaXQgc2NvcmVkIHNvIGhpZ2hseSBoZXJlLiBXZWxsLCB3ZSBnb3QgaXQgaG9tZSBhbmQgY291bGQgbm90IGJlbGlldmUgd2hhdCB3ZSBzYXcuIEl0cyBiYXNpY2FsbHkgY29tZXMgb2ZmIGFzIGlmIGl0cyB3cml0dGVuIGJ5IHNvbWUgaGFyZCB1cCBwZXJ2ZXJ0ZWQgb2xkIGd1eSB3aG8gY291bGQgbm90IGhlbHAgaW5zZXJ0aW5nIGhpcyBzZXh1YWwgZnJ1c3RyYXRpb25zIGFuZCBmYW50YXNpZXMgaW50byBhbiBhbmltZSBmaWxtIHRoYXQgcmVhbGx5IGxhY2tzIGluIHBsb3QgYW5kIGh1bW9yLiBUaGUgbWFpbiBjaGFyYWN0ZXIgaXMgYWxsIG92ZXIgdGhlIHBsYWNlLi4uIG9uZSBtb21lbnQsIGhlIGlzIGxpa2UgYW4gaW1tYXR1cmUgbGl0dGxlIGtpZCwgdGhlIG5leHQgbW9tZW50IGhlIGlzIG1hdHVyZSBhbmQgaW50ZWxsaWdlbnQsIHRoZW4gaGVyb2ljLCB0aGVuIGEgcGVydmVydGVkIHN0YWxrZXIuPGJyIC8+PGJyIC8+VGhlIHdvcnN0IHBhcnQgaXMgYWxsIG9mIHRoZSBvdXQgb2YgcGxhY2Ugc2V4dWFsIGNvbnRlbnQuIEkgaGF2ZSBubyBwcm9ibGVtIHdpdGggc2V4IGFuZCBkaWcgYSBtb3ZpZSB0aGF0IGhhcyBzb21lIGdvb2Qgc2V4dWFsIGVuZXJneSwgYnV0IHRoaXMgaXMganVzdCBwcmVzZW50ZWQgaW4gYSB3YXkgdGhhdCBpcyBjcmVlcHkuIE5pcHBsZSBzbGlwcywgY2xvc2UgdXBzIG9mIGEgZ2lybHMgY3JvdGNoIChtYW55IHRpbWVzKSBpbiB3aGl0ZSBwYW50aWVzLCBvciBhIHN3aW1zdWl0LiBJdCB3YXMgdG90YWxseSBvdXQgb2YgcGxhY2UgYW5kIGl0IHNlZW1lZCBhcyBpZiB0aGUgcGVyc29uIHdobyB3cm90ZSBpdCB3YXMgdHJ5aW5nIHRvIGxpdmUgb3V0IHNvbWUgZmFudGFzaWVzIHRocm91Z2ggaGlzIGNhcnRvb24gY2hhcmFjdGVycy4gPGJyIC8+PGJyIC8+V2Ugd2VyZSBleHBlY3Rpbmcgc29tZXRoaW5nIG9mIGEgbWF0dXJlIG5hdHVyZSwgYnV0IHdlIGp1c3Qga2VwdCBsb29raW5nIGF0IGVhY2ggb3RoZXIgYW5kIGFza2luZyB3aGF0IHRoZSBoZWNrIHRoZSBwb2ludCBvZiB0aGlzIHdhcy4uLiBiZXNpZGVzIGppZ2dsaW5nIGNhcnRvb24gYm9vYnMgYW5kIHBvb3IgZGlhbG9ndWUuIElmIHlvdSB3YW50IHRvIHNlZSBzb21lIGNhcnRvb24gY2hhcmFjdGVycyBjbGVhdmFnZSBhbmQgY3JvdGNoJ3MuLi4gdGhpcyBpcyBmb3IgeW91LiBJZiB5b3UgYXJlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBiZXlvbmQgdGhhdCwgdGhpcyBtb3ZpZSB3YXMgZW1wdHkuIFRoZSBjaGFyYWN0ZXJzIGFuZCBkaWFsb2d1ZSB3ZXJlIGp1c3QgcGxhaW4gaXJyaXRhdGluZy48YnIgLz48YnIgLz4pAAAAAAAAAEAKogMIMBAwIpIDV2UgYnJvdWdodCB0aGlzIGZpbG0gYXMgYSBqb2tlIGZvciBhIGZyaWVuZCwgYW5kIGNvdWxkIG9mIGJlZW4gb3VyIHdvcnN0IGpva2UgdG8gcGxheS4gVGhlIGZpbG0gaXMgYmFyZWx5IHdhdGNoYWJsZSwgYW5kIHRoZSBhY3RpbmcgaXMgZGlyZS4gVGhlIHdvcnN0IGNoaWxkIGFjdG9yIGV2ZXIgdXNlZCBhbmQgSGFzc2xlaG9mZiBnaXZpbmcgYSBzdWJzdGFuZGFyZCBwZXJmb3JtYW5jZS4gVGhlIHBsb3QgaXMgZGlzZ3JhY2VmdWwgYW5kIGF0IHBvaW50cyB3ZSB3YXMgc28gYm9yZWQgd2Ugd2FzIHdvbmRlcmluZyB3aGF0IHRoZSBoZWxsIHdhcyBnb2luZyBvbi4gSXQgdHJpZXMgdG8gYmUgZ3J1ZXNvbWUgaW4gcGxhY2VzIGJ1dCBpcyBqdXN0IGxhdWdoYWJsZS48YnIgLz48YnIgLz5KdXN0IHRlcnJpYmxlKQAAAAAAAABACtYPCDEQMSLGD1dhbGtlciBUZXhhcyBSYW5nZXIgaXMgb25lIG9mIHRoZSB3b3JzdCBzaG93cyBwcm9kdWNlZCBpbiB0aGUgcGFzdCAxMCB5ZWFycy4gVGhlIHNjcmlwdCBmb3IgSmFtZXMgJ0ppbW15JyBUcml2ZXR0ZSwgV2Fsa2VyJ3Mgc2lkZWtpY2ssIGlzIGFib3V0IGFzIHBhdGhldGljYWxseSB3cml0dGVuIG9mIGEgcGFydCBhcyBXZXNsZXkgQ3J1c2hlciBvbiBTdGFyIFRyZWsgVE5HLCBhbmQgaXMgcGxheWVkIHdpdGggYWJvdXQgYXMgbXVjaCBjb252aWN0aW9uLjxiciAvPjxiciAvPk9uIHRoaXMgc2hvdywgcGVvcGxlIGRvbid0IHJlc3BvbmQgdGhlIHdheSBwZW9wbGUgcmVzcG9uZCB0byB0aGluZ3MgaW4gcmVhbCBsaWZlLS1ldmVyeW9uZSBpcyBwb2xhcml6ZWQtLWV2ZXJ5b25lIGlzIGVpdGhlciBhIGNvbXBsZXRlbHkgZ29vZCBndXkgb3IgYSBjb21wbGV0ZWx5IGJhZCBndXkgKHVubGVzcyBXYWxrZXIgaGltc2VsZiBoYXMgYSAyIG1pbnV0ZSB0YWxrIHdpdGggdGhlbSBhbmQgdGhlbiB0aGV5IGNoYW5nZSBpbnN0YW50bHkpLiBUaGF0J3Mgbm90IGhvdyBsaWZlIHdvcmtzLCB0aGF0J3Mgbm90IGhvdyBwZW9wbGUgYXJlLiBUaGlzIHNob3cgZG9lc24ndCB0YWtlIHBsYWNlIGluIHRoaXMgcmVhbGl0eS48YnIgLz48YnIgLz5UaGUgcGxvdCBsaW5lcyBhcmUgYWJvdXQgYXMgcmVhbGlzdGljIGFzIE11cmRlciBTaGUgV3JvdGUsIGEgc2hvdyB3aGVyZSBhbiBhcnJvZ2FudCBvbGQgbGFkeSBjYW4ganVzdCB3YWxrIGludG8gcGVvcGxlJ3MgaG91c2VzIHdpdGhvdXQgdGhlbSBnZXR0aW5nIGFuZ3J5LCBhbmQgc2hlIGNhbiBkZW1hbmQgdGhhdCBwb2xpY2Ugb2ZmaWNlcnMgZG8gd2hhdCBzaGUgd2FudHMgYW5kIHRoZXkgYmVuZCBvdmVyIGJhY2t3YXJkcyBmb3IgaGVyLiBXaXRoIFdhbGtlciwgZXZlcnlvbmUgb24gdGhlIHNob3csIGluY2x1ZGluZyB0aGUgImJhZCBndXlzIiwgYWN0IGxpa2UgaGUncyB0aGUgc29ydCBvZiBoZXJvIHRoYXQgbXl0aHMgYW5kIGZhaXJ5IHRhbGVzIGFyZSBtYWRlIG9mLCBhbmQgdGltZSBpdHNlbGYgYmVuZHMgdG8gaGlzIHdoaW0uIFRoZSBsaW5lcyB0aGF0IHNvbWV0aW1lcyBjb21lIG91dCBvZiBwZW9wbGUncyBtb3V0aHMgb24gdGhpcyBzaG93IGFyZSBiZXlvbmQgcmlkaWN1bG91cy4gSXQncyBhcyBpZiB0aGUgc2NyaXB0d3JpdGVyIGZvciB0aGUgcGFydCBvZiBXZXNsZXkgQ3J1c2hlciAoZm9yIHRoZSAic2VyaW91cyIgcGFydHMpIGFuZCB0aGUgc2NyaXB0d3JpdGVyIGZvciBCb2IgU2FnZXQncyBmdW5uaWVzdCBob21lIHZpZGVvcyAoZm9yIHRoZSAiaHVtb3IiIHBhcnRzKSBnb3QgdG9nZXRoZXIgYW5kIHdyb3RlIGFsbCB0aGUgc2NyaXB0cyBmb3IgdGhpcyBzaG93LjxiciAvPjxiciAvPlRoaXMgc2hvdyBpcyBmb3IgcGVvcGxlIHdobyB0aGluayB0aGF0IGdvb2QgYWx3YXlzIHByZXZhaWxzIG92ZXIgZXZpbC4gSXQncyBmb3IgdGhlIGVsZGVybHkuIEl0J3MgZm9yIHdpc2hmdWwgdGhpbmtlcnMuIEl0J3MgZm9yIHBlb3BsZSB3aG8gd2FudCB0byBiZSBndWFyYW50ZWVkIHRvIGFsd2F5cyBoYXZlIGEgaGFwcHkgZW5kaW5nLiBJdCdzIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gZHJpZnQgYXdheSBpbnRvIG9ibGl2aW9uLiBJdCdzIGZvciBwZW9wbGUgd2hvc2UgZHJ1ZyBvZiBjaG9pY2UgaXMgdGhlaXIgdGVsZXZpc2lvbi48YnIgLz48YnIgLz5JIGNyaW5nZSBldmVyeSB0aW1lIEkgc2VlIGV2ZW4gYSBjb21tZXJjaWFsIGZvciB0aGlzIHNob3cuIE15IG9waW5pb24gaXMgdGhhdCBpdCBpcyBUSEUgd29yc3Qgc2hvdyB0byBiZSBvbiB0ZWxldmlzaW9uIGluIHRoZSBsYXN0IDEwIHllYXJzLjxiciAvPjxiciAvPkkgdXNlZCB0byBsaWtlIENodWNrIE5vcnJpcywgYnV0IHRoaXMgc2hvdyBoYXMgZm9yZXZlciB0YWludGVkIGhpbSBpbiBteSBtaW5kLiBJIGNhbid0IGV2ZW4gd2F0Y2ggaGlzIG9sZGVyIG1vdmllcyB3aXRob3V0IHRoaW5raW5nIG9mIHRoaXMgc2hvdy4pAAAAAAAAAEAKoAgIMhAyIpAIVHlyYSBCYW5rcyBuZWVkcyB0byB0ZWFjaCB0aGVzZSBnaXJscyB0aGF0IGl0J3Mgbm90IGFsbCBhYm91dCBiZWluZyBiZWF1dGlmdWwgb24gdGhlIG91dHNpZGUuIFRoZSBpbnNpZGUgY291bnRzIGZvciBzb21ldGhpbmcgdG9vLiBBIGxvdCBvZiB0aGUgcGFzdCB3aW5uZXJzIGhhdmUgbG9va2VkIHNlbWkgZGVjZW50IGJ1dCBhcmUgaG9ycmlibHkgY3J1ZWwgYW5kIHN0YXJ0aW5nIHRyb3VibGUgZm9yIHRoZSBvdGhlciBnaXJscy4gSSBzZWUgVHlyYSBsZXNzIGludm9sdmVkIHdpdGggdGhlIGdpcmxzIGluIGV2ZXJ5IHNlYXNvbi4gQWJvdXQgdGhlIG9ubHkgdGhpbmcgd29ydGggd2F0Y2hpbmcgVG9wIE1vZGVsIGZvciBpcyBNci4gSmF5IE1hbnVlbC4gUmVjZW50bHksIFR5cmEgaGFkIGEgY29udGVzdGFudCB3aG8gd2FzIGEgcHJlLW9wIHRyYW5zc2V4dWFsLiBJIGZlbHQgdGhhdCBzaGUgc2hvdWxkIGhhdmUgZG9uZSBtb3JlIHRvIGVuY291cmFnZSBoZXIuIEl0IHdhcyBvYnZpb3VzIHRoYXQgc2hlIGhhZCBpbnNlY3VyaXRpZXMgYWJvdXQgaGVyIG9yaWdpbmFsIGFuYXRvbXkgc2hvd2luZyB0aHJvdWdoIGhlciBmZW1pbmluZSBsb29rLiBUeXJhIHNob3VsZCBoYXZlIGdpdmVuIGhlciB0aXBzIG9yIHBlcmhhcHMgc2hlIGNvdWxkIGhhdmUgc2VudCByZXNpZGVudCBUcmFubmllIE1zLiBKYXkgdG8gaGVscCB0aGUgZ2lybCBvdXQuIEluc3RlYWQsIHRoZSBjb250ZXN0YW50IHdhcyBtZXQgd2l0aCBoYXJzaCBjcml0aWNpc20gYW5kIG5vdCBlbm91Z2ggcG9zaXRpdmUgY3JpdGljaXNtLiBJdCdzIGEgc2hhbWUgYmVjYXVzZSBJIHRydWx5IGVuam95ZWQgdGhlIGZpcnN0IDMgc2Vhc29ucy4gVGhlcmUncyBhIHJlYXNvbiB3aHkgUHJvamVjdCBSdW53YXkgaGFzIGFsbCA0IHNlYXNvbnMgb3V0IG9uIERWRCBhbmQgVG9wIE1vZGVsIG9ubHkgaGFzIDEgc2Vhc29uIG9uIERWRC4gSXQncyBjYWxsZWQgdGFzdGUuIFRvcCBNb2RlbCBzZXJpb3VzbHkgbmVlZHMgYSBsb3Qgb2YgcmV2YW1waW5nIGFuIHNvbWUgbW9yZSBodW1hbml0eS4pAAAAAAAAAEAKtgYIMxAzIqYGVHlyYSAmIHRoZSByZXN0IG9mIHRoZSBtb2RlbGluZyB3b3JsZCBuZWVkcyB0byBrbm93IHRoYXQgcmVhbCB3b21lbiBsaWtlIG15c2VsZiBhbmQgbXkgZGF1Z2h0ZXIgZG9uJ3QgY2FyZSB0byBzZWUgYWxsIHRoZSByaWRpY3Vsb3VzIG1vZGVsaW5nIHRvIHNlbGwgc29tZXRoaW5nLiBXZWlyZCBsb2NhdGlvbnMsIHRvbyBtdWNoIG1ha2V1cCAmIHRvbyBtdWNoIHNraW4gaXMgbm90IG5lY2Vzc2FyeS4gU2V4IGRvZXMgbm90IGFsd2F5cyBzZWxsIHdoZW4geW91IGFyZSBzZWxsaW5nIHRvIHdvbWVuLiBUaGUgc2FtZSBnb2VzIGZvciB0aGUgaG9yc2Ugc3RvbXBpbmcgcnVud2F5IHdhbGsgdGhhdCBsb29rcyB1bm5hdHVyYWwuIFBlb3BsZSBjb21lIGluIGFsbCBzaGFwZXMgJiBzaXplcyAmIHRoZXkgbmVlZCB0byBoYXZlIHRoYXQgb24gdGhlIHNob3cuIE15IGRhdWdodGVyIGhhcyBhIDM2IiBpbnNlYW0sIGlzIHRhbGwgJiBzbGVuZGVyICYgYSBzaXplIDUsIEkgYW0gbW9yZSBhdmVyYWdlIGF0IGEgc2l6ZSAxMi4gV2Ugd291bGQgbGlrZSB0byBzZWUgYm90aC0gSSBjYW4gbm90IHBpY3R1cmUgaG93IHNvbWV0aGluZyB3b3VsZCBsb29rIG9uIG1lIHdoZW4gYSBzaXplIDIgaXMgd2VhcmluZyBpdCwgaXQgd2lsbCBub3QgZml0IHRoZSBzYW1lIHdheSBvbiBtZS4gSSBkbyBub3QgYnV5IG1hZ2F6aW5lcyBhbnltb3JlIGJlY2F1c2UgdGhleSBhcmUgb25lIHNpZGVkIG9uIHRoaXMgbWF0dGVyLiBXZSB3b3VsZCByZWFsbHkgbG92ZSB0aGUgc2hvdyB0byBjb25zaWRlciB3b21lbiBvZiBhbGwgc2l6ZXMuIFRoYW5rIHlvdS4pAAAAAAAAAEAKywMINBA0IrsDVG9vIGJhZCwgSSByZWFsbHkgbGlrZSBLcmlzdGVuIENsb2tlIGFuZCBHYXJ5IEJ1c2V5LiBCdXQgdGhlIGRpcmVjdG9yIGZhaWxlZCB0byBwdXQgdGhpcyB0b2dldGhlci4gVGhlcmUncyBhIGxvdCBvZiBhY3Rpb24sIGEgbG90IG9mIHByb21pc2UsIGJ1dCBpdCBhbGwgY29tZXMgb2ZmIGhva2V5LiBUaGUgZGlyZWN0b3IgZGlkbid0IGRvIGhpcyBqb2IuIFByb21pc2luZyBhY3Rpb24gY29tZXMgb2ZmIGxhbWUuIFNvIG11Y2ggc2VlbXMgY29udHJpdmVkIGluIGEgZGVzcGVyYXRlIGF0dGVtcHQgdG8gc2F2ZSB0aGUgZmlsbS4gVGhpcyB2ZXJzaW9uIG9mICJUaGUgUmFnZSIgKERpcmVjVFYgY3JlZGl0cyBpdCBhcyAxOTk2KSBzaW1wbHkgaXNuJ3Qgd29ydGggdGhlIHRpbWUgdG8gd2F0Y2ggaXQuIEFub3RoZXIgZGlyZWN0b3Igd291bGQgaGF2ZSBkb25lIGEgYmV0dGVyIGpvYi4pAAAAAAAAAEAKjAcINRA1IvwGVGhvdWdoIHN0cnVjdHVyZWQgdG90YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgYm9vayBieSBUaW0gS3JhYmLDqSB3aG8gd3JvdGUgdGhlIG9yaWdpbmFsICdUaGUgVmFuaXNoaW5nJyAoU3Bvb3Jsb29zKSBpdCBkb2VzIGhhdmUgdGhlIHNhbWUgb3ZlcmFsbCBmZWVsLCBleGNlcHQgZm9yIHRoYXQgS29vbGhvdmVuJ3Mgc3R5bGUgaXMgbGVzcyBidXNpbmVzcy1saWtlIGFuZCBtb3JlIGx5cmljLiBUaGUgYmVnaW5uaW5nIGlzIGdyZWF0LCB0aGUgbWlkZGxlIGlzIGZpbmUsIGJ1dCB0aGUgc3RpbmcgaXMgaW4gdGhlIGVuZC4gQSBzdXJwcmlzZSBlbW90aW9uYWwgZW5kaW5nLiBBcyB5b3UgY291bGQgcmVhZCBpbiBzZXZlcmFsIG1hZ2F6aW5lcyB0aGVyZSBpcyBzb21lIHNleCBpbiB0aGUgZmlsbSwgYnV0IGl0IGlzIGRvbmUgYWxsIHZlcnkgYmVhdXRpZnVsbHkuIE5ldmVyIGV4cGxpY2l0LCBidXQgd2l0aCBsb3RzIG9mIHdhcm10aCBhbmQgc29tZXRpbWVzIGV2ZW4gaHVtb3VyLiBJdCBpcyBhIHNoYW1lIEFtZXJpY2FuIGZpbG1zIGNhbid0IGJlIGFzIG9wZW4gYW4gaG9ub3VzdCBhcyB0aGlzIG9uZS4gV2hlcmUgRHV0Y2ggZmlsbXMgdGVuZCB0byBnbyBqdXN0IG92ZXIgdGhlIGVkZ2Ugd2hlbiBpdCBjb21lcyB0byB0aGlzIHN1YmplY3QsICdEZSBHcm90JyBzdGF5cyBhbHdheXMgd2l0aGluIHRoZSBib3VuZGFyaWVzIG9mIGdvb2QgdGFzdGUuICdEZSBHcm90JyB0ZWxscyBhbiBhbWF6aW5nIHN0b3J5IHN0cmV0Y2hlZCBvdmVyIG1vcmUgdGhhbiAzMCB5ZWFycy4gV2hlbiB5b3UnbGwgbGVhdmUgdGhlIGNpbmVtYSB5b3UnbGwgYmUgbW92ZWQuIFdoYXQgY2FuIHdlIGFzayBtb3JlIG9mIGEgZmlsbT8gQW55d2F5LCB0aGlzIGZpbG0gZXZlbiBnaXZlcyBtb3JlLi4uLikAAAAAAAAAQArDCAg2EDYiswhUaGlzIHdhcyBhIHZlcnkgYnJpZWYgZXBpc29kZSB0aGF0IGFwcGVhcmVkIGluIG9uZSBvZiB0aGUgIk5pZ2h0IEdhbGxlcnkiIHNob3cgYmFjayBpbiAxOTcxLiBUaGUgZXBpc29kZSBzdGFycmVkIFN1ZSBMeW9uIChvZiBMb2xpdGEgbW92aWUgZmFtZSkgYW5kIEpvc2VwaCBDYW1wYW5lbGxhIHdobyBwbGF5IGEgYmFieSBzaXR0ZXIgYW5kIGEgdmFtcGlyZSwgcmVzcGVjdGl2ZWx5LiBUaGUgdmFtcGlyZSBoaXJlcyBhIGJhYnkgc2l0dGVyIHRvIHdhdGNoIGhpcyBjaGlsZCAod2hpY2ggYXBwZWFycyB0byBiZSBzb21lIGtpbmQgb2Ygd2VyZXdvbGYgb3IgbW9uc3Rlcikgd2hpbGUgaGUgZ29lcyBvdXQgYXQgbmlnaHQgZm9yIGJsb29kLiBUaGUgYmFieSBzaXR0ZXIgaXMgdG90YWxseSBvYmxpdmlvdXMgdG8gdGhlIHZhbXBpcmUncyBhcHBlYXJhbmNlIHdoZW4gc2hlIGZpcnN0IHNlZXMgaGltIGFuZCBvbmx5IHN0YXJ0cyB0byBwdXQgdHdvIGFuZCB0d28gdG9nZXRoZXIgd2hlbiBzaGUgbm90aWNlcyB0aGF0IGhlIGhhcyBubyByZWZsZWN0aW9uIGluIHRoZSBtaXJyb3IsIGhhcyBhbiBvZGQgY29sbGVjdGlvbiBvZiBib29rcyBpbiB0aGUgbGlicmFyeSBvbiB0aGUgb2NjdWx0LCBhbmQgaGVhcnMgc3RyYW5nZSBub2lzZXMgd2hpbGUgdGhlIHZhbXBpcmUgZ29lcyB0byB0YWxrIHRvIHRoZSBjaGlsZC4gU2hlIHJlYWxpemVzIHRoYXQgdGhlIG1hbiB3aG8gaGlyZWQgaGVyIG1heSBub3QgYmUgd2hhdCBzaGUgdGhvdWdodCBoZSB3YXMgb3JpZ2luYWxseS4gU2hlIGJvbHRzIG91dCB0aGUgZG9vciwgdGhlIHZhbXBpcmUgY29tZXMgb3V0IGxvb2tpbmcgcHV6emxlZCBhbmQgdGhlIGVwaXNvZGUgaXMgb3Zlci4gSSBkb24ndCBrbm93IHdoYXQgcHVycG9zZSBpdCB3YXMgdG8gbWFrZSBzdWNoIGFuIGFiYnJldmlhdGVkIGVwaXNvZGUgdGhhdCBsYXN0ZWQganVzdCA1IG1pbnV0ZXMuIFRoZXkgc2hvdWxkIGp1c3QgaGF2ZSBleHBhbmRlZCB0aGUgZWFybGllciBlcGlzb2RlIGJ5IHRob3NlIHNhbWUgNSBtaW51dGVzIGFuZCBza2lwcGVkIHRoaXMgb25lLiBBIHRvdGFsIHdhc3RlZCBlZmZvcnQuKQAAAAAAAABACuEPCDcQNyLRD1RoaXMgc29hcCBpcyB3b3JzZSB0aGFuIGJhZDogaXQncyBwb2lzb25vdXMuIE9mIHRoZSBtYW55IHRlbGV2aXNpb24gc2hvd3MgdGhhdCBoYXZlIGhhZCBhIGNvcnJvc2l2ZSBpbmZsdWVuY2Ugb24gQnJpdGlzaCBzb2NpZXR5IG92ZXIgdGhlIHBhc3QgdHdlbnR5IHllYXJzLCBFYXN0ZW5kZXJzIGlzIHRoZSBwcmltZSBleGFtcGxlLiBGb3IgdHdvIGRlY2FkZXMgdGhpcyBzaG93IGhhcyBjZWxlYnJhdGVkIHRoZSBvYWYsIHRoZSB0aHVnLCB0aGUgd2lkZS1ib3ksIHRoZSB0YXJ0LCB0aGUgZ29iYnksIHRoZSB2aW9sZW50LCB0aGUgc2V4dWFsbHktaW5jb250aW5lbnQsIHRoZSBjcmltaW5hbCwgdGhlIGlnbm9yYW50LCB0aGUgdW5hbWJpdGlvdXMgLi4uPGJyIC8+PGJyIC8+SG93IG1hbnkgdGltZXMgaGFzIHNvbWVvbmUgb3Igb3RoZXIgcmVtYXJrZWQgdGhhdCBFYXN0ZW5kZXJzICJtaXJyb3JzIGxpZmUiPyBMaWZlIG9uIHdoaWNoIHBsYW5ldCwgZXhhY3RseT8gPGJyIC8+PGJyIC8+SXQncyB3cml0dGVuIGFib3V0ICJ3b3JraW5nLWNsYXNzIiBjaGFyYWN0ZXJzLCBhcyBpbWFnaW5lZCBieSBtaWRkbGUtY2xhc3MgcGVvcGxlIHdobyBoYXZlIHRha2VuIGEgY291cnNlIGluIGNyZWF0aXZlIHdyaXRpbmcuIEVhZ2VyIHRvIHNob3cgdG8gdGhlaXIgbWlkZGxlLWNsYXNzIHBlZXJzIGhvdyBmYW1pbGlhciB0aGV5IGFyZSB3aXRoIHRoZSAid29ya2luZy1jbGFzcyIgdGhleSBkcmVhbSB1cCB0aGUgbHVtcGVuIHJhYmJsZSB0aGF0IGlzIHRoZSBjaXRpemVucnkgb2YgRWFzdGVuZGVycy48YnIgLz48YnIgLz5UaGlzIGhhcyBhIHRveGljIGVmZmVjdCBvbiBzb21lIG1pbmRzIGxlc3Mgd2VsbC1lcXVpcHBlZCB0aGFuIG90aGVycyB0byBoYW5kbGUgZmljdGlvbiwgYW5kIHNvIHdlIGZpbmQgbWVtYmVycyBvZiB0aGUgcmVhbCBwb3B1bGF0aW9uIGFzc3VtaW5nIHRoZSBhdHRpdHVkZXMgYW5kIGRlbWVhbm91ciBvZiB0aGUgaW5oYWJpdGFudHMgb2YgV2FsZm9yZC48YnIgLz48YnIgLz5UaHVzLCBpdCBjYW1lIHRvIHBhc3MgdGhhdCBFYXN0ZW5kZXJzIG1pcnJvcnMgbGlmZTsgYnV0IG9ubHkgYWZ0ZXIgbGlmZSBoYWQgYmVlbiBob29kd2lua2VkIGludG8gbWlycm9yaW5nIEVhc3RlbmRlcnMuPGJyIC8+PGJyIC8+T3RoZXIgc29hcHMgaGF2ZSBmb2xsb3dlZCBpbiBFRSdzIGZvb3RzdGVwcywgZmlsbGVkIHRvIHRoZWlyIHN0aW5raW5nIGd1bndoYWxlcyB3aXRoIHVnbHksIHBvdGF0by1mYWNlZCwgc2hhdmVuLWhlYWRlZCwgcG90LWJlbGxpZWQgY2hhcmFjdGVycywgc2Nvd2xpbmcgYXQgZWFjaCBvdGhlciBhbmQgaXNzdWluZyB0aHJlYXRzIGNvbnN0YW50bHkuIFRoaXMgaXMgdGhlIHByb2xldGFyaWF0IGFzIHBlcmNlaXZlZCBieSB0aGUgd3JpdGVycyB3aG8gcHJvZHVjZSB0aGlzIHRyYXNoLiBUaGUgd3JpdGVycyB3aWxsIGdyb3cgcmljaCBvbiB0aGUgcHJvY2VlZHMgb2Ygc3VjaCBvdXRwdXQsIGFuZCB3aWxsIGdvIG9uIHRvIGVuam95IHRoZSBmaW5lciB0aGluZ3Mgb2YgbGlmZSBpbiB0aGVpciByYXJpZmllZCBlbmNsYXZlcy4gTWVhbndoaWxlLCB0aGUgYnVyZ2VvbmluZyBudW1iZXIgb2YgbmV3LCBUVi1pbmR1Y2VkIGRyb25lcyB3aWxsIHByb2NlZWQgaW5leG9yYWJseSB0b3dhcmQgY3VsdHVyYWwgYmFua3J1cHRjeS48YnIgLz48YnIgLz5BbmQgdGhlcmUgeW91IGhhdmUgdGhlIG5ldyBwcmllc3RzIGFuZCB0aGUgbmV3IGNyZWF0dXJlcyBvZiB0aGUgZWFybHkgMjFzdCBjZW50dXJ5LiBNdWNoIG9mIHRoaXMgaXMgZHVlIHRvIHRoZSBpbW1lYXN1cmFibGUgcG93ZXIgb2YgdGhhdCBpbGx1bWluYXRlZCBib3hmdWwgb2YgZGFuY2luZyBwaXhlbHMgaW4gdGhlIGNvcm5lciBvZiB5b3VyIGxpdmluZy1yb29tLiBJdCdzIHlvdXIgZmF1bHQsIGdlbnRsZSByZWFkZXI6IHRoYXQncyB3aGF0IHlvdSBjaG9zZSBhcyB0aGUgb25seSB3aW5kb3cgdGhyb3VnaCB3aGljaCB0byBsb29rIG91dCBmcm9tIHlvdXIgcHJpc29uLikAAAAAAAAAQAqBBQg4EDgi8QRUaGlzIHNob3cgaXMgdGhlIHdvcnN0IHNob3cgZXZlciEgTm9ycmlzIGFuZCBoaXMgZmFtaWx5IHdyaXRlIGl0LCBwcm9kdWNlIGl0LCBkaXJlY3QgaXQsIGV0YyBldGMuIFRoZSBvbmx5IHJlYXNvbiBJIGV2ZXIgc2VlIGl0IGlzIGJlY2F1c2UgbXkgZ29vZnkgd2lmZSBsaWtlcyBpdC4gSG93IG1hbnkgdGltZXMgY2FuIE5vcnJpcyBmbHkgdGhvdWdoIHRoZSBhaXIgZnJvbSBwbGFpbiBzaWdodCB0byBsYW5kIGEga2ljayBvbiBhbiBvYnZpb3VzbHkgYmxpbmQgdmlsbGFpbj8gTm8gdHJlZXMsIG5vIGJ1aWxkaW5nLCBqdXN0IHdob29zaC4uLi4udGhpbiBhaXIuIEhlIEFMV0FZUyBzb2x2ZXMgdGhlIGNhc2Ugb3IgaXMgdGhlIGJlc3QgYXQgd2hhdGV2ZXIgc2tpbGwgdGhlcmUgaXMuIE5vIGNvIHN0YXIgZXZlciBnZXRzIHRoZSBnbG9yeS4gSXRzIGFsbCBOb3JyaXMuIEl0cyB0cnVseSBhcHBhcmVudCB0aGF0IE5vcnJpcyBpcyBhd2Z1bCBzdHVjayBvbiBoaW1zZWxmIGFuZCB3aWxsIG5vdCBhbGxvdyBhbnlvbmUgdG8gb25lIHVwIGhpbSBpbiBhbnkgc2NlbmUgbm8gbWF0dGVyIHdoYXQgdGhlIGNvbnRlbnQuIFRlcnJpYmxlIGFjdGluZywgdGVycmlibGUgc2NyaXB0LCB0ZXJyaWJsZSBzZXJpZXMuKQAAAAAAAABACtICCDkQOSLCAlRoaXMgc2hvdWxkIGhhdmUgYmVlbiBhIHNob3J0IGZpbG0sIG5vdGhpbmcgbW9yZS4gVGhlIExlbmd0aCBvZiAxLDUgaG91cnMgaXMgbXVjaCB0b28gbG9uZywgYmVjYXVzZSBhZnRlciAxMCBtaW51dGVzIHlvdSBoYXZlIHNlZW4gYWxtb3N0IGV2ZXJ5IGpva2UuIEl0J3MgZ2V0dGluZyBtb3JlIGFuZCBtb3JlIG9uIHlvdXIgbmVydmVzIHVudGlsbCB5b3UgZmluYWxseSBraWNrIG91dCB5b3VyIGJyYWluIHRvIGVuZHVyZSB0aGF0IG1vdmllLjxiciAvPjxiciAvPlRvIGRvIHlvdXJzZWxmIGEgZmF2b3IsIGRvbid0IG1lbnRpb24gdG8gc2VlIHRoYXQgbW92aWUuLi4pAAAAAAAAAEAKvAUIOhA6IqwFVGhpcyBzZXJpZXMgaXMgZm9ybXVsYWljIGFuZCBib3JpbmcuIFRoZSBlcGlzb2RlcyBhcmUgdGhlIHNhbWUgdGhpbmcgZXZlcnkgd2Vlaywgc2ltcGx5IHdpdGggc2xpZ2h0bHkgdmFyaWVkIHNldHRpbmdzLiBTb21lIHB1cmVseSBldmlsIGNoYXJhY3RlciBkb2VzIHNvbWUgZGFzdGFyZGx5IGRlZWQsIFdhbGtlciBnb2VzIGFmdGVyIGhpbSwgYW5kIGl0IGVuZHMgaW4gYSBLYXJhdGUgbWF0Y2guIFRoZSB2aWxsYWlucyBhcmUgc3VwZXItY2xpY2jDqSBzdXBlci1zdGVyZW90eXBpY2FsIGV2aWwgdmlsbGFpbnMsIHRoZSBnb29kIGd1eXMgYXJlIGFsbCBwdXJlLCBob25lc3QgYW5kIHNhaW50bHksIGFuZCB0aGUgc3RvcnkgbGluZXMgYXJlIHNpbXBsaXN0aWMgYW5kIHVucmVhbGlzdGljLiBBZnRlciBhYm91dCAyIGVwaXNvZGVzLCB0aGUgc2hvdyBiZWNvbWVzIHRvdGFsbHkgdW53YXRjaGFibGUgYnkgYWxsIGJ1dCB0aGUgbGVhc3QgZGlzY2VybmluZyBmYW5zLiBDZXJ0YWlubHkgbm90IE5vcnJpcydzIGJlc3Qgd29yay4gSGlzIG90aGVyIHdvcmsgbWF5IGJlIGNsaWNow6kgYnV0IGl0IHVzdWFsbHkgZG9lcyBub3QgZHJhZyBvbiBmb3Igd2Vla3MuIElmIHlvdSBlbmpveSBmb3JtdWxhaWMsYm9yaW5nLCByZXBldGl0aXZlIGNsaWNow6lkIHNub296ZS1mZXN0cywgdGhlbiB0aGlzIGlzIGZvciB5b3UuKQAAAAAAAABACqcDCDsQOyKXA1RoaXMgb25seSBnZXRzIGJhc2hlZCBiZWNhdXNlIGl0IHN0YXJzIERhdmlkIEhhc3NlbGhvZmYuIFdlbGwsIHRoZW4gbGV0IG1lIGJhc2ggaXQgdG8uIENvbXBhcmVkIHRvIHRoZSBnYXJiYWdlIHRoZXkgY2FsbCBob3Jyb3IgY29taW5nIG91dCBub3dhZGF5cywgdGhpcyBmaWxtIGlzbid0IHRvbyBiYWQuIEl0IGhhcyB0aGUgYmVhdXRpZnVsIExlc2xpZSBDdW1taW5nLiBTaGUgaXMgc3VwZXIgaG90LCBidXQgY2FuJ3QgdGFsayB2ZXJ5IHdlbGwuIFRoZXJlIGlzIGEgZ3JlYXQgc2NlbmUgd2l0aCBoZXIgd2hlbiBzaGUgaXMgc3VwZXJuYXR1cmFsbHkgcmFwZWQuIFNoZSBzaG93cyBvZmYgaGVyIG5pY2UgYm9keS4gTGluZGEgQmxhaXIgZG9lcyBub3RoaW5nIGhlcmUgYXMgd2VsbCBhcyBIYXNzZWxob2ZmLiAzLzEwKQAAAAAAAABACuAFCDwQPCLQBVRoaXMgbW92aWUgd2FzIHBoeXNpY2FsbHkgcGFpbmZ1bCB0byBzaXQgdGhyb3VnaCwgbWF5YmUgYmVjYXVzZSAobGlrZSBtYW55IHBlb3BsZSBteSBhZ2UsIGFuZCB5b3VuZ2VyKSBJIGdyZXcgdXAgd2l0aCBEci4gU2V1c3MgYW5kIGxvdmVkIGhpcyBib29rcyAtIGZ1bm55LCBjbGV2ZXIsIHdoaW1zaWNhbCBhbmQgc3VidmVyc2l2ZSBhdCB0aGUgc2FtZSB0aW1lLiAiVGhlIENhdCBpbiB0aGUgSGF0IiBzdWNrcyBhbGwgb2YgdGhlIGludGVyZXN0IGFuZCBzcGFyayBvdXQgb2YgdGhlIHN0b3J5LCBhbmQgTWlrZSBNeWVyJ3MgcGVyZm9ybWFuY2UgYXMgdGhlIENhdCBpcyBtb3N0bHkgYmV3aWxkZXJpbmcuIFdoeSB0aGUgQm9yc2NodCBCZWx0IGFjY2VudCwgdGhlIHVuZnVubnkgcGF0dGVyLCB0aGUgaW5hcHByb3ByaWF0ZSBqb2tlcywgdGhlIGNoYXJtbGVzcyBjb3N0dW1lPyBJIGhhZCB0byBnbyBiYWNrIGFuZCByZS1yZWFkIHRoZSBib29rcyB0byBzZWUgdGhlIHJlYWwgcHJvYmxlbTogdGhlIGJvb2tzIGFyZSBTSU1QTEUuIFRoaXMgbW92aWUgaXMgT1ZFUkJMT1dOIGFuZCB3YXksIHdheSB0b28gbG9uZy48YnIgLz48YnIgLz5Zb3UgZG9uJ3QgZXhwZWN0IGV2ZXJ5IGtpZHMnIG1vdmllIHRvIGJlIFRveSBTdG9yeSBvciBUaGUgSXJvbiBHaWFudCwgYnV0IHRoaXMgb25lIHNldCBhIG5ldyBsb3cuIEhvdyBjb3VsZCBNaWtlIE15ZXJzIG5lZWQgdGhlIG1vbmV5PykAAAAAAAAAQAqNEAg9ED0i/Q9UaGlzIG1vdmllIHdhcyBhIHJhdGhlciBvZGQgdmlld2luZyBleHBlcmllbmNlLiBUaGUgbW92aWUgaXMgb2J2aW91c2x5IGJhc2VkIG9uIGEgcGxheS4gTm93IEknbSBzdXJlIHRoYXQgZXZlcnl0aGluZyBpbiB0aGlzIG1vdmllIHdvcmtzIG91dCBqdXN0IGZpbmUgaW4gYSBwbGF5IGJ1dCBmb3IgaW4gYSBtb3ZpZSBpdCBqdXN0IGRvZXNuJ3QgZmVlbCB0ZXJyaWJseSBpbnRlcmVzdGluZyBlbm91Z2ggdG8gd2F0Y2guIFRoZSBtb3ZpZSBpcyB3YXkgdG9vICdzdGFnZXknIGFuZCB0aGV5IGRpZG4ndCBldmVuIGJvdGhlcmVkIHRvIGNoYW5nZSBzb21lIG9mIHRoZSBkaWFsb2cgdG8gbWFrZSBpdCBtb3JlIGZpdHRpbmcgZm9yIGEgbW92aWUuIEluc3RlYWQgd2hhdCBpcyBwcmVzZW50ZWQgbm93IGlzIGFuIGFsbW9zdCBsaXRlcmFsbHkgcmUtZmlsbWluZyBvZiBhIHN0YWdlLXBsYXksIHdpdGggb3Zlci10aGUtdG9wIGNoYXJhY3RlcnMgYW5kIHN0YWdlZCBkaWFsb2cuIEJlY2F1c2Ugb2YgYWxsIHRoaXMgdGhlIHN0b3J5bGluZSByZWFsbHkgZG9lc24ndCB3b3JrIG91dCBhbmQgdGhlIG1vdmllIGJlY29tZXMgYW4gYWxtb3N0IGNvbXBsZXRlIGJvcmUtIGFuZCBvYnNvbGV0ZSB2aWV3aW5nIGV4cGVyaWVuY2UuPGJyIC8+PGJyIC8+SXQgdGFrZXMgYSB3aGlsZSBiZWZvcmUgeW91IGZpZ3VyZSBvdXQgdGhhdCB0aGlzIGlzIGEgY29tZWR5IHlvdSdyZSB3YXRjaGluZy4gQXQgZmlyc3QgeW91IHRoaW5rIGl0cyBhIGRyYW1hIHlvdSdyZSB3YXRjaGluZywgd2l0aCBxdWlya3kgY2hhcmFjdGVycyBpbiBpdCBidXQgYXMgdGhlIG1vdmllIHByb2dyZXNzZXMgeW91J2xsIG5vdGljZSB0aGF0IHRoZSBtb3ZpZSBpcyBtb3JlIGEgdHJhZ2ljb21lZHksIHRoYXQgbGVhbnMgcmVhbGx5IG1vcmUgdG93YXJkIHRoZSBjb21lZHkgZ2VucmUsIHJhdGhlciB0aGFuIHRoZSBkcmFtYSBnZW5yZS48YnIgLz48YnIgLz5UaGUgY2hhcmFjdGVycyBhbmQgZGlhbG9nIGFyZSByZWFsbHkgdGhlIHRoaW5ncyB0aGF0IG1ha2UgdGhpcyBtb3ZpZSBhIHF1aXJreSBhbmQgb3Zlci10aGUtdG9wIG9uZSB0aGF0IGF0IHRpbWVzIHJlYWxseSBiZWNvbWUgdW53YXRjaGFibGUuIFN1cmUsIHRoZSBhY3RvcnMgYXJlIGdyZWF0OyBQZXRlciBPJ1Rvb2xlIGFuZCBTdXNhbm5haCBZb3JrLCBhbW9uZ3N0IG90aGVycyBidXQgdGhleSBkb24ndCByZWFsbHkgdXBsaWZ0IHRoZSBtb3ZpZSB0byBhIGxldmVsIG9mICd3YXRjaGFibGUgZW5vdWdoJy48YnIgLz48YnIgLz5UaGUgc3RvcnkgZmVlbHMgdG90YWxseSBkaXNvcmllbnRhdGVkLiBCYXNpY2FseSB0aGUgc3RvcnkgaXMgYWJvdXQgbm90aGluZyBhbmQganVzdCBtYWlubHkgZm9jdXNlcyBvbiB0aGUgYnJvdGhlci9zaXN0ZXIgY2hhcmFjdGVycyBwbGF5ZWQgYnkgUGV0ZXIgTydUb29sZSBhbmQgU3VzYW5uYWggWW9yay4gQnV0IHdoYXQgZXhhY3RseSBpcyB0aGUgc3RvcnkgZXZlbiBhYm91dD8gVGhlIG1vdmllIGZlZWxzIGxpa2UgYSBwb2ludGxlc3MgYW5kIG9ic29sZXRlIG9uZSB0aGF0IGhhcyB2ZXJ5IGxpdHRsZSB0byBvZmZlci4gTGlrZSBJIHNhaWQgYmVmb3JlOyBJJ20gc3VyZSB0aGUgc3RvcnkgaXMgZ29vZCBhbmQgaW50ZXJlc3RpbmcgdG8gd2F0Y2ggb24gc3RhZ2UgYnV0IGFzIGEgbW92aWUgaXQgcmVhbGx5IGlzbid0IGZpdHRpbmcgYW5kIHNpbXBseSBkb2Vzbid0IHdvcmsgb3V0LjxiciAvPjxiciAvPlRoZSBlZGl0aW5nIGlzIHNpbXBseSBkcmVhZGZ1bCBhbmQgdGltZXMgYW5kIGl0IGJlY29tZXMgZXZlbiBsYXVnaGFibGUgYmFkIGluIGNlcnRhaW4gc2VxdWVuY2VzLiA8YnIgLz48YnIgLz5Nb3JlIHdhcyB0byBleHBlY3QgZnJvbSBkaXJlY3RvciBKLiBMZWUgVGhvbXBzb24sIHdobyBoYXMgb2J2aW91c2x5IGRvbmUgZmFyIGJldHRlciBtb3ZpZXMgdGhhbiB0aGlzIHJhdGhlciBmYWlsZWQsIHN0YWdlLXBsYXkgdHJhbnNsYXRlZCB0byBzY3JlZW4sIHByb2plY3QuPGJyIC8+PGJyIC8+UmVhbGx5IG5vdCB3b3J0aCB5b3VyIHRpbWUuPGJyIC8+PGJyIC8+NC8xMCkAAAAAAAAAQAq3BQg+ED4ipwVUaGlzIG1vdmllIHdhcyBOT1RISU5HIGxpa2UgdGhlIGJvb2suIEkgdGhpbmsgdGhlIHdyaXRlciBvZiB0aGUgc2NyZWVucGxheSBtdXN0IGhhdmUgd2FudGVkIHRoZSBqb2Igb2Ygd3JpdGluZyB0aGUgc2VxdWVsIHRvIEdvbmUgd2l0aCB0aGUgV2luZCBhbmQgYmVlbiB0dXJuZWQgZG93bi4gVGhpcyB3YXMgaGlzIG9yIGhlciB3YXkgb2YgZ2V0dGluZyB0aGVpciBpZGVhcyBpbiBhbnl3YXkuIFRoZSBvbmx5IHNpbWlsYXJpdHkgYmV0d2VlbiB0aGlzIG1vdmllIGFuZCB0aGUgc3RvcnkgaXQgd2FzIHBvcnRyYXlpbmcgd2FzIHRoZSBuYW1lcyBvZiB0aGUgcHJpbmNpcGxlIGNoYXJhY3RlcnMgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgbWFpbiBhY3Rpb24uIE5vbmUgb2YgdGhlIGV2ZW50cyB0aGF0IGFyZSBzaG93biBpbiB0aGUgbW92aWUgaGFwcGVuZWQgdGhhdCB3YXkgaW4gdGhlIGJvb2suIEZvciBhIEdvbmUgd2l0aCB0aGUgV2luZCBmYW4gKG9mIGJvdGggdGhlIGJvb2sgYW5kIHRoZSBtb3ZpZSkgdGhpcyB3YXMgZGVlcGx5IGRpc2FwcG9pbnRpbmcuIElmIHlvdSBsb3ZlZCB0aGUgYm9vayBTY2FybGV0dCwgZG9uJ3Qgd2F0Y2ggdGhpcyBtb3ZpZSBob3BpbmcgdG8gc2VlIGl0IHBsYXllZCBvdXQgb24gdGhlIHNjcmVlbi4gVGhleSBvbmx5IHNoYXJlIHRoZSB0aXRsZSBpbiBjb21tb24uKQAAAAAAAABACqUKCD8QPyKVClRoaXMgbW92aWUgdHJpZXMgaXRzIGRhcm5kZXN0IHRvIGNhcHR1cmUgdGhhdCBjbGFzc2ljIGJhZCBjYW5hZGlhbiBtb3ZpZSBmZWVsOjxiciAvPjxiciAvPiJxdWlya3kiIGFuZCBvYm5veGlvdXMgY2hhcmFjdGVycyAoYSBmZXcpOyAicXVpcmt5IiB0b3duIHdpdGggInF1aXJreSIgZm9sazsgYSAicXVpcmt5IiBjb2ZmZWUgc2hvcCBvciByZXN0YXVyYW50IChjb2ZmZWUgc2hvcCBoZXJlKTsgbG90cyBvZiBzaG90cyBvZiBjYW5hZGlhbiBzdHVmZiBmb3IgcG9zdGNhcmRzIChvY2VhbiBzdHVmZiBoZXJlKTsgbG90cyBvZiBtZW50aW9uIG9mICJnb3R0YSBnZXQgb3V0IG9mIHRoaXMgdG93biI7IGRvd25yaWdodCBib29vb3JpbmcuPGJyIC8+PGJyIC8+QW5kIGl0IHN1Y2NlZWRzIG9uIGFsbCBjb3VudHMuPGJyIC8+PGJyIC8+U29tZXRoaW5nIHRvIG5vdGUsIHRob3VnaC4gSSBjb3VsZG4ndCBmaWd1cmUgb3V0IHdoZXRoZXIgdGhpcyBtb3ZpZSB3YXMganVzdCB0cnlpbmcgdG8gYmUgcG9zdC1Ob3J0aGVybiBFeHBvc3VyZSAicXVpcmt5IiBjb21lZHkgb3Igc29tZXRoaW5nIHN1cnJlYWwgbGlrZSBhIGRydWctaW5kdWNlZCBvciBwc3ljaG90aWMgaGFsbHVjaW5hdGlvbi4gVGhlIGVkaXRpbmcgb2YgdGhpcyBtb3ZpZSBqdW1wZWQgYXJvdW5kIG5vbnNlbnNpY2FsbHkgZnJvbSBvbmUgdW5yZWxhdGVkIHRoaW5nIHRvIGFub3RoZXIgd2l0aCB6ZXJvIHBhY2luZyBvciBtb3RpdmF0aW9uLiBOb3QgdG8gbWVudGlvbiB0aGUgZmFjdCB0aGF0IGhhbGYgdGhlIHRpbWUgd2UgZGlkbid0IGV2ZW4ga25vdyB3aGVyZSB3ZSB3ZXJlIGp1bXBpbmcuIFRha2UgZm9yIGluc3RhbmNlLCB0aGUgdmVyeSBvcGVuaW5nIHNob3RzLCBvZiB5ZWxsaW5nIHRlZW5zIGluIGEgY2FyLiBXaG8gYXJlIHRoZXkgYW5kIHdoYXQgdGhlIGgtLS0gZGlkIHRoZXkgaGF2ZSB0byBkbyB3aXRoIGFueXRoaW5nPyBBbmQgdGhpcyBzdWIgLSB1aCAtIHBsb3QgKHVzZSB0aGF0IHdvcmQgcGxvdCBsb29zZWx5KSBjb25jZXJpbmcga2lkcyB0aGF0IHNlZW0gdG8gc3BhbiBnZW5lcmF0aW9ucy4gSSBkb24ndCB0aGluayB0aGV5IGFjdHVhbGx5IGRvLCBidXQgdGhlIGVkaXRpbmcgbWFrZXMgaXQgbG9vayBsaWtlIHRoZXkgbWF0ZXJpYWxpemUgZnJvbSBmbGFzaGJhY2ssIGFsbCBvZiBhIHN1ZGRlbiwgdG8gY3VycmVudCB0aW1lLiBIdWg/IFdoYXQgZGlkIEkgbWlzcz88YnIgLz48YnIgLz5Bdm9pZC4gVW5sZXNzIGZvciBsYXVnaHMuIE9yIHlvdSB3YW50IHRvIHRyeSBhbmQgdHJpcCBvdXQgb24gdGhlIGluZXB0IGVkaXRpbmcuKQAAAAAAAABACs8DCEAQQCK/A1RoaXMgbW92aWUgc3VycHJpc2VkIG1lLiBTb21lIHRoaW5ncyB3ZXJlICJjbGljaGVpc2giIGFuZCBzb21lIHRlY2hub2xvZ2ljYWwgZWxlbWVudHMgcmVtaW5kZWQgbWUgb2YgdGhlIG1vdmllICJFbmVteSBvZiB0aGUgU3RhdGUiIHN0YXJyaW5nIFdpbGwgU21pdGguIEJ1dCBmb3IgdGhlIG1vc3QgcGFydCB2ZXJ5IGVudGVydGFpbmluZy0gZ29vZCBtaXggd2l0aCBKYW1pZSBGb3h4IGFuZCBjb21lZGlhbiBNaWtlIEVwcHMgYW5kIHRoZSAyIHdhbm5hYmUgdGh1Z3MgSnVsaW8gYW5kIFJhbXVuZG8gKHByb3ZpZGluZyBzb21lIGNvbWljIHJlbGllZikuIFRoaXMgaXMgYSBtb3ZpZSB5b3UgY2FuIHdhdGNoIG92ZXIgYWdhaW4tc2F5Li4uIHNvbWUgV2VkbmVzZGF5IG5pZ2h0IHdoZW4gbm90aGluZyBlbHNlIGlzIG9uLiBJIGdhdmUgaXQgYSA5IGZvciBlbnRlcnRhaW5tZW50IHZhbHVlLikAAAAAAAAAQArUBQhBEEEixAVUaGlzIG1vdmllIHN0YXJ0cyBvdXQgYXMgaWYgaXQgd2VyZSBhIGNvbWVkeS4gSXQgYWxtb3N0IGFwcGVhcnMgdGhhdCB0aGUgYWN0b3JzIGFyZSByZWFkaW5nIG9mZiBvZiBjdWUgY2FyZHMsIGVzcGVjaWFsbHkgaW4gdGhlIGFpcnBvcnQgc2VxdWVuY2UuIFdpbGxpYW0gU21pdGggcGxheXMgdGhlIHJvbGUgb2YgIkNhcmliZSwiIGEgaHVudGVyLCB3aG8gaXMgcXVpdGUgdHdpc3RlZCBhbmQgZGVyYW5nZWQuIFNtaXRoIHNlZW1zIHRvIGFsd2F5cyBwbGF5IHZpbGxhaW5zIHN1Y2ggYXMgaW4gIlRoZSBVbHRpbWF0ZSBXYXJyaW9yIiAoMTk3NSksIGFuZCAiVGhlIEZyaXNjbyBLaWQiICgxOTc5KSB0byBuYW1lIGEgZmV3LCBhbHRob3VnaCBpbiB0aGlzIGZpbG0gdGhlIHZpbGxhaW5vdXMgcm9sZSBzZWVtcyBsYXVnaGFibGUuIFRoaXMgaXMgb25lIG9mIHRob3NlIGZpbG1zIHdoZXJlIHNlbnNlbGVzcyB0aGluZ3MgdGFrZSBwbGFjZSBvbmx5IHRvIGZpbGwgdXAgc2NyZWVuIHRpbWUsIHN1Y2ggYXMgdGhlIGdpcmwgY2hhc2luZyBzZXF1ZW5jZSBhdCB0aGUgYmVnaW5uaW5nLCBhbmQgdGhlIGxvbmcgc2lsbHkgbW90b3JjeWNsZSByYWNlLiBJIGdpdmUgdGhpcyBmaWxtIDEvMTAuIEkgd291bGQgaGF2ZSBsaWtlZCB0byBzZWUgdGhpcyBmaWxtIG9uICJNeXN0ZXJ5IFNjaWVuY2UgVGhlYXRyZSIgaXQgd291bGQgaGF2ZSBiZWVuIGhpbGFyaW91cy4pAAAAAAAAAEAKvAgIQhBCIqwIVGhpcyBtb3ZpZSBzdGFydHMgb2ZmIHNvbWV3aGF0IHNsb3dseSBhbmQgZ2V0cyBydW5uaW5nIHRvd2FyZHMgdGhlIGVuZC4gTm90IHRoYXQgdGhhdCBpcyBiYWQsIGl0IHdhcyBkb25lIHRvIGlsbHVzdHJhdGUgY2hhcmFjdGVyIHRyYWl0IGRlZ3Jlc3Npb24gb2YgdGhlIG1haW4gY2hhcmFjdGVyLiBDb25zZXF1ZW50bHksIGlmIHlvdSBhcmUgbm90IGludG8gdHJhZ2VkaWVzLCB0aGlzIGlzIG5vdCB5b3VyIG1vdmllLiBJdCBpcyB0aGUgdGhvdWdodCBwcm92b2tpbmcgcGhpbG9zb3BoeSBvZiB0aGlzIG1vdmllIHRoYXQgbWFrZXMgaXQgd29ydGh3aGlsZS4gSWYgeW91IGxpa2VkIERvc3RveWV2c2t5J3MgJ0NyaW1lIGFuZCBQdW5pc2htZW50LCIgeW91IHdpbGwgcHJvYmFibHkgbGlrZSB0aGlzIGlmIG9ubHkgZm9yIHRoZSBjb21wYXJpc29ucy4gVGhlIGludHJpZ3VpbmcgcXVlc3Rpb24gdGhhdCB0aGUgbW92aWUgcHJvbXB0cyBpcywgIldoYXQgaXMgaXQgdGhhdCBtYWtlcyBhIHJlbm93bmVkIHdyaXRlciBjb21wbGV0ZWx5IGRpc3JlZ2FyZCBoaXMgcHVibGljbHktYXByb3ZlZCBpZGVhcyBmb3IgYW5vdGhlciBzZXQ/IiBUaGUgbmV3IGlkZWFzIGFyZSBxdWl0ZSBvcHBvc2VkIHRvIHRoZSBzdGF0dXMgcXVvLWlmIHlvdSBhcmUgYSBjb25zZXJ2YXRpdmUgeW91IHdpbGwgbm90IGxpa2UgdGhpcyBtb3ZpZS4gPGJyIC8+PGJyIC8+QmVzaWRlcyBvdGhlciBwaGlsb3NvcGhpY2FsIHF1ZXN0aW9ucywgSSBtdXN0IGFkbWl0IHRoYXQgdGhlIG1vdmllIHdhcyBxdWl0ZSBhZXN0aGV0aWNhbGx5IHBsZWFzaW5nIGFzIHdlbGwuIFRoZSBncmFzc3kgaGlsbHNpZGVzIGFuZCBiZWF1dGlmdWwgc2NlbmVyeSBoZWxwZWQgbWUgZ2V0IHBhc3QgdGhlIHNsb3cgc3RhcnQuIEFsc28sIHRoZXJlIHdhcyB1c2Ugb2YgY29sb3JpYyBzeW1ib2xpc20gaW4gcmVwcmVzZW50aW5nIHRoZSBtaW5kc3RhdGUgb2YgdGhlIG1haW4gY2hhcmFjdGVycy4gSWYgdGhlc2Ugc29ydHMgb2YgdGhpbmdzIGRvIG5vdCBpbXByZXNzIHlvdSwgc2tpcCBpdC4gT3ZlcmFsbCBJIGdpdmUgdGhpcyBtb3ZpZSBhIDcuKQAAAAAAAABACrgKCEMQQyKoClRoaXMgbW92aWUgc3RhcnRzIGF0IEEgYW5kIG5ldmVyIHF1aXRlIHJlYWNoZXMgQi4gSXRzIHRpdGxlIHByb21pc2VzIGZhciBtb3JlIHRoYW4gdGhlIGZpbG0gZGVsaXZlcnMuIEl0J3Mgc3VwZXJmaWNpYWwgYW5kIGZpbGxlZCB3aXRoIHRoZSB1c3VhbCBjbGljaGVzIG9mIGEgc3RvcnkgaW4gd2hpY2ggYSBndXkgcXVlc3Rpb25zIGhpcyBzZXh1YWxpdHkuIFRoZSBwZW9wbGUgYXJlIGFncmVlYWJsZSwgZXZlbiB0aGUgb2JsaWdhdG9yeSBmbGFtYm95YW50IHR5cGUuIFRoZSBsZWFkIChLZXZpbiBNY0tpZGQpIG92ZXJhY3RzIGluc29mYXIgYXMgdGhlcmUncyBhIHJlYXNvbiBmb3IgaGltIHRvIGFjdCBhdCBhbGwuIFNpbW9uIENhbGxvdywgcGxheWluZyBhIGhvcm55IHN0cmFpZ2h0LCBpcyBhbHdheXMgd29ydGggd2F0Y2hpbmcsIGFuZCBoZSdzIGJ5IGZhciB0aGUgb25seSByZWFzb24gdG8gc3RheSB3aXRoIHRoZSBtb3ZpZS4gSG93ZXZlciwgdGhlIHJ1YmJpc2ggYWJvdXQgaGlzIG1lbidzIGdyb3VwICJtZWRpdGF0aW9ucyIgb3Igd2hhdGV2ZXIgdGhleSBhcmUgZ3Jvd3MgZXh0cmVtZWx5IHRpcmVzb21lIGluIHNob3J0IG9yZGVyLiBUaGV5IHNlZW0gdG8gaGF2ZSBiZWVuIHRocm93biBpbnRvIHRoZSBtb3ZpZSdzIG1pbGQgbWl4IGluIGEgbWlzZ3VpZGVkIGVmZm9ydCB0byB2YXJ5IHRoZSBzZXR0aW5nIGFuZCBub24tc3RvcCBpbmFjdGlvbi4gVGhlIHNhbWUgY29tbWVudCBhcHBsaWVzIHRvIGEgcmVhbGx5IG9kZCBhbmQgdW5jb252aW5jaW5nIGNhbXBpbmcgdHJpcC4gRG9uJ3Qgd29ycnkgYWJvdXQgcGF1c2luZyB0aGUgdGFwZSBzbyB5b3UgY2FuIGdldCBhIHNuYWNrLiBMZXQgdGhlIHRoaW5nIHJ1bjsgeW91IHdvbid0IG1pc3MgYW55dGhpbmcuIEh1Z28gV2VhdmluZydzIGNoYXJhY3RlciBpcyBzdXBlcmZsdW91cy4gSGUgYXBwZWFycyBpbiBhIHNlcXVlbmNlIHdpdGggb25lIG9mIHRoZSBsZXNzZXIgbGVhZHMgYW5kIGRvZXNuJ3QgZXZlbiBtZWV0IHRoZSByZXN0IGF0IGFsbC4gVGhlIG91dGNvbWUgb2YgdGhhdCBzZXF1ZW5jZSBpc24ndCBleHBsYWluZWQsIGFuZCBIdWdvJ3MgcmVhbCBlc3RhdGUgZGVhbGluZ3MgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggdGhlIHN0b3J5LiBUaGUgbW92aWUgaXMgYSB0b3RhbCBkaXNhcHBvaW50bWVudCBhdCB0aGUgZW5kLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlc29sdXRpb24uIFRoZSB0aGluZyBzaW1wbHkgZmFkZXMgb3V0IGFuZCB3ZSdyZSBzZW50IHRvIHRoZSBjbG9zaW5nIGNyZWRpdHMuIFRoaXMgaXMgYW4gaW50ZXJsdWRlIHdpdGggbm8gc3RydWN0dXJlLikAAAAAAAAAQAqeDQhEEEQijg1UaGlzIG1vdmllIHJlYWxseSBzaG93cyBpdHMgYWdlLiBUaGUgcHJpbnQgSSBzYXcgd2FzIHRlcnJpYmxlIGR1ZSB0byBhZ2UsIGJ1dCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZSBiZXR0ZXIgcHJpbnRzIG91dCB0aGVyZS4gSG93ZXZlciwgdGhpcyB3YXMgbm90IHRoZSBtYWpvciBwcm9ibGVtIHdpdGggdGhlIG1vdmllLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBhbHRob3VnaCB0aGUgZmlsbSB3YXMgbWFkZSBpbiAxOTMzLCBpdCB3YXMgZXNzZW50aWFsbHkgYSBzaWxlbnQgZmlsbSB3aXRoIG9ubHkgdGhlIGJhcmVzdCBvZiBkaWFsb2cgc2NhdHRlcmVkIChvbmx5IGEgZmV3IHNlbnRlbmNlcykgaW4gdGhlIGZpbG0gaW4gdGhlIG1vc3QgYW1hdGV1ciBmYXNoaW9uLiBTb21ldGltZXMgdGhlIGNoYXJhY3RlcnMnIGJhY2tzIHdlcmUgdHVybmVkIG9yIHRoZXkgd2VyZSB0YWxraW5nIHdpdGggdGhlaXIgaGFuZHMgb3ZlciB0aGVpciBmYWNlcy0tYWxsIGluIGEgcGF0aGV0aWMgYXR0ZW1wdCB0byBvYnNjdXJlIHRoZWlyIGxpcHMgYW5kICJjbGVhdmVybHkiICg/KSBoaWRlIHRoZSBmYWN0IHRoYXQgdGhlIGZpbG0gd2FzIGR1YmJlZC4gV2VsbCwgaXRzIHRydWUgdGhhdCB0aGlzIEN6ZWNoIGZpbG0gd291bGQgbmVlZCB0byBiZSBkdWJiZWQgaW50byBtYW55IGxhbmd1YWdlcyBidXQgdG8gZG8gaXQgdGhpcyB3YXkgd2FzIHJlYWxseSBzdHVwaWQgYW5kIG9idmlvdXMuIEl0IGp1c3QgbG9va2VkIGNoZWFwLjxiciAvPjxiciAvPk92ZXJhbGwsIHRoZSBmaWxtIGxvb2tlZCBsb3cgYnVkZ2V0IGFuZCBzaWxseS4gSXQncyByZWFsbHkgYSBzaGFtZSB0aG91Z2gsIGJlY2F1c2UgdGhlcmUgd2FzIGEgZ3JhaW4gb2YgYSBnb29kIHN0b3J5LS1hIHlvdW5nIHdvbWFuIHdobyBtYXJyaWVzIGFuIG9sZGVyIG1hbiB3aG8gaXMgZWl0aGVyIGdheSBhbmQvb3IgaGFzIG5vIGludGVyZXN0IGluIHdvbWVuLiBCdXQgaW4gdGhlIDIxc3QgY2VudHVyeSwgZmV3IHBlb3BsZSB3b3VsZCByZWFsbHkgYmUgd2lsbGluZyB0byBzaXQgdGhyb3VnaCB0aGlzIGFyY2hhaWMgbWVzcy4gRVZFTiB3aXRoIGEgZmV3IGdsaW1wc2VzIG9mIHRoZSBuYWtlZCAoYW5kIHNvbWV3aGF0IGNodW5reSkgSGVkeSBMYW1hcnIsIGl0IGlzbid0IHdvcnRoIGFsbCB0aGUgZnVzcyB0aGF0IGFjY29tcGFuaWVkIHRoZSBmaWxtIHdoZW4gaXQgZGVidXRlZC4gRXZlbiBieSAxOTMzIHN0YW5kYXJkcywgdGhpcyBmaWxtIHdhcyBhIHBvb3JseSBtYWRlIGR1ZC4gQWJvdXQgdGhlIG9ubHkgaW50ZXJlc3RpbmcgdGhpbmcgYWJvdXQgdGhlIGZpbG0gaXMgdG8gc2VlIGhvdyBkaWZmZXJlbnQgTGFtYXJyIGxvb2tlZCBpbiAxOTMzIGNvbXBhcmVkIHdpdGggdGhlIGdsYW1vcm91cyBpbWFnZSBIb2xseXdvb2QgY3JlYXRlZCB3aGVuIHNoZSBjYW1lIHRvIEFtZXJpY2EtLXNoZSBsb29rcyBsaWtlIDIgY29tcGxldGVseSBkaWZmZXJlbnQgcGVvcGxlLjxiciAvPjxiciAvPkl0J3Mgc3VjaCBhbiBpbmNvbXBsZXRlIGxvb2tpbmcgYW5kIHRlY2huaWNhbGx5IGluZmVyaW9yIGZpbG0sIEkgZG9uJ3Qgc2VlIGhvdyBpdCBoYXMgZ290dGVuIHN1Y2ggcmF2ZSByZXZpZXdzLiBGb3IgdGVjaG5pY2FsIHByb2JsZW1zIGFsb25lLCB0aGUgbW92aWUgY2FuJ3QgcmF0ZSBhIDEwIG9yIGFueXRoaW5nIG5lYXIgaXQuKQAAAAAAAABACukDCEUQRSLZA1RoaXMgbW92aWUgcHVycG9ydHMgdG8gYmUgYSBjaGFyYWN0ZXIgc3R1ZHkgb2YgcGVydmVyc2lvbi4gU29tZSByZXZpZXdlcnMgaGF2ZSBiZWVuIGd1bGxlZCBpbnRvIGFzc3VtaW5nIHRoYXQgYmVjYXVzZSBwZXJ2ZXJzaW9uIGlzIGRlcGljdGVkLCB0aGUgZmlsbSBpcyBwc3ljaG9sb2dpY2FsbHkgZGVlcDsgYWN0dWFsbHksIGNvbnNpZGVyaW5nIHRoZSBzYWxhY2lvdXMgbWF0ZXJpYWwsIGl0IGlzIHN1cnByaXNpbmdseSB0ZWRpb3VzIGFuZCBzaGFsbG93LCB3aXRoIG5vIG1vdGl2YXRpb25hbCBzdWJzdGFuY2UuIFdoeSBpcyB0aGUgbWFpbiBjaGFyYWN0ZXIgdGhlIHdheSBzaGUgaXM/IFlvdSB3b24ndCBmaW5kIG91dCBmcm9tIHRoZSBzY3JpcHQuIEZvciBhIGJldHRlciB0cmVhdG1lbnQgb2YgdGhlIHNhbWUgdGhlbWUgKGFuZCBhIG1vcmUgZW50ZXJ0YWluaW5nIG1vdmllKSwgdHJ5IEJ1bnVlbCdzIEJlbGxlIGRlIEpvdXIuKQAAAAAAAABACs8FCEYQRiK/BVRoaXMgbW92aWUgbG9va2VkIGxpa2UgaXQgd2FzIHJ1c2hlZCB0byByZWxlYXNlIGZvciBzb21lIHJlYXNvbi4gRGVmaW5pdGVseSBub3QgYSB3ZWxsIG1hZGUgbW92aWUuIFNvIHVuYmVsaWV2YWJsZS4gVGhlIHNjZW5lcyB3aGVyZSB0aGUgUHJlc2lkZW50IChIb2xicm9vaykgd2VyZSBkb3dudG93biBhbmQgd2Fsa2luZyBhbW9uZyB0aGUgcGVvcGxlIHdlcmUgYSBmYXJjZS4gVGhlcmUgd291bGQgbm90IGJlIGEgY2hhbmNlIGZvciB0aGUgY29tbW9uIGZvbGsgdG8gYmUgd2l0aGluIDMwIHlhcmRzIG9mIHRoZSBQcmVzaWRlbnQgaW4gdGhhdCBzaXR1YXRpb24gaW4gcmVhbCBsaWZlLiBJZiBpdCB3YXNuJ3QgZm9yIHRoZSBibG9vZCBhbmQgcHJvZmFuaXR5LCB0aGlzIHdhcyBzaG90IGxpa2UgYSBUViBtb3ZpZS4gSXQgY291bGQgaGF2ZSBiZWVuIGRlY2VudCBpZiBpdCB3YXMgZG9uZSBkaWZmZXJlbnRseS4gSG9sYnJvb2sncyAoUHJlc2lkZW50KSB0YWxlbnRzIHdlcmUgbmV2ZXIgcmVhbGl6ZWQgaW4gdGhpcyBtb3ZpZS4gU2hhdG5lcidzIGFjdGluZyBpcyBva2F5LiBUaGUgcHJvZHVjdGlvbiB2YWx1ZXMgaW4gdGhpcyBtb3ZpZSBsZWF2ZSBhIGxvdCB0byBiZSBkZXNpcmVkLiBPdmVyYWxsLCBJIHRoaW5rIG1vc3QgcGVvcGxlIHdvdWxkIGJlIGJldHRlciBvZmYgbm90IHdhc3RpbmcgdGltZSB0byB3YXRjaCB0aGlzIGFmZmFpci4pAAAAAAAAAEAK2wIIRxBHIssCVGhpcyBtb3ZpZSBpcyB2ZXJ5IHNjYXJ5IHdpdGggc2NlbmVzIHdoZXJlIHRoZSBEZXZpbCB1c2VzIEdhYnJpZWxzIGhvcm4gdG8gb3BlbiBIZWF2ZW4gYW5kIHB1bGwgdGhlIGdvb2QgYW5nZWwtZG9ncyBvdXQgYW5kIGltcHJpc2lvbiB0aGVtIG9uIEFsa2F0cmF6LiBUaGUgZGV2aWwgc2luZ3MgYW5kIGRhbmNlcyB0byBhIGZldyBzb25ncyBhYm91dCB0aGUgam95cyBvZiBiZWluZyBiYWQsIGFuZCBhdCBvbmUgcG9pbnQsIGVhdHMgYSBsaXZlIHJhdC48YnIgLz48YnIgLz5XZSBnb3QgdGhpcyBtb3ZpZSBmcmVlIHdpdGggYSBwaXp6YS4gWW91IGdldCB3aGF0IHlvdSBwYXkgZm9yLikAAAAAAAAAQAr4BQhIEEgi6AVUaGlzIG1vdmllIGlzIHNvIHVucmVhbC4gRnJlbmNoIG1vdmllcyBsaWtlIHRoZXNlIGFyZSBqdXN0IHdhc3RlIG9mIHRpbWUuIFdoeSB3YXRjaCB0aGlzIG1vdmllPyBFdmVuLCBJIGRpZCBub3Qga25vdy4ud2h5LiBXaGF0PyBUaGUgd2VsbCBrbm93biBzZXggc2NlbmUgb2YgaGFsZi1zaWJsaW5ncz8gQWx0aG91Z2ggdGhlIHNleCBzY2VuZSBpcyBzbyByZWFsIGFuZCBleHBsaWNpdCwgYnV0IHRoZSBzdG9yeSBpdCBpcyBiYXNlZCB1cG9uIGlzIHNvIHVucmVhbC4gV2hhdCBpcyB0aGUgdXNlIG9mIGl0LCB0aGVuPyBDYW4geW91IGZpbmQgZWFzaWx5IGluIGxpZmUsIGhhbGYgc2libGluZyBkb2luZyBzdWNoIHRoaW5ncz88YnIgLz48YnIgLz5EaWQgSSBsZWFybiBzb21ldGhpbmcgZnJvbSB0aGlzIG1vdmllPyBZZWFoOiBzb21lIHBlb3BsZSBhcmUganVzdCBzbyBmb25kIG9mIHdhc3RpbmcgdGltZSBtYWtpbmcgc3VjaCBtb3ZpZXMsIHN1Y2ggc3Rvcmllcywgc3VjaCBub24tc2Vuc2UuIEJ1dCBmb3IgdGhvc2Ugd2hvIGxpa2UgbmloaWxpc20sIG5vdGhpbmduZXNzIGluIGxpZmUsIG9yIHNpbXBseSBhIGxpZmUgd2l0aG91dCBob3BlLCB0aGVuIHRoZXJlIHlvdSBhcmUuLiB5b3UndmUgZ290IHRvIHNlZSB0aGlzIG1vdmllLjxiciAvPjxiciAvPk9ubHkgb25lIHdvcnRoIGFkb3JpbmcsIHRob3VnaDogQ0FUSEVSSU5FIERFTkVVVkUuIFNoZSdzIHN1Y2ggYSBzdHJpa2luZ2x5IGJlYXV0aWZ1bCB3b21hbi4pAAAAAAAAAEAKtAYISRBJIqQGVGhpcyBtb3ZpZSBpcyBhbWF6aW5nLiBZb3Ugd2lsbCBORVZFUiBsYXVnaCBoYXJkZXIuIEl0J3MgYSB0YXJnZXQuIE5vLCBJIHRoaW5rIGl0J3MuLi55ZXMgaXQncy4uLkEgQk9PQiEgVGhpcyBtb3ZpZSBnZXRzIGZ1bm5pZXIgYnkgdGhlIHNlY29uZC0tbGlrZSB3aGVuIEphY2tpZSBDaGFuJ3MgY2hhcmFjdGVyIGZpbmFsbHkgZGllcyBpbiBoaXMgZmluYWwgZmlnaHQgc2NlbmUuIFRoaXMgbW92aWUgaXMgdmVsbHkgdmVsbHkgc2Vla3dldCBsaWtlIHRyZWFzaGEhIENvbmdyYXRzIGlmIHlvdSBidXkgb3IgcmVudCB0aGlzLiBZb3UnbGwgbmV2ZXIgcmV0dXJuIGl0LCBpbiBteSBvcGluaW9uLiBJIGRpZG4ndCwgYW5kIEkgaGF2ZW4ndCBmb3VuZCBpdCBpbiBhIHN0b3JlIHNpbmNlLiBJIHdhdGNoZWQgdGhpcyBtb3ZpZSBvbmNlIGFuZCBJIHdhcyBmb3JldmVyIGluIGxvdmUgd2l0aCBLdW5nLUZ1IGFjdGlvbiBmbGlja3MuIElmIHlvdSdyZSBsb29raW5nIGZvciBhbiBhbWF6aW5nIGZpbG0gaW4gdGhlIHJlYWxtIG9mIGdyZWF0IHByb2R1Y3Rpb24gdmFsdWUsIGdvb2Qgb3IgZXZlbiBtZWRpb2NyZSBhY3RpbmcsIGFuZCBnb29kIHNwZWNpYWwgZWZmZWN0cy4uLnRoaXMgaXMgTk9UIHRoYXQgbW92aWUuIElmIHlvdSdyZSBsb29raW5nIGZvciBsYXVnaHMgYW5kIHRpbWVsZXNzIHdvbmRlcm1lbnQsIHBpY2sgdGhpcyB1cCBmb3IgYSBkb2xsYXIgYW5kIHlvdSdsbCBwcm9iYWJseSBuZXZlciBsZXQgaXQgZ28uIFdpdGggZnJpZW5kcywgcG9wY29ybiBhbmQgZHJpbmtzLCBpdCdzIHRoZSBwZXJmZWN0IGV2ZW5pbmcuKQAAAAAAAABACpEFCEoQSiKBBVRoaXMgbW92aWUgaXMgYSBkaXNncmFjZSB0byB0aGUgTWFqb3IgTGVhZ3VlIEZyYW5jaGlzZS4gSSBsaXZlIGluIE1pbm5lc290YSBhbmQgZXZlbiBJIGNhbid0IGJlbGlldmUgdGhleSBkdW1wZWQgQ2xldmVsYW5kLiAoWWVzIEkgcmVhbGl6ZSBhdCB0aGUgdGltZSB0aGUgcmVhbCBJbmRpYW5zIHdlcmUgcHJldHR5IGdvb2QsIGFuZCB0aGUgVHdpbnMgaGFkIHRha2VuIG92ZXIgdGhlaXIgc3BvdCBhdCB0aGUgYm90dG9tIG9mIHRoZSBBbWVyaWNhbiBMZWFndWUsIGJ1dCBzdGlsbCBiZSBjb25zaXN0ZW50LikgQW55d2F5IEkgbG92ZWQgdGhlIGZpcnN0IE1ham9yIExlYWd1ZSwgbGlrZWQgdGhlIHNlY29uZCwgYW5kIGFsd2F5cyBsb29rZWQgZm9yd2FyZCB0byB0aGUgdGhpcmQsIHdoZW4gdGhlIEluZGlhbnMgd291bGQgZmluYWxseSBnbyBhbGwgdGhlIHdheSB0byB0aGUgc2VyaWVzLiBZb3UgY2FuJ3QgdGVsbCBtZSB0aGlzIHdhc24ndCB0aGUgcGxhbiBhZnRlciB0aGUgc2Vjb25kIGZpbG0gd2FzIGNvbXBsZXRlZC4gV2hhdCBIYXBwZW5lZD8gQW55d2F5cyBpZiB5b3VyIGEgdHJ1ZSBmYW4gb2YgdGhlIG9yaWdpbmFsIE1ham9yIExlYWd1ZSBkbyB5b3Vyc2VsZiBhIGZhdm9yIGFuZCBkb24ndCB3YXRjaCB0aGlzIGp1bmsuKQAAAAAAAABACrkGCEsQSyKpBlRoaXMgbW92aWUgaGFzIG1hZGUgbWUgdXBzZXQhIFdoZW4gSSB0aGluayBvZiBDYXQgaW4gdGhlIGhhdC4gSW0gdGhpbmtpbmcgb2YgY2F0IGluIHRoZSBoYXQgYm9va3MuIFlvdSBrbm93LCB0aGUgb25lIGZyb20gYSBmZXcgeWVhcnMgYmFjayB0aGF0IHBhcmVudHMgcmVhZCB0byB0aGllciBjaGlsZHJlbi4gV2VsbCwgSSB0aG91Z2ggdGhhdCB0aGlzIG1vdmllIHdvdWxkIGJlIGEgbG90IGxpa2UgdGhhdCEgQnV0IG11Y2ggdG8gbXkgc3VwcmlzZSB3YXMgbm90aGluZyBsaWtlIHRoZSBib29rcyEgSW5zdGVkIGl0IGlzIG1vcmUgbGlrZSB5b3VuZyBhZHVsdCBodW1vciBtb3ZpZS4gSW4gb25lIHBhcnQgY2F0IGlzIHRhbGtpbmcgdG8gYSBnYXJkZW5pbmcgdG9vbCAoaG9lKSBjYXQgdGFsa3MgdG8gaXQgbGlrZSBpdCBpcyBoaXMgaG9lIChhZ2luIGFkdWx0IGh1bW9yKS4gdGhlIG5hbWluZyBvZiBoaXMgY2FyIEkgYWxsIHNvIHRob3VnaCB3YXMgYSBsaXR0bGUgdW50YXN0ZnVsIGZvciBhIGtpZHMgbW92aWUuIHVuZGVyIHRoZSByYXRpbmcgeW91J2xsIGZpbmQ6IG1pbGQgY3VkZSBodW1vciBhbmQgc29tZSBkb3VibGUtZW50ZW5kcmVzLiBJIHRoaW5rIGluIHNob3J0IHRoaXMgbWVhbnMgYWR1bHQgaHVtb3IuIEkgd2lzaCBJIGNvdWxkIHJldHVybiB0aGlzIG1vdmllISB3YWwtbWFydCBzYWlkIHRoZXkgd291bGRuJ3QgYmVjYXVzZSB0aGUgbW92aWUgaGFzIGJlZW4gb3BlbmVkLiBJZiB5b3UgYXJlIHRoaW5raW5nIGFib3V0IGJ1eWluZyB0aGlzIEkgc3VnZ2VzdCB0aGF0IG1heWJlIHJlbnQgYmVmb3JlIHlvdSBidXkuKQAAAAAAAABACukCCEwQTCLZAlRoaXMgbW92aWUgaGFzIGV2ZXJ5dGhpbmcgdHlwaWNhbCBob3Jyb3IgbW92aWVzIGxhY2suIEFsdGhvdWdoIHNvbWUgdGhpbmdzIGFyZSBmYXIgZmV0Y2hlZCB3ZSBhcmUgZGVhbGluZyB3aXRoIHF1YWxpdHkgc25vdyBtYW4gZW5naW5lZXJzLiBUaGUgb25seSBwcmV2aWV3IGkgY2FuIHJldmVhbCBpcyB0aGF0IGkgY2FudCB3YWl0IGZvciBKYWNremlsbGEuIERhcmUgaSBzYXkgb3NjYXIgd2lubmVyLiBUaGlzIGlzIGEgcGVyZmVjdCBkYXRlIG1vdmllLiBJIGFkdmlzZSBhbGwgbWVuIGZvciBhIG5pY2Ugcm9tYW50aWMgc3VycHJpc2Ugc2VlIHRoaXMgbW92aWUgd2l0aCB0aGF0IHNwZWNpYWwgcGVyc29uLikAAAAAAAAAQAqRBQhNEE0igQVUaGlzIGlzIHRoZSB3b3JzdCBmaWxtIEkgaGF2ZSBldmVyIHNlZW4sIGJhciBub25lLiBGcm9tIHRoZSBmbGltc3ktbG9va2luZywgcG9vcmx5IGxpdCBzZXRzLCB0byB0aGUgbGF1Z2hhYmxlIGFjdGluZywgdG8gdGhlIGluZmFudGlsZSBwbG90IGFuZCBzaG9kZHksIGRyYXduLW91dCBhY3Rpb24gc2VxdWVuY2VzLCB0aGlzIGZpbG0gaXMgc28gYmFkLCBpdHMgaGlsYXJpb3VzLiBGb3IgYWJvdXQgdGVuIG1pbnV0ZXMuIEFmdGVyIHdoaWNoIHlvdSB3aWxsIGJlIHJlYWNoaW5nIGZvciB0aGUgcmVtb3RlIG9yIHRoZSBwb3dlciBzb2NrZXQgdG8gZW5kIHRoaXMgZmlsbSBub24tZXhwZXJpZW5jZS4gQWx0aG91Z2ggaXQgd2FzIG9idmlvdXNseSBtYWRlIHdpdGggdGhlIGVudGlyZSBwcm9kdWN0aW9uIGFuZCBhY3Rpbmcgc3RhZmYncyBjb2xsZWN0aXZlIHRvbmd1ZSByYW1tZWQgaW4gY2hlZWsgKHBsZWFzZSBHb2QpLCBJIGZvdW5kIEphY2sgRnJvc3QgMiBzbyBkcmVhZGZ1bCBhcyB0byBiZSB1bndhdGNoYWJsZSBmb3IgbW9yZSB0aGFuIGEgcXVhcnRlciBvZiBhbiBob3VyLiBJZiB5b3UgaGF2ZSBub3QgaGFkIGVub3VnaCBvZiBpdCBhZnRlciB0aGlzIHRpbWUsIHlvdSBtdXN0IGJlIGluZHVsZ2luZyBpbiBkcnVnIGFidXNlLikAAAAAAAAAQArtCAhOEE4i3QhUaGlzIGlzIHRoZSBmaW5hbCBlcGlzb2RlIHdlIGRlc2VydmVkLiBBdCB0aGUgZW5kIG9mIHRoZSBsYXN0IHNlYXNvbiwgdGhpbmdzIHdlcmUgbGVmdCBpbiBhICdsaWZlIGdvZXMgb24nIG1vb2QsIHdoaWNoIHdhcyBoYXJkbHkgdGhlIHdyYXAtdXAgdGhhdCB0aGlzIHJlYWxpc3RpYyBzZXJpZXMgZGVzZXJ2ZWQuIFdoaWxlIG5vdCBhIGhhcHB5IHNob3csIHRoaXMgc2VyaWVzIHdhcyBhbHdheXMgb25lIHRoYXQgbWFkZSB5b3UgdGhpbmsgKGEgcmFyZSB0aGluZyBvbiB0ZWxldmlzaW9uKSwgYW5kIHRoaXMgaXMgbm8gZXhjZXB0aW9uLiAnSXMgZGVhdGgganVzdGlmaWVkIGJ5IHJlYXNvbmluZz8nICdBcmUgbW9yYWxzIHJlZmxlY3RpdmUgb2Ygc29jaWV0eSwgb3IgaXMgc29jaWV0eSBzaGFwZWQgYnkgdGhlIG1vcmFscyB0aGF0IGFyZSBzZWxlY3RlZCBieSB0aGUgZmV3IGluIHBvd2VyPycgJ1doYXQgaXMgYSBqdXN0IGRlYXRoLCBhbmQgY2FuIGl0IGV4aXN0PycgQWxsIG9mIHRoZXNlIHF1ZXN0aW9ucywgYW5kIG1vcmUsIGFyZSBwb3NlZCBieSB0aGUgd3JpdGVycyBvZiB0aGlzIHNob3cgZXZlcnkgd2VlaywgYW5kIHRoaXMgaXMgdGhlaXIgZmluYWwgdGhlc2lzLiBGaW5lIGFjdGluZywgZ3JlYXQgd3JpdGluZywgd29uZGVyZnVsIGNhbWVyYS13b3JrLCBicmlsbGlhbnQgZWRpdGluZywgY2xlYW4gZGlyZWN0aW9uLiBJZiB5b3UgaGF2ZSBzZWVuIHRoZSBzZXJpZXMgYW5kIHlvdSBtaXNzZWQgdGhpcyB3aGVuIGl0IGZpcnN0IHJhbiwgdGhlbiBnZXQgYSBob2xkIG9uIGEgY29weSBzb21laG93LiBJZiB5b3UgbmV2ZXIgd2F0Y2hlZCB0aGUgc2VyaWVzIHdoZW4gaXQgcmFuLCB0aGVuIHRoaXMgd2lsbCBzdGFuZCB1cCBvbiBpdHMgb3duLCBidXQgaXQgbWF5IGJlIGhlYXZ5IGdvaW5nIHRyeWluZyB0byBrZWVwIHVwIHdpdGggd2hvIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgYW5kIHdoYXQgdGhleSBhcmUgYWxsdWRpbmcgdG8gaW4gdGhlaXIgdmFyaWVkIHBhc3RzLiBGb3IgdGhvc2Ugb2YgdXMgd2hvIHdlcmUgYXZpZCB2aWV3ZXJzIG9mIHRoZSBzZXJpZXMgaW4gdGhlIGxhc3QgdHdvIHNlYXNvbnMsIHRoaXMgaXMgdmVyeSBzYXRpc2Z5aW5nIHZpZXdpbmcuKQAAAAAAAABACukPCE8QTyLZD1RoaXMgaXMgb25lIG9mIHRob3NlIHN0YXItZmlsbGVkIG92ZXItdGhlLXRvcCBjb21lZGllcyB0aGF0IGNvdWxkIGEpIGJlIGh5c3RlcmljYWwsIG9yIGIpIHdpc2ggdGhhdCB5b3UgaGFkIGdvbmUgdG8gdGhlIGRlbnRpc3QgdG8gaGF2ZSBhbGwgeW91ciB0ZWV0aCBwdWxsZWQgaW5zdGVhZC4gVW5mb3J0dW5hdGVseSwgT25lIE5pZ2h0IGF0IE1jQ29vbCdzIGlzIGEgY2xhc3NpYyAiYi4iPGJyIC8+PGJyIC8+R29sZGllIEhhd24gcmVjZW50bHkgY29tbWVudGVkIGFib3V0ICJUb3duIGFuZCBDb3VudHJ5IiB0aGF0IGl0J3MgYSBiaWcgcHJvYmxlbSBpbiBIb2xseXdvb2QgdGhhdCB0aGV5IHN0YXJ0IHdpdGggaGlyaW5nIHRoZSBhY3RvcnMgYW5kIHB1dHRpbmcgdG9nZXRoZXIgYSBkZWFsIGJlZm9yZSBhIHNjcmlwdCBpcyBjb21wbGV0ZWQuIFlvdSBoYXZlIHRvIGZpZ3VyZSB0aGF0IG5vdCBvbmx5IGRpZCB0aGV5IGdvIGludG8gdGhpcyBwaWN0dXJlIHdpdGhvdXQgYSBjb21wbGV0ZSBzY3JpcHQsIHRoZXkgYWxzbyBtYW5nbGVkIGl0IGRhaWx5LiBNYXliZSB3ZSBuZWVkIHRvIHNlbmQgY2FyZHMgYW5kIGxldHRlcnMgdG8gdGhlIGhlYWRzIG9mIGFsbCB0aGUgc3R1ZGlvIHRoYXQgc2F5LCAiSXQncyB0aGUgc2NyaXB0LCBzdHVwaWQuIiA8YnIgLz48YnIgLz5UaGlzIGlzIGFsc28gb25lIG9mIHRob3NlIG1vdmllcyB3aGVyZSB5b3UgZmluZCB5b3Vyc2VsZiBmZWVsaW5nIHNvcnJ5IGZvciB0aGUgYWN0b3JzIG1vc3Qgb2YgdGhlIHdheSB0aHJvdWdoLiBUaGV5J3JlIHdvcmtpbmcgdGhlaXIgYXNzZXMgb2ZmIHRyeWluZyB0byBtYWtlIGFsbCB0aGlzIHNlZW0gaHlzdGVyaWNhbCwgYnV0IHRoZXkga25vdyBtb3N0IG9mIGl0IGlzIGdvaW5nIHRvIGJlIGFjY29tcGFuaWVkIG5vdCBieSBiZWxseSBsYXVnaHMgYnV0IGJ5IHRoZSBzb3VuZHMgb2YgdGhlIGNyaWNrZXRzIHlvdSBjYW4gaGVhciBpbnNpZGUgdGhlIHNpbGVudCB0aGVhdHJlLjxiciAvPjxiciAvPklzIGl0IGFuIHVubWl0aWdhdGVkIGRpc2FzdGVyPyBOb3QgZW50aXJlbHkuIFRoZXJlIGFyZSBzb21lIHNtaWxlcyBhbG9uZyB0aGUgd2F5LCBtb3N0bHkgZHVlIHRvIHRoZSBlZmZvcnRzIG9mIHRoZSBhY3RvcnMuIEkgcHJvYmFibHkgd291bGQgaGF2ZSBnb25lIG91dCBvZiB0aGUgdGhlYXRyZSB0aGlua2luZywgIkVoLiBJdCB3YXMgb2theS4iIFNvIHdoeSB0aGUgdW5kZW5pYWJseSBob3N0aWxlIHRvbmUgaW4gbXkgcmV2aWV3PyBUaGUgZW5kaW5nLiBJZiwgYXMgaXQncyBiZWVuIG5vdGVkLCB0aGUgcmVzdCBvZiB0aGUgbW92aWUgaXMganVzdCBhbGwgYSBzZXR1cCBmb3IgdGhlIGVuZGluZywgdGhlbiBpdCBtaXNzZXMgc3BlY3RhY3VsYXJseS4gSSByZWFsbHkgd2lzaCBJIGNvdWxkIHNwZWFrIHNwZWNpZmljYWxseSBhYm91dCBpdCwgYnV0IEkgaGF0ZSBwZW9wbGUgd2hvIGdpdmUgdG9vIG11Y2ggYXdheSAoZXZlbiBpbiB3YXJuaW5nKS4gU3VmZmljZSBpdCB0byBzYXkgdGhhdCBhcyBzb29uIGFzIHlvdSBzZWUgSm9obiBHb29kbWFuIGJlaGluZCBhIGJlbnQtb3ZlciBQYXVsIFJlaXNlciAobm90aGluZyBnaXZlbiBhd2F5IGhlcmUuIEl0J3MgaW4gdGhlIHRyYWlsZXIpLCBnZXQgdGhlIGhlbGwgb3V0IG9mIHRoZSB0aGVhdHJlIGFuZCBnbyBvdXQgdGhpbmtpbmcsICJFaC4gSXQgd2FzIG9rYXkuIiBUaGUgcmVzdCBvZiB0aGUgbW92aWUgaXMgdGFja2VkLW9uIGFuZCBjcmVhdGl2ZWx5IGJhbmtydXB0LiBBbmQgeW91J2xsIGJlIGFwcGFsbGVkIHRoYXQgdGhlcmUgd2lsbCBhY3R1YWxseSBiZSBwZW9wbGUgbGF1Z2hpbmcgYXQgdGhpcyBtZXNzLiA8YnIgLz48YnIgLz5JZiB5b3UgbG92ZWQgIlRoZXJlJ3MgU29tZXRoaW5nIEFib3V0IE1hcnkiIG9yICJNZWV0IFRoZSBQYXJlbnRzIiAoYm90aCBHUkVBVCBtb3ZpZXMpLCB0aGVuIGRvbid0IGJvdGhlciB0byBzZWUgdGhpcyBtb3ZpZS4gR28gaGF2ZSB0aG9zZSB0ZWV0aCB0YWtlbiBjYXJlIG9mIGluc3RlYWQuKQAAAAAAAABACtYDCFAQUCLGA1RoaXMgaXMgb25lIG9mIHRoZSBiZXN0IHByZXNlbnRhdGlvbnMgb2YgdGhlIDYwJ3MgcHV0IG9uIGZpbG0uIEFydGh1ciBQZW5uLCBkaXJlY3RvciBvZiBCb25uaWUgYW5kIENseWRlIGFuZCBMaXR0bGUgQmlnIE1hbiwgc2F3IHRoYXQgU3RldmUgVGVzaWNoJ3Mgb3V0c3RhbmRpbmcgc2NyaXB0IHJhbmcgd2l0aCB0cnV0aCwgYW5kIGZyb20gdGhlc2UgdHdvIHRhbGVudHMgY29tZXMgc29saWQgY2luZW1hLiBKb2RpIFRoZWxpbidzIEdlb3JnaWEgTWlsZXMgZ2l2ZXMgbWFsZSB2aWV3ZXJzIGEgaGl0IG9mIHBhaW5lZCBub3N0YWxnaWEgZm9yIHRoZSBhcmNoZXR5cGFsIGJlYXV0eSB3aG8gaXMgYWxtb3N0IHdpdGhpbiBvdXIgZ3Jhc3BzLCBidXQsIGFsd2F5cyBqdXN0IG91dCBvZiByZWFjaC4gSnVzdCBzZWUgaXQsIG9yIHlvdSBjaW5lbWF0aWMgZWR1Y2F0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4pAAAAAAAAAEAKjAcIURBRIvwGVGhpcyBpcyBieSBmYXIgdGhlIG1vc3QgdmFwaWQsIGlkaW90aWMsIGluc2FuZWx5IHN0dXBpZCBzaG93IHRoYXQgaGFzIEVWRVIgYmVlbiBvbiB0aGUgYWlyLCBhbmQgdGhpcyBpcyBjb21pbmcgZnJvbSBzb21lb25lIHdobyByZW1lbWJlcnMgIlNhbiBQZWRybyBCZWFjaCBCdW1zIi48YnIgLz48YnIgLz5NeSB3aWZlIGxvdmVzIHdhdGNoaW5nIHJlYWxpdHkgc2hvd3MtLWFuZCB0aGVyZSB3YXMgb25lIGVwaXNvZGUgb2YgdGhpcyBkcml2ZWwgd2hlcmUgdGhlIHdhbm5hYmVzIGhhZCB0byBkZXZlbG9wIGEgIndhbGsiLiBUaGUgZW5kIHJlc3VsdCB3YXMgc3RyYWlnaHQgb3V0IG9mIE1vbnR5IFB5dGhvbidzICJNaW5pc3RyeSBvZiBTaWxseSBXYWxrcyIgc2tldGNoLiBJIGNvdWxkbid0IGxhdWdoIGhhcmQgZW5vdWdoLjxiciAvPjxiciAvPkFuZCB0aGVuIHRoZXJlJ3MgdGhlIHViaXF1aXRvdXMgTXMuIEJhbmtzIChhcyBpbiBsYXVnaGluZyBhbGwgdGhlIHdheSB0byB0aGUuLi4pLiBTaGUgaGFzIHRvIGJlIHRoZSBtb3N0IGFubm95aW5nIHNlbGYtaW1wb3J0YW50IHdvbWFuIG9uIFRWIHNpbmNlIFJvc2llIE8nRG9ubmVsbCBsZWZ0ICJUaGUgVmlldyIuIEFzIGlmIG1vZGVsaW5nIHdhcyBkb2luZyBncmVhdCB0aGluZ3MgZm9yIG1hbmtpbmQuIFBsZWFzZS4gSSd2ZSBuZXZlciBmb3VuZCBoZXIgYXR0cmFjdGl2ZSwgYW5kIEkgZG9uJ3QgZmluZCBoZXIgaW50ZWxsaWdlbnQgbm93IHRoYXQgc2hlIGhhcyB0aGUgdGVtZXJpdHkgdG8gb3BlbiBoZXIgbW91dGguPGJyIC8+PGJyIC8+U29tZW9uZSBuZWVkcyB0byB0ZWxsIHRoZXNlIGh1bWFuIGNsb3RoZXMgaGFuZ2VycyB0byBlYXQgYSBoZWFsdGh5IGRpZXQgYW5kIGFjdHVhbGx5IGxvb2sgbGlrZSByZWFsIHdvbWVuLikAAAAAAAAAQAqACAhSEFIi8AdUaGlzIGlzIGJldHRlciB0aGVuIHRoZSBmaXJzdC4gVGhlIG1vdmllIG9wZW5zIHVwIHdpdGggU2hlcmlmZiBTYW0gLlRoZW4sIFNhbSBhbmQgQW5uZSBwYWNrIHRoZXJlIGJhZ3MgdXAgYW5kIGhlYWQgdG8gdGhlIFRyb3BpY2FuYSB3aGlsZSBKYWNrIHRhZ3MgYWxvbmcuPGJyIC8+PGJyIC8+UGVvcGxlIGFyZSBzaG90LCBnZXQgZ2xhc3MgdGhyb3VnaCBuZWNrcywgZ2V0IHNxdWlzaGVkIGJ5IGFudmlscywgZ2V0IHN0YWJiZWQgd2l0aCBpY2ljbGVzLCBleWVzIGdvdWdlZCBvdXQsIGhlYWQgZXhwbG9zaW9ucywgZHJvd25pbmdzLCBoYW5naW5ncywgbG9ic3RlcnMgc2hvdmVkIGludG8gZmFjZXMsIHNsaXQgdGhyb2F0cywgZnJlZXppbmcgdG8gZGVhdGgsIGtpbGxlZCBieSBzbm93YmFsbHMsIGFybXMgYXJlIHJpcHBlZCBvZmYsIG1lbHRlZCBieSBhbnRpLWZyZWV6ZSwgaWNpY2xlcyBkb3duIG5lY2tzLCBoaXQgaW4gZmFjZSB3aXRoIHBvdHMgYW5kIHBhbnMsIGZpbmdlcnMgZ2V0dGluZycgYml0dGVuIG9mZiwgaWNpY2xlcyB0aHJvdWdoIG1vdXRocywgYml0dGVuIG9uIHRoZSBuZWNrLCBleHBsb2RpbmcgcGVvcGxlLCB0b2FzdGVkIHNub3diYWxscywgYW5kIHNob3ZlZCBpbiBibGVuZGVycy48YnIgLz48YnIgLz5UaGUgc25vd2JhbGxzIGFyZSBoaWxhcmlvdXMsIHRoZXkgcHV0IGl0IGludG8gYSBibGVuZGVyIGFuZCB0dXJuIGl0IG9uLCB0aGVuIGl0IHNheXMgJ3RoYXQgd2FzIGZ1bicgdGhleSBwdXQgaW4gaW4gYSB3YWZmbGUgdGhpbmcgYW5kIGl0IGdldHMgYnVybnQuIDxiciAvPjxiciAvPlRoaXMgaXMganVzdCBhIGdyZWF0IG1vdmllLiBUaGVuIHRoZXkgc3RhcnQgdGhpbmtpbmcgb2Ygb3RoZXIgd2F5cyB0byBraWxsIGl0LCBhbmQgdGhlIHNub3diYWxsIHJlcGxpZXMsICd0aGF0J3Mgbm90IG5pY2UnPGJyIC8+PGJyIC8+SXQgd2FzIHdvcnRoIHRoZW4gdGVuIGJ1Y2tzIHNwZW50IHRvIGJ1eSB0aGlzLjxiciAvPjxiciAvPjEwIG91dCBvZiAxMCBzdGFycy4pAAAAAAAAAEAKpgcIUxBTIpYHVGhpcyBpcyBhbiBpbmNyZWRpYmxlIHBpZWNlIG9mIGRyYW1hIGFuZCBwb3dlcmZ1bCB3aGljaCBoaXRzIHlvdS4gSSBmb3VuZCB0aGUgZmlsbSB3YXMgZ3JlYXQgYW5kIGdldHRpbmcgdG8gZ3JpcHMgd2l0aCB0aGUgdHdvIG1haW4gY2hhcmFjdGVycyBkaXNhYmlsaXR5LCB0aGlzIHdhcyByZXByZXNlbnRlZCBpbiBhIGdyZWF0IHBlcmZvcm1hbmNlIGJ5IGJvdGggdHdvIE1pY2hhZWwgYW5kIFJvcnkuIFdoZXRoZXIgdGhlIHN0b3J5IGlzIGJhc2VkIGFyb3VuZCBhIHRydWUgc3RvcnkgSSBmZWVsIHRoZSBzdG9yeSB3YXMgdHJ5aW5nIHRvIGdpdmluZyB0aGUgYXVkaWVuY2UgYSBtZXNzYWdlIHRoYXQgYXMgYSB3aG9sZSB0aGUgZ2VuZXJhbCBwdWJsaWMgc2hvdWxkIHJlc3BlY3QgYW5kIGZlZWwgZm9yIHRoZSBuZWVkcyBvZiBkaXNhYmxlZCBwZW9wbGUgYW5kIHRoYXQgdGhleSBzaG91bGQgYmUgZ2l2ZW4gdGhlIHNhbWUgY2hhbmNlIGFzIGFueSBvdGhlciBodW1hbi4gT24gdGhlIHdob2xlIHRoaXMgZmlsbSByZWFjaCBpbnRvIG15IHNvdWwgYW5kIEkgdG9vIGZlbHQgdG91Y2hlZCBieSB0aGUgYWN0b3JzIGFuZCB0aGUgZGlyZWN0b3Igc2VuZGluZyBvdXQgdGhlcmUgY3JlYXRpdml0eS4gVGhlIHdob2xlIHBpY3R1cmUgaXMgdGhhdCBzb21lIGFjdG9ycyB0YWtlIGl0IGJleW9uZCB0aGVpciBjaGFyYWN0ZXIgdGhlIHBsYXkgYW5kIG9ubHkgc2hvdyBwYXJ0IG9mIHRoZSBjaGFyYWN0ZXIgdGhhdCBpcyBiZWxpZXZhYmxlIHRvIHRoZSBhdWRpZW5jZSwgYnV0IEkgZmVlbCB0aGF0IHRoZXNlcyB0d28gY2VydGFpbmx5IG1hZGUgZ3JlYXQgdXNlIGFzIHRoZWlyIGdpZnRlZCB0YWxlbnQgdG8gcG9ydHJheSBhIG1hc3RlcnBpZWNlIHBpZWNlIG9mIGRyYW1hLiBDZXJ0YWlubHkgb25lIG5vdCB0byBiZSBtaXNzZWQhKQAAAAAAAABACtcGCFQQVCLHBlRoaXMgaXMgYW4gRW1wZXJvcidzIE5ldyBDbG90aGVzIHNpdHVhdGlvbi4gU29tZW9uZSBuZWVkcyB0byBzYXkgIlRoYXQncyBub3QgYSBmdW5ueSBhbmQgb3JpZ2luYWwsIChldGMuLCBldGMuKSBmaWxtOyB0aGF0IGlzIGFuIGluZmVyaW9yIGZpbG0uIERvbid0IHdhc3RlIHlvdXIgbW9uZXkgb24gaXQuIiBUaGUgZmlsbSBpcyB0cmFzaHksIGFuZCB0aGUgcGVvcGxlIGluIGl0IGFyZSBlbWJhcnJhc3NpbmdseSBpbmZlcmlvciB0cmFpbGVyIHRyYXNoLiBUaGV5IGFyZSBhbGwtdG9vLXJlYWxpc3RpY2FsbHkgb25seSB0aGVtc2VsdmVzLiBUaGV5IGhhdmUgbm8gbGluZXMsIHRoZXkgZG9uJ3QgYWN0LiBUaGUgQW1lcmljYW4gRHJlYW0gaXMgbm90IHRvIGNyZWF0ZSBzaG9kZHkgbm8tcXVhbGl0eSBmaWxtcyBvciBhbnl0aGluZyBlbHNlIHNob2RkeSBhbmQgb2Ygbm8tcXVhbGl0eTsgaXQgaXMgdG8gYWNoaWV2ZSBzb21ldGhpbmcgb2YgcXVhbGl0eSBhbmQsIHRoZXJlYnksIHN1Y2Nlc3MuIE9ubHkgcGVvcGxlIHdobyBhcmUgZGVzcGVyYXRlIHRvIHByYWlzZSBhbnkgZmlsbSBub3QgbWFkZSBpbiBIb2xseXdvb2QgKGl0IGNhbid0IGhhdmUgYmVlbiBtYWRlIGluIEhvbGx5d29vZCwgY2FuIGl0Pykgd291bGQgdHJ5IHRvIGltcHV0ZSBhbnkga2luZCBvZiBxdWFsaXR5IHRvIHRoaXMgZmlsbS4gSXQncyB3b3JzZSB0aGFuICJFZCBXb29kcywiIGFub3RoZXIgZmlsbSBhYm91dCBhIGZpbG0tbWFrZXIgd2l0aG91dCBzdGFuZGFyZHMuIFRoZXNlIGZpbG1zIHNob3VsZG4ndCBoYXZlIGJlZW4gbWFkZSwgYW5kIHlvdSBzaG91bGRuJ3QgZ28gc2VlICJBbWVyaWNhbiBNb3ZpZS4iKQAAAAAAAABACuoECFUQVSLaBFRoaXMgaXMgYSB0eXBpY2FsICJwZXJmZWN0IGNyaW1lIiB0aHJpbGxlci4gQSBwZXJmZWN0IGNyaW1lIGlzIGV4ZWN1dGVkIGFuZCB0aGUgaW52ZXN0aWdhdGluZyBwb2xpY2Ugb2ZmaWNlciwgaWdub3JpbmcgYWxsIHRoZSBjbHVlcywgaW1tZWRpYXRlbHkga25vd3Mgd2hvIGd1aWx0eSBpcy4gVGhlIGF1ZGllbmNlIGhhcyB0byB3YWl0IGFyb3VuZCB0aGUgd2hvbGUgbW92aWUgZm9yIHRoZSBndWlsdHkgdG8gYmUgY2F1Z2h0LiBUaGUgcmVzdWx0IGlzIGxpa2UgZXZlcnkgc2luZ2xlIGVwaXNvZGUgb2YgIkNvbHVtYm8iIG9yICJtdXJkZXIgc2hlIHdyb3RlIi4gVGhlIGRpcmVjdG9yIGhpbXNlbGYgcmVmZXJzIHRvIHRoZSBoYWNrbmV5IHN0b3J5IGJ5IHNob3dpbmcgdGhlIHBvbGljZSBvZmZpY2VyIHdhdGNoaW5nIGFuIGVwaXNvZGUgb2YgTWF0bG9jayEgVGhpcyBzdG9yeSBiYXJlbHkgZmlsbHMgdXAgOTAgbWludXRlcyBidXQgdGhlIGRpcmVjdG9yIGluc2lzdHMgb24gdXNpbmcgYWxsIDEyMCBtaW51dGVzIGZpbGxpbmcgd2l0aCBldmVyeSBjbGljaGUgaW4gdGhlIGJvb2suIFNraXAgdGhpcyBvbmUsIHlvdSBhcmUgbm90IG1pc3NpbmcgYW55dGhpbmcuKQAAAAAAAABACtAFCFYQViLABVRoaXMgaXMgYSBwYWluZnVsbHkgc2xvdyBzdG9yeSBhYm91dCB0aGUgbGFzdCBkYXlzIG9mIDE5OTkgd2hlbiBhIHN0cmFuZ2UgZGlzZWFzZSBicmVha3Mgb3V0IGFuZC4uLiBJIHN0b3BwZWQgY2FyaW5nLiBUaGlzIGlzIHN1cHBvc2UgdG8gYmUgYWJvdXQgdHdvIHBlb3BsZSB3aG8gbGl2ZSBvdmVyIG9yIHVuZGVyIGVhY2ggb3RoZXIgaW4gYW4gYXBhcnRtZW50IGNvbXBsZXguIFRoZXJlJ3MgYSBsZWFrIGFuZCBhIHBsdW1iZXIgcHV0IGEgaG9sZSBpbiB0aGUgbWFuJ3MgZmxvb3Igc28geW91IGNhbiBzZWUgaW50byB0aGUgd29tYW4ncyBiZWxvdyBhcGFydG1lbnQuIEFsc28gc2luY2UgdGhlcmUgaXMgYSBjcmlzaXMgZ29pbmcgb24gbXVjaCBvZiB0aGUgZGlhbG9nIGlzIGFjdHVhbGx5IG5ld3MgcmVwb3J0cy4uLjxiciAvPjxiciAvPlNvdW5kcyBwcm9taXNpbmc/PGJyIC8+PGJyIC8+Tm90IHJlYWxseS48YnIgLz48YnIgLz5JIGJlY2FtZSBkaXN0cmFjdGVkIGFuZCBzdGFydGVkIGRvaW5nIG90aGVyIHRoaW5ncyB3aGljaCBpcyBkZWFkbHkgaW4gYSBzdWJ0aXRsZWQgZmlsbS4gQmFzaWNhbGx5IEkgc3RhcnRlZCBub3Qgd2F0Y2hpbmcsIHdoaWNoIG1hZGUgZXZlbnRzIHNlZW0gZXZlbiBtb3JlIHN1cnJlYWwgd2hlbiBJIGRpZCBsb29rIHVwLjxiciAvPjxiciAvPkl0IG1heSB3b3JrIGZvciB5b3UsIGl0IGRpZG4ndCBmb3IgbWUuKQAAAAAAAABACvkGCFcQVyLpBlRoaXMgaXMgYSBuZXcgQmFyYmllIG1vdmllLiBUaGUgZ3JhcGhpY3Mgd2VyZSByZWFsbHkgZ29vZC4gVGhleSBtYWRlIHRoZSBtb3ZpZSBzZWVtIHBhcnRpYWxseSByZWFsaXN0aWMuIEkgdXNlZCB0byBkbyBiYWxsZXQgYW5kIHRoaXMgbW92aWUgbWFkZSBtZSB3YW50IHRvIGNvbnRpbnVlIGl0LiBUaGlzIG1vdmllIHdhcyBraW5kIG9mIGxpa2UgYSBDaW5kZXJlbGxhIG1vdmllIGJ1dCBhIGxpdHRsZSBiaXQgZGlmZmVyZW50LiBBIGZhdGhlciBvZiAxMiBwcmluY2Vzc2VzIGdldHMgdmVyeSBzaWNrLiBIaXMgY291c2luIHBvaXNvbnMgaGltIGFuZCB3YW50cyB0aGUgdGhyb25lLiBUaGUgZ2lybHMgZmluZCBhIHNlY3JldCBtYWdpY2FsIGxhbmQgdGhhbmtzIHRvIHRoZWlyIGRlYWQgbW90aGVyJ3Mgc3Rvcmllcy4gSXRzIHVwIHRvIHRoZW0gdG8gc2F2ZSB0aGVpciBmYXRoZXIgYW5kIHNvY2lldHkuIFdpdGggdGhlIGhlbHAgb2YgdGhlaXIgaGFuZHNvbWUgcHJpbmNlLiBJdCB3YXMgYSBmdW5ueSBtb3ZpZSBhbmQgbWUgYW5kIG15IGZyaWVuZCBoYWQgZnVuIHdhdGNoaW5nIGl0LiBXZSBlbmpveWVkIGl0IGEgbG90IGFuZCBhbHNvIGVuam95ZWQgdGhlIEluZGlhbiB0YWxraW5nIHBhcnJvdC4gVGhlIG11c2ljIHdhcyB2ZXJ5IG5pY2UgYW5kIG1hZGUgdGhlIG1vdmllIGV2ZW4gZ3JlYXRlci4gSXQgaGFkIGEgZ3JlYXQgY2xhc3NpY2FsIG9yY2hlc3RyYS4gVGhlIHZvaWNlcyB3ZXJlIGdyZWF0IGFuZCB0aGUgY2hhcmFjdGVycyB3ZXJlIGFkb3JhYmx5IHN3ZWV0IGFuZCBjdXRlLiBJIGxpa2VkIGl0IHNvIGVuam95IHRoZSBtb3ZpZSBpdHMgZ3JlYXQgZm9yIHRoZSBmYW1pbHkuIEFsbCBpbiBhbGwgSSdkIHdhdGNoIGl0IGFnYWluLikAAAAAAAAAQArqBwhYEFgi2gdUaGlzIGluc2lwaWQgbWluaSBvcGVyZXR0YSBmZWF0dXJpbmcgYSBFZGR5LU1jRG9uYWxkIHByb3RvdHlwZSBpbiBhIFZhbGVudGlubyBzY2VuYXJpbyBpcyBzbyBiYWQgaXQgYmVjb21lcyBhbiBlbmR1cmFuY2UgZXhlcmNpc2UgYWZ0ZXIgZml2ZSBtaW51dGVzLiBJdCdzIHNpbGx5IGZyb20gdGhlIGdldCBnbyBhcyB0aGlzIGJyZXZpdHkgb3BlbnMgdHdvIG1pbGl0YXJ5IG1lbiBkaXNjdXNzaW5nIHRoZSBsYWNrIG9mIG1hbmxpbmVzcyBpbiB0aGUgc29uIG9mIG9uZSBvZiB0aGUgb2ZmaWNlcnMuIEluIHVuZGVyIGEgbWludXRlIGhlIGlzIHBhY2tlZCBvZmYgdG8gTW9ycm9jY28gd2hlcmUgaGUgbGl2ZXMgYSBkb3VibGUgbGlmZSBhcyB0aGUgUmVkIFNoYWRvdzsgdGhlIGxlYWRlciBvZiBhbiBBcmFiIHRyaWJlIHRoYXQgd291bGQgcmF0aGVyIHNpbmcgdGhhbiBmaWdodC48YnIgLz48YnIgLz5BbGV4YW5kZXIgR3JheSBhbmQgQmVybmljZSBDbGFyZSBwb3NzZXNzIGZpbmUgbGlnaHQgb3BlcmEgdm9pY2VzICh3aXRoIGxpdHRsZSBhY3RpbmcgYWJpbGl0eSkgYW5kIHRoZXJlJ3MgYSBkZWNlbnQgYmFzcyBpbiB0aGVyZSBhcyB3ZWxsIGJ1dCB0aGUgYWN0aW5nIGlzIHNvIGhhcGhhemFyZCBzY2VuZXMgc28gaWxsIHByZXBhcmVkIHlvdSBnZXQgdGhlIGZlZWxpbmcgdGhleSBhcmUgbWFraW5nIHRoaW5ncyB1cCBhcyB0aGV5IGdvIGFsb25nLjxiciAvPjxiciAvPlRoaXMgdHdvIHJlZWxlciB3YXMgcGFydCBvZiBhIGxhcmdlciBzdGFnZSBwcm9kdWN0aW9uIHRoYXQgbGlzdHMgc2l4IHdyaXRlcnMuIFdpdGggbW9yZSByb29tIHRvIHNwb29mIGFuZCB3YXJibGUgdGhlIHNob3cgbWF5IGhhdmUgaGFkIHNvbWUgZW50ZXJ0YWlubWVudCB2YWx1ZXMgYnV0IHRoaXMgcnVzaGVkIHF1aWNraWUgaXMgbGl0dGxlIG1vcmUgdGhhbiBhbiBpbnN1bHQgdG8gYW4gYXVkaWVuY2Ugd2FpdGluZyBmb3IgdGhlIGZlYXR1cmUgcHJlc2VudGF0aW9uLikAAAAAAAAAQAqtBQhZEFkinQVUaGlzIGhhcyBnb3QgdG8gYmUgdGhlIHdvcnN0IHNob3cgSSBoYXZlIGV2ZXIgc2Vlbi4gSSBhbHdheXMgbGlrZWQgQ2h1Y2sgTm9ycmlzIGluIEZpbG1zLCBidXQgd2h5IGRvIHdlIG5lZWQgdG8gbWFrZSB0aGVzZSBzaG93cyBwb2xpdGljYWxseSBjb3JyZWN0IGJ5IGFkZGluZyBhIGJsYWNrIHNpZGUga2ljayB3aG8gaXMgYXMgdGhyZWF0ZW5pbmcgYXMgU2hpcmxleSBUZW1wbGUgaW4gTGl0dGxlIE1pc3MgTWFya2VyLiBJIGFsc28gdGhvdWdodCB0aGUgc2hvdyB3YXMgbGltaXRlZCBiZWNhdXNlIGhvdyBtYW55IHRpbWVzIGNhbiB5b3Uga2ljayBhIGd1eSBpbiB0aGUgZmFjZSBhbmQgbWFrZSBpdCBpbnRlcmVzdGluZy4gSSBrbm93IGFuIEFmcmljYW4gQW1lcmljYW4gd2hvIGxvb2tzIGxpa2UgdGhpcyBUcml2ZXR0ZSBndXkgYW5kIGhlIGdldHMgaGlzIGJ1dHQga2lja2VkIGFib3V0IG9uY2UgYSB3ZWVrIGhlIGlzIGFsbCBhdHRpdHVkZS48YnIgLz48YnIgLz5DaHVjayBOb3JyaXMgaXMgdGhlIG1hbiBhbmQgaGUgZGVzZXJ2ZXMgYWxsIHRoZSBrdWRvcyBoZSBnZXRzLCBJIHRoaW5rIHRoaXMgc2hvdyBzdGFydGVkIGdyZWF0IGJ1dCBsb3N0IHN0ZWFtIGFzIHRpbWUgd2VudCBvbjxiciAvPjxiciAvPlRoZXkgc2hvdWxkIGhhdmUgZHVtcGVkIENodWNrcyBzaWRlIGtpY2spAAAAAAAAAEAKqgUIWhBaIpoFVGhpcyBndXkgaGFzIG5vIGlkZWEgb2YgY2luZW1hLiBPa2F5LCBpdCBzZWVtcyBoZSBtYWRlIGEgZmV3IGludGVyZXN0aWcgdGhlYXRlciBzaG93cyBpbiBoaXMgeW91dGgsIGFuZCBhYm91dCB0d28gYWNjZXB0YWJsZSBtb3ZpZXMgdGhhdCBoYWQgc3VjY2VzcyBtb3JlIG9mIHBvbGl0aWNhbCByZWFzb25zIGNhdXNlIHRoZXkgdHJpY2tlZCB0aGUgY29tbXVuaXN0IGNlbnNvcnNoaXAuIFRoaXMgYWxsIGlzIHZlcnkgZ29vZCwgYnV0IGxvb2sgY2FyZWZ1bGx5OiBIRSBET0VTIE5PVCBLTk9XIEhJUyBKT0IhIFRoZSBzY2VuZXMgYXJlIHVuYmFsYW5jZWQsIHdpdGhvdXQgcHJvcGVyIHN0YXJ0IGFuZCBhbmQsIHdpdGggYSBkaXNvcmRlcmVkIGNvbnRlbnQgYW5kIGZ1bGwgb2YgZW1wdGluZXNzLiBIZSBoYXMgbm90aGluZyB0byBzYXkgYWJvdXQgdGhlIHN1YmplY3QsIHNvIGhlIG92ZXItbGljaXRhdGVzIHdpdGggdmlvbGVuY2UsIG5ha2VkbmVzcyBhbmQgZ3V0dGVyIGxhbmd1YWdlLiBIb3cgaXMgaXQgcG9zc2libGUgdG8ga2VlcCBhbGl2ZSBzdWNoIGEgcm90dGVuIGNvcnBzZSB3aG8gbmV2ZXIgdW5kZXJzdG9vZCBhbnl0aGluZyBvZiBjaW5lbWF0b2dyYXBoaWMgcHJvZmVzc2lvbiBhbmQgYXJ0PyBXaHkgZG9uJ3QgdGhleSBsZXQgaGltIHN1Y2N1bWIgaW4gcGllY2U/KQAAAAAAAABACugKCFsQWyLYClRoaXMgZmlsbSB3YXMgc28gYW1hdGV1cmlzaCBJIGNvdWxkIGhhcmRseSBiZWxpZXZlIHdoYXQgSSB3YXMgc2VlaW5nLiBJdCBpcyBzaG90IG9uIFZJREVPISBOT1QgZmlsbSEgSSBoYXZlIG5vdCBzZWVuIHRoZSBsaWtlcyBvZiB0aGlzIHNpbmNlIHRoZSBlYXJseSA3MCdzLCB3aGVuIGxhdGUgbmlnaHQgbmV0d29ya3Mgc2hvd2VkIG1vdmllIG9mIHRoZSB3ZWVrICdob3Jyb3IgZmxpY2tzJyBzaG90IGluLi4uLi4udmlkZW8uIEl0IGxvb2tzIGxpa2UgYSBiYWQgc29hcCBvcGVyYSwgYW5kIHRoYXQgaXMgcGF5aW5nIGl0IGEgY29tcGxpbWVudC4gU29tZSBvZiB0aGUgYWN0b3JzIGdpdmUgaXQgdGhlaXIgYmVzdCBzaG90LiBNaWNoYWVsIERlcyBCYXJyZXMgZG9lcyBva2F5IHdpdGggd2hhdCBoZSBpcyBnaXZlbiB0byBkbywgd2hpY2ggaXMgdG8gYWN0IGxpa2UgYSBzZXggYWRkaWN0IG91dCBvZiBjb250cm9sLiBJIGNhbid0IHNheSB0aGF0IGl0IGlzIHBsZWFzYW50IHRvIHdhdGNoLjxiciAvPjxiciAvPk5hc3Rhc3NqYSBLaW5za2kgYXMgdGhlIHRoZXJhcGlzdCBzaXRzIGluIGEgY2hhaXIgZm9yIHByYWN0aWNhbGx5IHRoZSBlbnRpcmUgZmlsbSwgd2l0aCB2ZXJ5IGxpdHRsZSB2YXJpYXRpb24gaW4gY2FtZXJhIGFuZ2xlcy4gSSBjYW4ndCBmYXVsdCBoZXIgZm9yIHNvbWVvbmUgZWxzZSdzIHBvb3IgYmxvY2tpbmcsIGJ1dCBzaGUgaXMgdG90YWxseSB1bmJlbGlldmFibGUgaW4gaGVyIHJvbGUuIEhlciBsaXR0bGUgZ2lybCB2b2ljZSB3b3JrcyBhZ2FpbnN0IGhlciBoZXJlLiBBbmQgSSBjb25zaWRlciBteXNlbGYgYSBOYXN0YXNzamEgS2luc2tpIGZhbi4gU2hlIGlzIGNlcnRhaW5seSBhZ2VsZXNzIGFuZCBleG90aWMsIGJ1dCBzaGUncyBvdXRzaWRlIGhlciByYW5nZSB3aXRoIHRoaXMuPGJyIC8+PGJyIC8+QWxleGFuZHJhIFBhdWwgaXMgcGF0aGV0aWNhbGx5IG92ZXJ3cm91Z2h0LiBFdmVyeSBsaW5lIHNoZSBkZWxpdmVycyBpcyB3aXRoIHRocmVlIGV4Y2xhbWF0aW9uIHBvaW50cy4gU29tZW9uZSBtdXN0IGhhdmUgZGlyZWN0ZWQgaGVyIHRvIHNjcmVhbSBhdCBhbGwgY29zdHMuIFdoeSB3b3VsZCBNaWNoYWVsIERlcyBCYXJyZXMgd2FudCB0byBoYXZlIHNleCB3aXRoIHN1Y2ggYSByYWdpbmcgc2hyZXc/PGJyIC8+PGJyIC8+RmluYWxseSwgUm9zYW5uYSBBcnF1ZXR0ZSBhcyB0aGUgc3dlZXQsIG1hbGlnbmVkIHdpZmUgY29tZXMgb2ZmIG9rYXksIGFuZCBwcm9iYWJseSB0aGUgbW9zdCBiZWxpZXZhYmxlIG9mIHRoZSBidW5jaC4gQnV0IHRoYXQgaXMgbm90IHNheWluZyBtdWNoLjxiciAvPjxiciAvPlRoaXMgaGFzIHRvIGJlIHRoZSB3b3JzdCBmaWxtIEkgaGF2ZSBzZWVuIGluIHllYXJzLikAAAAAAAAAQAqiDQhcEFwikg1UaGlzIGZpbG0gbWFya2VkIHRoZSBlbmQgb2YgdGhlICJzZXJpb3VzIiBVbml2ZXJzYWwgTW9uc3RlcnMgZXJhIChBYmJvdHQgYW5kIENvc3RlbGxvIG1lZXQgdXAgd2l0aCB0aGUgbW9uc3RlcnMgbGF0ZXIgaW4gIkFiYm90dCBhbmQgQ29zdGVsbG8gTWVldCBGcmFua2VudHN0ZWluIikuIEl0IHdhcyBhIHNvbWV3aGF0IGRlc3BhcmF0ZSwgeWV0IGZ1biBhdHRlbXB0IHRvIHJldml2ZSB0aGUgY2xhc3NpYyBtb25zdGVycyBvZiB0aGUgV29sZiBNYW4sIEZyYW5rZW5zdGVpbidzIG1vbnN0ZXIsIGFuZCBEcmFjdWxhIG9uZSAibGFzdCIgdGltZS48YnIgLz48YnIgLz5JIHNheSBkZXNwYXJhdGUsIGJlY2F1c2UgaW4gdGhlIHByZXZpb3VzIGZpbG0sICJIb3VzZSBvZiBGcmFua2Vuc3RlaW4sIiBib3RoIERyYWN1bGEgYW5kIHRoZSBXb2xmIE1hbiBhcmUga2lsbGVkIGFjY29yZGluZyB0byBob3cgdGhlIHZhbXBpcmUgYW5kIHdlcmV3b2xmIGxlZ2VuZHMgc2F5IHRoZXkgc2hvdWxkIGJlIChEcmFjdWxhIGJ5IHRoZSBzdW5saWdodCwgYW5kIHRoZSB3b2xmIG1hbiBieSBhIHNpbHZlciBidWxsZXQpLiBZZXQgc29tZWhvdyB0aGV5IHJldHVybiBpbiBIb3VzZSBvZiBEcmFjdWxhIHdpdGggbm8gZXhwbGFuYXRpb24uIFRoaXMgbW92aWUgY291bGQgaGF2ZSBwbGF5ZWQgYXMgYSBraW5kIG9mIHByZXF1ZWwgdG8gSG91c2Ugb2YgRnJhbmtlbnN0ZWluIGlmIHRoZSBGcmFua2Vuc3RlaW4gbW9uc3RlciBwbG90IHdvdWxkbid0IGJlIGNvbnRpbnVpbmcgY2hyb25vbG9naWNhbGx5IGludG8gSG91c2Ugb2YgRHJhY3VsYSBmcm9tIEhvdXNlIG9mIEZyYW5rZW5zdGVpbiwgYW5kIGlmIHRoZSB3b2xmIG1hbiBkaWRuJ3QgZ2V0IGN1cmVkLiBUaGVuIHRoZXJlJ2QgYmUgbm8gcGxvdCBob2xlcy4gQnV0IHNpbmNlIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB0aGUgcGxvdHMgb2YgRHJhY3VsYSBhbmQgdGhlIFdvbGYgTWFuIG1ha2Ugbm8gc2Vuc2UuPGJyIC8+PGJyIC8+SG93ZXZlciwgaWdub3JpbmcgdGhlc2UgcGxvdCBob2xlcywgSG91c2Ugb2YgRHJhY3VsYSBpcyBhIGNsYXNzaWMgYXRtb3NwaGVyaWMgaG9ycm9yIGZpbG0gdGhhdCdzIGZ1biB0byB3YXRjaC4gSXQgaGFzIG1hbnkgaGlnaCBwb2ludHMuIEVzcGVjaWFsbHkgc2VlaW5nIHRoZSB3b2xmIG1hbiBnZXQgY3VyZWQuIEkga25vdyBJIGp1c3Qgc2FpZCB0aGF0IHRoaXMgc2hvdWxkbid0IGhhdmUgYmVlbiBpbmNsdWRlZCwgYnV0IGl0IHdhcyBuaWNlIHRvIGFjdHVhbGx5IHNlZSBoaW0gZ2V0IGN1cmVkIGFmdGVyIGFsbCB0aGlzIHRpbWUuIEFuZCB0aGUgc2NlbmUgd2l0aCB0aGUgbGFkeSBwbGF5aW5nICJNb29ubGlnaHQgU2VuYWRhLCIgb24gdGhlIHBpYW5vIHRoZW4gYWxsIG9mIGEgc3VkZGVuIHBsYXlpbmcgYSBoYXVudGluZyBtZWxvZHkgd2hlbiB1bmRlciBEcmFjdWxhJ3Mgc3BlbGwgd2FzIHZlcnkgZWVyaWUuIERyLiBFZGxlbWFuJ3MgdHJhbnNmb3JtYXRpb24gaW50byB0aGUgIkRyLiBKZWt5bC9Nci4gSHlkZSIgdHlwZSBjaGFyYWN0ZXIgd2FzIGFsc28gZG9uZSB2ZXJ5IHdlbGwuPGJyIC8+PGJyIC8+QW5kIGl0J3MgZ3JlYXQgdG8gc2VlIERyYWN1bGEsIEZyYW5rZW5zdGVpbiwgYW5kIHRoZSBXb2xmIE1hbiB0b2dldGhlciwgb25lICJsYXN0IiB0aW1lLjxiciAvPjxiciAvPioqKiBvdXQgb2YgKioqKikAAAAAAAAAQArlDAhdEF0i1QxUaGlzIGZpbG0gaXMgc28gYmFkIGFuZCBnZXRzIHdvcnNlIGluIGV2ZXJ5IGltYWdpbmFibGUgZmFzaGlvbi4gSXRzIG5vdCBqdXN0IHRoZSBwb29yIGFjdGluZyBhbmQgc2NyaXB0IG5vciBpcyBpdCB0aGUgbGFtZSBhbmQgcGVydmVyc2UgdGltZSBvbmUgd2FzdGVzIG9uIHdhdGNoaW5nIGl0LiBXaGF0IHJlYWxseSBwdXRzIHRoaXMgZmlsbSBpbiBteSBoYWxsIG9mIHNoYW1lIGlzIHRoZSBhcHBhcmVudCBzdHJ1Z2dsaW5nIHRoYXQgdGhlIHdyaXRlcnMgYW5kIHByb2R1Y2VycyBkbyB3aXRoIHRoZSBmaWxtIHRvIHRyeSBhbmQgbWFrZSBpdCBmdW5ueS4gVGhlIGFjdHJlc3MgcmVwbGFjaW5nIEplYW4gUmVubydzIGRlc2NlbmRhbnQgaXMgdG8gb2xkIGFuZCBsZWFybmVkIGhlciBsZXNzb24gaW4gdGhlIGZpcnN0IGZpbG0gc28gdGhleSBhZGQgYSBuZXcgZ2lybCB3aG8gaXMgdG8gYmUgbWFycmllZC4gTmVhcmx5IGFsbCBvZiB0aGUgb3JpZ2luYWwgZXh0cmFzIGFuZCBnYWdzIHJldHVybiBob3dldmVyIHRoaXMgdGltZSBtYWtlcyBtZSB3YW50IHRvIHJpcGUgbXkgZXllcyBvdXQgb2YgbXkgc29ja2V0cyBiZWNhdXNlIGl0J3MgYSB3YXN0ZSBvZiBwZXJmZWN0bHkgZ29vZCBmaWxtLiBUaGUgdG9ydHVyZSBvZiB0aGUgY29uc3RhbnQgY2FtZXJhIGN1dHMgYW5kIHNob3RzIGluIGFueSBzY2VuZSBpbiB0aGlzIG1vdmllIGNhbiBwdXQgdGhlIHZpZXdlciBpbnRvIHZpb2xlbnQgY29udm9sdXRpb25zLiBUaGlzIHNlY29uZCBmaWxtIHRha2VzIHRoZSBzdWNjZXNzZnVsIG9yaWdpbmFsIGFuZCBkcmFncyBpdCBvdXQgb2YgaXRzIGNvZmZpbiBhbmQgcGFyYWRlcyB0aGUgY29ycHNlIG91dCBpbiB0aGUgcHVibGljIHNxdWFyZSBhbmQgcGVydmVyc2VseSBkZWdyYWRlcyBub3Qgb25seSB0aGUgb3JpZ2luYWwgaWRlYSBhbmQgaXRzIGxlZ2FjeSBidXQgb3VyIGludGVsbGlnZW5jZSBhcyB3ZWxsLiBUaGlzIGZpbG0gdW5saWtlIHRoZSBzcHJ1Y2UgZ29vc2UgY291bGQgbm90IGZseSBmb3IgaXQgaGFkIG5vIHBsb3QgaW4gdGhlIHByaW5jaXBhbHMgcmV0dXJuaW5nIGZvciBhICduZWNrbGFjZScuIE5vIHNjcmlwdCBzaW5jZSBpdCB3YXMgYXBwYXJlbnRseSB3cml0dGVuIGFuZCBhZGRlZCB0byBkYWlseS4gTm8gYXR0ZW50aW9uIHRvIGNhbWVyYSBvciBzaG90cyBpbiBtaW5kLiBQb29yIGxpZ2h0aW5nIGFuZCBzcGVjaWFsIGVmZmVjdHMgZG9uZSBmb3IgdGhlIHNha2Ugb2YgZG9pbmcgc28uIFRoaXMgZmlsbSB3b3VsZCBub3QgZXZlbiBwYXNzIGZvciBhIHN0dWRlbnQgZmlsbSBpbiBiYXNpYyBGaWxtIDEwMS4gSG93IHRoaXMgcGlsZSBnb3QgdGhyb3VnaCBubyBvbmUgY2FuIHRlbGwuIEl0IHdhcyBhIGJpZyBsb29zaW5nIGludmVzdG1lbnQgYW5kIGl0IGFwcGVhcnMgdGhhdCBubyBvbmUgaGFkIHRoZSBzdHJlbmd0aCB0byBwdXQgdGhpcyB1bm5hdHVyYWwgY3J1ZWwgbWlzdGFrZSBvdXQgb2Ygb3VyIG1pc2VyaWVzLiBUaGlzIG1vdmllIGhhcyBvbmUgZ29vZCBwYXJ0IC4uLml0cyBFTkQhIFRoaXMgZmlsbSBpcyBteSAjMSB3b3JzdCBmaWxtIG9mIGFsbCB0aW1lLCBmaW5hbGx5ICJIb3dhcmQgVGhlIER1Y2siIGlzIG5vIGxvbmdlciB0aGUgZ29vc2UuKQAAAAAAAABACpcVCF4QXiKHFVRoaXMgZmlsbSBpcyBidW5kbGVkIGFsb25nIHdpdGggIkdsaSBmdW1hdmFubyBsZSBDb2x0Li4uIGxvIGNoaWFtYXZhbm8gQ2FtcG9zYW50byIgYW5kIGJvdGggZmlsbXMgbGVhdmUgYSBsb3QgdG8gYmUgZGVzaXJlZCBpbiB0aGUgd2F5IG9mIHRoZWlyIERWRCBwcmludHMuIEZpcnN0LCBib3RoIGZpbG1zIGFyZSB2ZXJ5IGRhcmstLW9jY2FzaW9uYWxseSBtYWtpbmcgaXQgaGFyZCB0byBzZWUgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nLiBTZWNvbmQsIG5laXRoZXIgZmlsbSBoYXMgc3VidGl0bGVzIGFuZCB5b3UgYXJlIGZvcmNlZCB0byB3YXRjaCBhIGR1YmJlZCBmaWxtLS10aG91Z2ggIklsIFByZXp6byBkZWwgUG90ZXJlIiBkb2VzIHNlZW0gdG8gaGF2ZSBhIGJldHRlciBkdWIuIFBlcnNvbmFsbHksIEkgYWx3YXlzIHByZWZlciBzdWJ0aXRsZXMgYnV0IGZvciB0aGUgbm9uLXB1cmlzdHMgb3V0IHRoZXJlIHRoaXMgaXNuJ3QgYSBwcm9ibGVtLiBUaGVzZSBEVkQgcHJvYmxlbXMsIGhvd2V2ZXIsIGFyZSBub3QgdGhlIGZhdWx0IG9mIHRoZSBvcmlnaW5hbCBmaWxtIG1ha2Vycy0tanVzdCB0aGUgaW5kaWZmZXJlbnQgcGFja2FnZSBiZWluZyBtYXJrZXRlZCBmb3VyIGRlY2FkZXMgbGF0ZXIuPGJyIC8+PGJyIC8+QXMgZm9yIHRoZSBmaWxtLCBpdCdzIGFib3V0IHRoZSBhc3Nhc3NpbmF0aW9uIG9mIFByZXNpZGVudCBHYXJmaWVsZC4gVGhpcyBpcyBhIE1BSk9SIHByb2JsZW0sIGFzIFZhbiBKb2huc29uIGxvb2tzIGFib3V0IGFzIG11Y2ggbGlrZSBHYXJmaWVsZCBhcyBKdWR5IEdhcmxhbmQuIEluIG5vIHdheSB3aGF0c29ldmVyIGRvZXMgaGUgbG9vayBsaWtlIEdhcmZpZWxkLiBIZSdzIG1pc3NpbmcgdGhlIGJlYXJkLCBoYXMgdGhlIHdyb25nIGhhaXIgY29sb3IgYW5kIHN0eWxlIGFuZCBpcyBqdXN0IG5vdCBldmVuIGNsb3NlIGluIGFueSB3YXkgKHRydXN0IG1lIG9uIHRoaXMsIEkgYW0gYW4gQW1lcmljYW4gSGlzdG9yeSB0ZWFjaGVyIGFuZCB3ZSBhcmUgcGFpZCB0byBrbm93IHRoZXNlIHNvcnQgb2YgdGhpbmdzISkuIFRoZSByZWFsIGxpZmUgR2FyZmllbGQgd2FzIGEgQ2l2aWwgV2FyIGdlbmVyYWwgYW5kIGxvb2tlZCBsaWtlIHRoZSBndXlzIG9uIHRoZSBTbWl0aCBCcm90aGVycyBjb3VnaCBkcm9wIGJveGVzLiBQbHVzLCB1c2luZyBzb21lIG90aGVyIGFjdG9yIHRvIHByb3ZpZGUgdGhlIHZvaWNlIGZvciBKb2huc29uIGluIHRoZSBkdWJiaW5nIGlzIGp1c3Qgc3VycmVhbC4gTmV2ZXIgYmVmb3JlIG9yIHNpbmNlIGhhcyBWYW4gSm9obnNvbiBzb3VuZGVkIHF1aXRlIHNvIG1hY2hvISEgSGUgd2FzIGEgZmluZSBhY3Rvci4uLmJ1dCBjZXJ0YWlubHkgbm90IGEgY29udmluY2luZyBnZW5lcmFsIG9yIG1hY2hvIHByZXNpZGVudC48YnIgLz48YnIgLz5JbiBhZGRpdGlvbiB0byB0aGUgc3R1cGlkIGNhc3RpbmcsIFByZXNpZGVudCBHYXJmaWVsZCdzIGRlYXRoIHdhcyBpbiBubyB3YXkgbGlrZSB0aGlzIGZpbG0uIEl0J3Mgb2J2aW91cyB0aGF0IHRoZSBmaWxtIG1ha2VycyBhcmUgYWN0dWFsbHkgY2FzaGluZyBpbiBvbiB0aGUgY3Jhenkgc3BlY3VsYXRpb24gYWJvdXQgY29uc3BpcmFjaWVzIGNvbmNlcm5pbmcgdGhlIGRlYXRoIG9mIEpGSywgbm90IEdhcmZpZWxkLiBHYXJmaWVsZCB3YXMgc2hvdCBpbiBXYXNoaW5ndG9uLCBEQyAobm90IERhbGxhcykgYnkgYSBsb25lIGd1bm1hbiB3aXRoIHNldmVyZSBtZW50YWwgcHJvYmxlbXMtLW5vdCBhIGdyb3VwIG9mIG1lbiB3aXRoIHJpZmxlcy4gSG93ZXZlciwgYWNjb3JkaW5nIHRvIG1vc3QgZXhwZXJ0cywgd2hhdCBhY3R1YWxseSBraWxsZWQgR2FyZmllbGQgKG92ZXIgdHdvIG1vbnRocyBsYXRlcikgd2VyZSBpbmNvbXBldGVudCBkb2N0b3JzLS13aG8gcHJvYmVkIGFuZCBwcm9iZWQgYW5kIHByb2JlZCB0byByZXRyaWV2ZSBhIGJ1bGxldCAodG8gbm8gYXZhaWwpIGFuZCBuZXZlciBib3RoZXJlZCBjbGVhbmluZyB0aGVpciBoYW5kcyBvciBpbXBsZW1lbnRzIGluIHRoZSBwcm9jZXNzLiBJbiBvdGhlciB3b3JkcywgbGlrZSBHZW9yZ2UgV2FzaGluZ3RvbiAod2hvIHdhcyBiYXNpY2FsbHkga2lsbGVkIGJ5IHJlcGVhdGVkIGJsb29kbGV0dGluZyB3aGVuIHN1ZmZlcmluZyB3aXRoIHBuZXVtb25pYSkgaGUgZGllZCBkdWUgdG8gbWFscHJhY3RpY2UuIEluIHRoZSBtb3ZpZSB0aGV5IGdvdCBub3RoaW5nIHJpZ2h0IHdoYXRzb2V2ZXIuLi5vdGhlciB0aGFuIGluZGVlZCBQcmVzaWRlbnQgR2FyZmllbGQgd2FzIHNob3QuPGJyIC8+PGJyIC8+QmVjYXVzZSB0aGUgZmlsbSBiZWFycyBhbG1vc3Qgbm8gc2ltaWxhcml0eSB0byByZWFsIGhpc3RvcnksIGl0J3MgbGlrZSBhIGhpc3RvcnkgbGVzc29uIGFzIHRhdWdodCBmcm9tIHNvbWVvbmUgZnJvbSBhbm90aGVyIHBsYW5ldCBvciBzb21lb25lIHdpdGggYSBzZXZlcmUgYnJhaW4gaW5qdXJ5LiBXaHkgbm90IGFsc28gaW5jbHVkZSBuaW5qYXMsIGZpZ2h0aW5nIHJvYm90cyBhbmQgdGhlIEdyZWVrIGdvZHMgd2hpbGUgeW91J3JlIGF0IGl0PyE/ISBBc2lkZSBmcm9tIHNvbWUgZGVjZW50IGFjdGluZyBhbmQgcHJvZHVjdGlvbiB2YWx1ZXMsIGJlY2F1c2UgdGhlIHNjcmlwdCBpcyB1dHRlciBjb3cgY3JhcCwgSSBkb24ndCByZWNvbW1lbmQgYW55b25lIHdhdGNoIGl0LiBJdCdzIGp1c3QgYSBjb21wbGV0ZSBhbmQgdXR0ZXIgbWVzcy4pAAAAAAAAAEAKuQIIXxBfIqkCVGhpcyBmaWxtIGZlYXR1cmVzIHR3byBvZiBteSBmYXZvcml0ZSBndWlsdHkgcGxlYXN1cmVzLiBTdXJlLCB0aGUgZWZmZWN0cyBhcmUgbGF1Z2hhYmxlLCB0aGUgc3RvcnkgY29uZnVzZWQsIGJ1dCBqdXN0IHdhdGNoaW5nIEhhc3NlbGhvZmYgaW4gaGlzIEtuaWdodCBSaWRlciBkYXlzIGlzIGFsd2F5cyBmdW4uIEkgZXNwZWNpYWxseSBsaWtlIHRoZSBvbGQgaG90ZWwgdGhleSB1c2VkIHRvIHNob290IHRoaXMgaW4sIGl0IGFkZGVkIHRvIHdoYXQgbGl0dGxlIHN1c3BlbnNlIHdhcyBtdXN0ZXJlZC4gR2l2ZSBpdCBhIDMuKQAAAAAAAABACq0FCGAQYCKdBVRoaXMgVFYgc2hvdyBpcyBwb3NzaWJseSB0aGUgbW9zdCBwYXRoZXRpYyBkaXNwbGF5IG9mIGNyYXAgb24gVFYgdG9kYXkuIEhvcnJpYmx5IHByZWRpY3RhYmxlLCBvYnNjZW5lIHVzYWdlIG9mIHNsb3cgbW90aW9uIHBob3RvZ3JhcGh5LCBjaGVlc3kgc3RvcnkgbGluZXMuIENodWNrIE5vcnJpcyBpcyBhbiBhYm9taW5hdGlvbiB3aG8gc2hvdWxkIG5ldmVyIGhhdmUgYmVlbiBhbGxvd2VkIHRvIGJlIGZpbG1lZCBpbiBhbnl0aGluZy4gVGhlIHdheSBoZSBjaG9vc2VzIHRvIG1ha2UgZWFjaCBlcGlzb2RlIGludG8gYSBwdWJsaWMgc2VydmljZSBhbm5vdW5jZW1lbnQgaXMgcmVhbGx5IGFubm95aW5nLiBIaXMgYWN0aW5nIHN1Y2tzIHNvIGJhZCB0aGF0IGl0IG1ha2VzIGEgcGVyc29uIGNyaW5nZSB3aXRoIGVtYmFycmFzc21lbnQuIEkgd2lsbCBnaXZlIHRoZSBzZXJpZXMgc29tZSBjcmVkaXQgdGhvdWdoLi4uaXQgZG9lcyBnZXQgZW50ZXJ0YWluaW5nIGF0IHRpbWVzLCBidXQgbm90IGVub3VnaCBmb3IgaXQgbWFrZSBhbnkgZGlmZmVyZW5jZS4gV2l0aCBhbGwgdGhlIG5lZ2F0aXZlIHBvaW50cyB0aGlzIHNlcmllcyBoYXMsIGkgc3RpbGwgcHJlZmVyIGl0IG92ZXIgcmVhbGl0eSBUViwgaXQgY2FuJ3QgcmVhbGx5IGdldCBhbnkgbW9yZSB3b3J0aGxlc3MgdGhhbiB0aGF0LikAAAAAAAAAQAqRAwhhEGEigQNUaGlzIEhBUyB0byBiZSBteSBndWlsdHkgcGxlYXN1cmUuIEkgYW0gYSBIVUdFIGZhbiBvZiA4MCdzIG1vdmllcyB0aGF0IHdlcmUgZGVzaWduZWQgdG8gZW50ZXJ0YWluIGFuZCB0aGV5IGRpZG4ndCBjYXJlIGlmIHRoZXkgb2ZmZW5kZWQgYW55b25lLiBUaGlzIG1vdmUgaGFzIG5vIG1lYXQsIG5vdCBzdWJzdGFuY2UsIG5vIGRlZXAgdGhvdWdodCBwcm92b2tpbmcgc2NlbmVzLiBKdXN0IHBsYWluIG9sZCBjb2xsZWdlIGtpZHMgaGF2aW5nIGZ1biBhbmQgaWYgYSBmZXcgYnJlYXN0cyBoYXZlIHRvIGJlIHNob3duLCB0aGVuIHNvIGJlIGl0ISBUaGlzIG1vdmllIGlzIGZvciB3aGVuIHlvdSBqdXN0IHdhbnQgdG8gcmVsYXggYW5kIE5PVCB0aGluay4gVml2YSBsYSBudWRpdHkhKQAAAAAAAABACq0HCGIQYiKdB1RoZXNlIHdyaXRlcnMgYXJlIHRyeWluZyB0byByZS1jcmVhdGUgdGhlIGNoYXJhY3RlcnMgdGhleSBoYXZlIG9uICJzY3J1YnMiIGluIGEgZGlmZmVyZW50IG9jY3VwYXRpb24gaG93ZXZlciB0aGUgY2hhcmFjdGVycyB0aGV5IGFyZSBzdHVjayB3aXRoIGhhdmUgbm8gY2hhcmlzbWEgb3IgYWN0aW5nIGFiaWxpdHkgbm90IHRvIG1lbnRpb24gdGhlIHdyaXRpbmcgc2VlbXMgcG9vciBhbmQgZWZmb3J0bGVzcy4gVGhlc2UgZ3V5cyBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZSBnb29kIGlmIHRoZSB3cml0aW5nIHdhc24ndCBzbyBkaXNndXN0aW5nIHdoaWNoIGlzIGxlYXZpbmcgdGhlIHNob3dzIG9ubHkgbGlmZWxpbmUgdG8gYmUgdHdvIGF0dHJhY3RpdmUgdGVhY2hlcnMgdGhhdCB0aGF0IGFyZSBiYXJlbHkga2VlcGluZyBpdCBhbGl2ZS4gVGhlIGh1bW9yIGluIHRoaXMgc2hvdyBzZWVtcyBsaWtlIGl0IGlzIHRyeWluZyB0byB0YXJnZXQgYW4gYXVkaWVuY2Ugd2l0aCBhbiBJLlEuIG9mIDQwIG9yIGJlbG93LiBBbm90aGVyIHJlYXNvbiB3aHkgdGhpcyBzaG93IGlzIGJlY29taW5nIGEgZmFpbHVyZSBjb3VsZCBiZSB0aGF0IHRoZSB3cml0aW5nIG9uIHRoZSBzaG93ICJzY3J1YnMiIGlzIGV4Y2VsbGVudCBhbmQgdGhpcyBzaG93IGhhcyB0byBmb2xsb3cgaXQgdXAgbGVhdmluZyB0aGUgdmlld2VyIGluIGFuIG9kZCBwb3NpdGlvbiBub3Qga25vd2luZyB3aGV0aGVyIHRvIGNyeSBvciB0byBqdXN0IGxvc2UgaG9wZSBpbiBuZXcgc2l0Y29tcyBhbGwgdG9nZXRoZXIuIFRoaXMgaXMganVzdCBteSBvcGluaW9uIGJ1dCBpIHRoaW5rIHRoZXNlIGd1eXMgc2hvdWxkIHN0b3Agbm93IGJlZm9yZSB0aGV5IGh1bWlsaWF0ZSB0aGVtc2VsdmVzIGFueW1vcmUgdGhhbiB0aGV5IGhhdmUgYWxyZWFkeS4pAAAAAAAAAEAK+woIYxBjIusKVGhlcmUncyBzb21ldGhpbmcgZnJ1c3RyYXRpbmcgYWJvdXQgd2F0Y2hpbmcgYSBtb3ZpZSBsaWtlICdNdXJkZXIgQnkgTnVtZXJzJyBiZWNhdXNlIHNvbWV3aGVyZSBpbnNpZGUgdGhhdCBIb2xseXdvb2QgZm9ybXVsYSBpcyBhIGdvb2QgbW92aWUgdHJ5aW5nIHRvIHBvcCBvdXQuIEhvd2V2ZXIsIGJ5IHRoZSB0aW1lIHRoZSBjcmVkaXRzIHJvbGwsIHRoZXJlJ3Mgbm8gc2F2aW5nIGl0LiBUaGUgd2hvbGUgdGhpbmcgaXMgcHJldHR5IG11Y2ggYmxvd24gYnkgdGhlICJjb3Agc2lkZSIgb2YgdGhlIHN0b3J5LCB3aGVyZSBTYW5kcmEgQnVsbG9jayBhbmQgQmVuIENoYXBsaW4ncyBob21pY2lkZSBkZXRlY3RpdmUgY2hhcmFjdGVycyBtdWRkbGUgdGhyb3VnaCBhbiBhd2t3YXJkIHNleHVhbCBhZmZhaXIgdGhhdCBiZWNvbWVzIG1vcmUgYW5kIG1vcmUgdHJpdmlhbGl6ZWQgdGhlIGxvbmdlciB0aGUgbW92aWUgZ29lcyBvbi4gQWx0aG91Z2ggQnVsbG9jayBpcyBzdHJvbmcgaW4gaGVyIHJvbGUsIGl0J3Mgbm90IGVub3VnaCB0byBzYXZlIHRoZSBsYWNrbHVzdGVyIHNjcmlwdCBhbmQgbGF6eSBwYWNpbmcuIEJlbiBDaGFwbGluJ3MgdGFsZW50cyBhcmUgd2FzdGVkIGluIGEgZm9yZ2V0dGFibGUgcm9sZSAoaGUgZGlkIG11Y2ggYmV0dGVyIGVhcmxpZXIgaW4gdGhlIHllYXIgaW4gdGhlIHVuZGVycmF0ZWQgJ0JpcnRoZGF5IEdpcmwnKSBhcyB3ZWxsIGFzIENocmlzIFBlbm4sIHdobyBoYXMgYSByb2xlIHNvIHRoYW5rbGVzc2x5IHNtYWxsIHlvdSBmZWVsIHNvcnJ5IGZvciBhIHRhbGVudCBsaWtlIGhpbS4gQW55d2F5LCB0aGUgcGxvdCByZWFsbHkgaXNuJ3QgZXZlbiBhIGZhY3RvciBpbiB0aGlzIG1vdmllIGF0IGFsbC4gVGhlIHR3byB0ZWVuIGtpbGxlcnMgcGxheWVkIGJ5IFJ5YW4gR29zbGluZyBhbmQgTWljaGFlbCBQaXR0IGFyZSB0aGUgb25seSByZWFsIHJlYXNvbnMgdG8gc2VlIHRoaXMgbW92aWUuIFRoZWlyIHRhbGVudCBhbmQgY2hlbWlzdHJ5IHdvcmsgcHJldHR5IGdvb2QgYW5kIHRoZXkgcGxheSBvZmYgb2YgZWFjaCBvdGhlciBxdWl0ZSB3ZWxsLiBJdCdzIHRvbyBiYWQgdGhleSB3ZXJlbid0IGluIGEgbXVjaCBiZXR0ZXIgYWxsLWFyb3VuZCBmaWxtLiBCYXJiZXQgU2Nocm9lZGVyIGlzIHRyZWFkaW5nIHdheSB0b28gc2FmZSBncm91bmQgaGVyZSBmb3Igc3VjaCBhIHNlYXNvbmVkIGZpbG1tYWtlci4gQm90dG9tIExpbmU6IGl0J3Mgd29ydGggYSByZW50IGlmIHlvdSdyZSBhIGdlbnJlIGZhbiwgYnV0IGV2ZXJ5b25lIGVsc2Ugd2lsbCBsaXZlIGEgZnVsZmlsbGVkIGxpZmUgd2l0aG91dCBldmVyIHNlZWluZyBpdCwgZXhjZXB0IG1heWJlIG9uIG5ldHdvcmsgVFYgd2l0aCBjb252ZW5pZW50IGNvbW1lcmNpYWwgYnJlYWtzLikAAAAAAAAAQAqZDwhkEGQiiQ9UaGVyZSBpcyBubyB3YXkgdG8gYXZvaWQgYSBjb21wYXJpc29uIGJldHdlZW4gVGhlIENhdCBpbiB0aGUgSGF0IGFuZCBUaGUgR3JpbmNoIFdobyBTdG9sZSBDaHJpc3RtYXMsIHNvIGxldCdzIGdldCB0aGF0IHBhcnQgb3V0IG9mIHRoZSB3YXkuIEZpcnN0IG9mIGFsbCwgbGV0IG1lIHN0YXJ0IGJ5IHNheWluZyB0aGF0IEkgdGhpbmsgR3JpbmNoIHdhcyBhbiB1bmRlcnJhdGVkIGFuZCB1bmFwcHJlY2lhdGVkIGZpbG0uIENhdCB3YXMuLi4gd2VsbCwganVzdCBhd2Z1bC48YnIgLz48YnIgLz5KaW0gQ2FyZXkgd2FzIGNhc3QgYmVjYXVzZSBoZSBpcyBhIGJyaWxsaWFudCBwaHlzaWNhbCBjb21lZGlhbiwgYW5kIGZlYXJsZXNzbHkgY29tbWl0cyB0byBvdmVyIHRoZSB0b3AsIG91dHJhZ2VvdXMgY2hhcmFjdGVycy4gTWlrZSBNeWVycyBmZWxsIGJhY2sgb24gaGlzIG9sZCBiYWcgb2YgdHJpY2tzLjxiciAvPjxiciAvPldoeSwgd2h5LCB3aHkgTWlrZSBNeWVycz8/IFRoZSBraWRzIGNvdWxkIGNhcmUgbGVzcywgYW5kIHRoZSBBdXN0aW4gUG93ZXJzIGRlbW9ncmFwaGljIGlzbid0IGdvaW5nIHRvIHNweSB0aGlzIGZpbG0uIFNvLCB3aGF0IHdhcyB0aGUgc3R1ZGlvIHRoaW5raW5nPzxiciAvPjxiciAvPlRoZSBDYXQgd2FzIGFsc28gYXBwYXJlbnRseSByZWxhdGVkIHRvIExpbmRhIFJpY2htb25kLiBDYW4gd2UgdGFsaz8gV2h5IGEgTmV3IFlvcmsgQWNjZW50PyBOb3QgZW50aXJlbHkgY29uc2lzdGVudCB3aXRoIGFueXRoaW5nIERyLiBTZXVzcyBoYXMgZXZlciB3cml0dGVuLiBNeWVycyB3YXMgZXZlbiBhbGxvd2VkIHRvIHNuZWFrIGluIGhpcyBTY290dGlzaCBzaHRpY2suIEkgd29uZGVyIGhvdyBtYW55IGRpZmZlcmVudCB2b2ljZXMgdGhlIGRpcmVjdG9yIGFuZCB0aGUgc3R1ZGlvIHRyaWVkIHRvIGVkaXQgb3V0IG9mIGJlZm9yZSB0aGV5IGp1c3QgZ2F2ZSBpbiBhbmQgc2FpZCAiYXMgbG9uZyBhcyB5b3UgZG9uJ3Qgc2F5IGZhaGtsZW1wdCcsIHlvdSBjYW4ga2VlcCB0aGUgYWNjZW50cy4iIE1leWVycyBuZXZlciBzZWVtZWQgdG8gZmluZCBhbnkgc29ydCBvZiBjb21mb3J0LCBlaXRoZXIgd2l0aCB0aGUgY29zdHVtZSwgbWFrZS11cCwgb3IgZGlhbG9ndWUuPGJyIC8+PGJyIC8+VGhlIGpva2VzLCB3aGF0IGZldyB0aGVyZSB3ZXJlLCB3ZXJlIGNydWRlIGFuZCBhZ2UgaW5hcHByb3ByaWF0ZS4gV2hlbiBNeWVycyBwaWNrcyB1cCBhIGdhcmRlbiBob2UgYW5kIGRlbGl2ZXJzIHRvIHRoZSBjYW1lcmE6ICJkaXJ0eSBobyIsIGV2ZXJ5dGhpbmcgYnV0IHRoZSByaW0gc2hvdCB3YXMgbWlzc2luZywgYW5kIGV2ZW4gdGhhdCB3b3VsZG4ndCBoYXZlIGhlbHBlZC48YnIgLz48YnIgLz5UaGUgc2FtZSBmb2xrcyB3aG8gY3JlYXRlZCAnV2hvdmlsbGUnLCBjbGVhcmx5IGhhZCBhIGhhbmQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSB0b3duIGFuZCB0aGUgaG91c2VzIGluICdDYXQnLiBUaGUgc2V0cyBhbmQgcHJvcHMgd2VyZSB2ZXJ5IGFwcGVhbGluZywgZ2l2aW5nIHRoZSB2aWV3ZXIgYSBtdWNoIG5lZWRlZCBkaXN0cmFjdGlvbiBmcm9tIHRoZSBiYWQgd3JpdGluZywgZGlyZWN0aW9uLCBhbmQgTXllcnMuPGJyIC8+PGJyIC8+VGhlcmUgd2FzIHNvbWUgZnVuIHRvIGJlIGhhZCB3aXRoIEFsZWMgQmFsZHdpbiBhbmQgS2VsbHkgUHJlc3Rvbi4gRGFrb3RhIEZhbm5pbmcgd2FzIHRoZSBvbmx5IGFjdG9yIHdobyBzZWVtZWQgdG8gYmUgYXdhcmUgc2hlIHdhcyBpbiBhIG1vdmllIGJhc2VkIG9uIGEgRHIuIFNldXNzIGNsYXNzaWMsIGFuZCBzdGF5ZWQgdHJ1ZSB0byB0aGUgZ2VucmUuPGJyIC8+PGJyIC8+Q2FsbCB0aGUgU1BDQS4gVGhpcyBDYXQgc2hvdWxkIGJlIG5ldXRlcmVkIGFuZCBuZXZlciBiZSBhbGxvd2VkIHRvIHJlcHJvZHVjZSBhZ2Fpbi4gUGxlYXNlLCBwbGVhc2UsIG5vIHNlcXVlbC4pAAAAAAAAAEAK/QUIZRBlIu0FVGhlcmUgaXMgbm8gcmVhc29uIHRvIHNlZSB0aGlzIG1vdmllLiBBIGdvb2QgcGxvdCBpZGVhIGlzIGhhbmRsZWQgdmVyeSBiYWRseS4gSW4gdGhlIG1pZGRsZSBvZiB0aGUgbW92aWUgZXZlcnl0aGluZyBjaGFuZ2VzIGFuZCBmcm9tIHRoZXJlIG9uIG5vdGhpbmcgbWFrZXMgbXVjaCBzZW5zZS4gVGhlIHJlYXNvbiBmb3IgdGhlIGtpbGxpbmdzIGFyZSBub3QgbWFkZSBjbGVhci4gVGhlIGFjdGluZyBpcyBhd2Z1bC4gTmljayBTdGFobCBvYnZpb3VzbHkgbmVlZHMgYSBiZXR0ZXIgZGlyZWN0b3IuIEhlIHdhcyBleGNlbGxlbnQgaW4gSW4gdGhlIEJlZHJvb20sIGJ1dCBoZXJlIGhlIGlzIHRlcnJpYmxlLiBBbWJlciBCZW5zb24gZnJvbSBCdWZmeSwgaGFzIHRvIGNoYW5nZSBoZXIgY2hhcmFjdGVyIHNvbWVkYXkuIEV2ZW4gdGhvc2Ugb2YgeW91IHdobyBlbmpveSBncmF0dWl0b3VzIHNleCBhbmQgdmlvbGVuY2Ugd2lsbCBiZSBkaXNhcHBvaW50ZWQuIEV2ZW4gdGhvdWdoIHRoZSBtb3ZpZSB3YXMgODAgbWludXRlcywgd2hpY2ggaXMgdG9vIHNob3J0IGZvciBhIGdvb2QgbW92aWUgKGJ1dCB0b28gbG9uZyBmb3IgdGhpcyBvbmUpLHRoZXJlIGFyZSBubyBkZWxldGVkIHNjZW5lcyBpbiB0aGUgRFZEIHdoaWNoIG1lYW5zIHRoZXkgbmV2ZXIgYm90aGVyZWQgdG8gZmlsbCBpbiB0aGUgbWlzc2luZyBwYXJ0cyB0byB0aGUgY2hhcmFjdGVycy48YnIgLz48YnIgLz5Eb24ndCBzcGVuZCB0aGUgdGltZSBvbiB0aGlzIG9uZS4pAAAAAAAAAEAKgxYIZhBmIvMVVGhlcmUgaGFzIGJlZW4gYSBwb2xpdGljYWwgZG9jdW1lbnRhcnksIG9mIHJlY2VudCB2aW50YWdlLCBjYWxsZWQgV2h5IFdlIEZpZ2h0LCB3aGljaCB0cmllcyB0byBleGFtaW5lIHRoZSBpbmZhbW91cyBNaWxpdGFyeSBJbmR1c3RyaWFsIENvbXBsZXggYW5kIGl0cyBncmlwIG9uIHRoaXMgbmF0aW9uLiBJdCBpcyBjb25zaWRlcmVkIGJvdGggcG9sZW1pY2FsIGFuZCBpbmNpc2l2ZSBpbiBtYWtpbmcgaXRzIGNhc2UgYWdhaW5zdCBib3RoIHRoYXQgY29tcGxleCBhbmQgdGhlIHdhciBmaWFzY28gd2UgYXJlIGN1cnJlbnRseSBpbnZvbHZlZCBpbiBpbiBJcmFxLiBZZXQsIGEgZmFyIG1vcmUgZmFtb3VzIHNlcmllcyBvZiBmaWxtcywgd2l0aCB0aGUgc2FtZSBuYW1lLCB3YXMgbWFkZSBkdXJpbmcgV29ybGQgV2FyIFR3bywgYnkgSG9sbHl3b29kIGRpcmVjdG9yIEZyYW5rIENhcHJhLiBBbHRob3VnaCBjb25zaWRlcmVkIGRvY3VtZW50YXJpZXMsIGFuZCBoYXZpbmcgd29uIE9zY2FycyBpbiB0aGF0IGNhdGVnb3J5LCB0aGlzIHNlcmllcyBvZiBzZXZlbiBmaWxtcyBpcyByZWFsbHkgYW5kIHRydWx5IG1lcmUgYWdpdHByb3AsIG1vcmUgaW4gdGhlIHZlaW4gb2YgTGVuaSBSZWlmZW5zdGFsJ3MgVHJpdW1waCBPZiBUaGUgV2lsbCwgc2NlbmVzIG9mIHdoaWNoIENhcHJhIHJlY3ljbGVzIGZvciBoaXMgb3duIHB1cnBvc2VzLiBUaGF0IHNhaWQsIHRoYXQgZmFjdCBkb2VzIG5vdCBtZWFuIGl0IGRvZXMgbm90IGhhdmUgdml0YWwgaW5mb3JtYXRpb24gdGhhdCBzdWJzZXF1ZW50IGdlbmVyYXRpb25zIG9mIFdvcmxkIFdhciBUd28gZG9jdW1lbnRhcmllcyAoc3VjaCBhcyB0aGUgQkJDJ3MgbGF1ZGVkIFRoZSBXb3JsZCBBdCBXYXIpIGxhY2tlZCwgbm9yIGRvZXMgdGhhdCBtZWFuIHRoYXQgaXRzIHZhbHVlIGFzIGEgcHJpbWFyeSBzb3VyY2UgaXMgYW55IHRoZSBsZXNzIHZhbHVhYmxlLiBUaGV5IGFyZSBza2lsbGZ1bGx5IG1hZGUsIGFuZCBhZnRlciByZWNlbnRseSBwdXJjaGFzaW5nIHNvbWUgdXNlZCBEVkRzIGF0IGEgZGlzY291bnQgc3RvcmUsIEkgZm91bmQgbXlzZWxmIHdpdGggdGhlIG9wcG9ydHVuaXR5IHRvIHNlbGVjdCBhIGZyZWUgRFZEIHdpdGggbXkgcHVyY2hhc2UuIEkgY2hvc2UgR29vZHRpbWVzIERWRCdzIGZvdXIgRFZEIGNvbGxlY3Rpb24gb2YgdGhlIHNlcmllcy48YnIgLz48YnIgLz5SYXJlbHkgaGFzIHNvbWV0aGluZyBmcmVlIGJlZW4gc28gd29ydGggaW52YWx1YWJsZS4gV2hpbGUgdGhlcmUgYXJlIG5vIGV4dHJhcyBvbiB0aGUgRFZEcywgYW5kIHRoZSBzb3VuZCBxdWFsaXR5IG9mIHRoZSBwcmludHMgdmFyaWVzLCB0aGVzZSBmaWxtcyBwcm92aWRlIGluc2lnaHQgaW50byB0aGUgbWluZHMgb2YgQW1lcmljYW5zIHR3byB0aGlyZHMgb2YgYSBjZW50dXJ5IGFnbywgd2hlbiByYWNpc20gd2FzIG92ZXJ0IChhcyBpbiBtYW55IG9mIHRoZSBjbGFzc2ljIFdhcm5lciBCcm90aGVycyBwcm8td2FyIGNhcnRvb25zIG9mIHRoZSBlcmEpLCBhbmQgdGhlcmUgd2FzIG5vdGhpbmcgd3Jvbmcgd2l0aCBibGF0YW50IGRpc3RvcnRpb24gb2YgZmFjdHMuIFRoZSBzZXZlbiBmaWxtcywgcHJvZHVjZWQgYmV0d2VlbiAxOTQyIGFuZCAxOTQ1LCBhcmUgUHJlbHVkZSBUbyBXYXIsIFRoZSBOYXppcyBTdHJpa2UsIERpdmlkZSBBbmQgQ29ucXVlciwgVGhlIEJhdHRsZSBPZiBCcml0YWluLCBUaGUgQmF0dGxlIE9mIFJ1c3NpYSwgVGhlIEJhdHRsZSBPZiBDaGluYSwgYW5kIFdhciBDb21lcyBUbyBBbWVyaWNhLjxiciAvPjxiciAvPk92ZXJhbGwsIHRoZSBmaWxtIHNlcmllcyBpcyB3ZWxsIHdvcnRoIHdhdGNoaW5nLCBub3Qgb25seSBmb3IgdGhlIG9idmlvdXMgcmVhc29ucywgYnV0IGZvciB0aGUgc3VidGxlIHRoaW5ncyBpdCByZXZlYWxzLCBzdWNoIGFzIHRoZSB1c2Ugb2YgdGhlIHBsdXJhbCBmb3IgdGVybXMgbGlrZSBYIG1pbGxpb25zIHdoZW4gcmVmZXJyaW5nIHRvIGRvbGxhcnMsIHJhdGhlciB0aGFuIHRoZSBtb2Rlcm4gc2luZ3VsYXIsIG9yIHRoZSBtb3N0IG92ZXJ1c2VkIGdyYXBoaWMgaW4gdGhlIHdob2xlIHNlcmllcy0gYSBKYXBhbmVzZSBzd29yZCBwaWVyY2luZyB0aGUgY2VudGVyIG9mIE1hbmNodXJpYS4gWWV0LCBpdCBhbHNvIHNob3dzIHRoZSBjb21wbGV4aXRpZXMgb2YgdHJ5aW5nIHRvIGFwcGx5IHBhc3Qgc3RhbmRhcmRzIHRvIGN1cnJlbnQgd2Fycy4gVGhlIGxlc3NvbiBvZiBXb3JsZCBXYXIgT25lIChhdm9pZCBmb3JlaWduIGVudGFuZ2xlbWVudHMpIHdhcyBub3QgYXBwbGljYWJsZSB0byBXb3JsZCBXYXIgVHdvLCB3aG9zZSBvd24gbGVzc29uIChhY3QgZWFybHkgYWdhaW5zdCBkaWN0YXRvcnNoaXBzKSBoYXMgbm90IGJlZW4gYXBwbGljYWJsZSBpbiB0aGUgdGhyZWUgbWFqb3Igd2FycyBBbWVyaWNhIGhhcyBmb3VnaHQgc2luY2U6IEtvcmVhLCBWaWV0bmFtLCBub3IgSXJhcS4gVGhlIGZhY3QgdGhhdCBtdWNoIG9mIHRoaXMgc2VyaWVzIHRlZXRlcnMgb24gdGhlIHVuY2VydGFpbnRpZXMgb2YgdGhlIHRpbWVzIGl0IHdhcyBtYWRlIGluIG9ubHkgdW5kZXJzY29yZXMgaXRzIGhpc3RvcmljIHZhbHVlIGluIHRvZGF5J3MgaW5mb3JtYXRpb24tY2xvZ2dlZCB0aW1lcy4gSXQgbWF5IG5vdCBoZWxwIHlvdSBzb3J0IG91dCB0aGUgdHJ1dGggZnJvbSB0aGUgbGllcyBhbmQgcHJvcGFnYW5kYSBvZiB0b2RheSwgYnV0IGF0IGxlYXN0IHlvdSdsbCByZWFsaXplIHlvdSBhcmUgbm90IHRoZSBmaXJzdCB0byBiZSBpbiBzdWNoIGEgdGVudW91cyBwb3NpdGlvbiwgbm9yIHdpbGwgeW91IGJlIHRoZSBsYXN0LikAAAAAAAAAQAqpCwhnEGcimQtUaGVyZSBhcmUgcGxlbnR5IG9mIGNvbW1lbnRzIGFscmVhZHkgcG9zdGVkIHNheWluZyBleGFjdGx5IGhvdyBJIGZlbHQgYWJvdXQgdGhpcyBmaWxtIHNvIElsbCBrZWVwIGl0IHNob3J0LjxiciAvPjxiciAvPiJUaGUgR3JpbmNoIiBJIHRob3VnaHQgd2FzIG1hcnZlbGxvdXMgLSBKaW0gQ2FycmV5IGlzIGEgdHJ1bHkgdGFsZW50ZWQsIHBoeXNpY2FsIGNvbWVkaWFuIGFzIHdlbGwgYXMgYmVpbmcgYSB2ZXJzYXRpbGUgY2xldmVyIGFjdG9yIChpbiBteSBvcGluaW9uKS4gTWlrZSBNeWVycyBvbiB0aGUgb3RoZXIgaGFuZCBnZXRzIGhpcyBsYXVnaHMgYnkgYmVpbmcgYW5ub3lpbmcuIEkgdXNlZCB0byBsaWtlIGhpbSB2ZXJ5IG11Y2ggaW4gaGlzICJXYXluZXMgV29ybGQiIGFuZCAiU28gSSBNYXJyaWVkIGFuIEF4ZSBNdXJkZXJlciIgZGF5cyAtIGJ1dCBJdmUgbmV2ZXIgYmVlbiBmb25kIG9mIEF1c3RpbiBQb3dlcnMgYW5kICJ0aGUgQ2F0IEluIFRoZSBIYXQiIGhhcyBqdXN0IGZpbmlzaGVkIG1lIG9mZi4gPGJyIC8+PGJyIC8+VGhpcyBmaWxtIHdhcyBob3JyaWJsZSAtIHRoZSBnYWdzIHdlcmUgaG9ycmlibGUhIGluYXBwcm9wcmlhdGUgZm9yIGNoaWxkcmVuIG5vdCBvbmx5IGluIGFkdWx0IGNvbnRlbnQgYnV0IGluIHRoZSBmYWN0IHRoYXQgc29tZSBvZiB0aGVtIHdlcmUgc28gZGF0ZWQgdGhleSBoYXZlbnQgYW11c2VkIGFueW9uZSBmb3IgNTAgeWVhcnMhIFRoZSBwbG90IHdhcyBtZXNzeSwgbWVzc3ksIG1lc3N5ISBJdHMgYSBzaGFtZSByZWFsbHkgYmVjYXVzZSB0aGUgY2hpbGRyZW4gd2VyZSB2ZXJ5IGxpa2VhYmxlIGFzIHdhcyAiTW9tIi4gVGhleSBwcm9iYWJseSBjb3VsZCBoYXZlIHBpY2tlZCBhIGJldHRlciB2aWxsYWluIHRoYW4gQWxlYyBCYWxkd2luIC0gYnV0IGhlIGNvdWxkIGhhdmUgcHVsbGVkIGl0IG9mZiBpZiBpdCB3ZXJlbid0IGZvciBNeWVycyB1Z2x5LCByZXZvbHRpbmcgb3Zlci1hY3RlZCBwb3J0cmF5YWwgb2YgdGhlIENhdC48YnIgLz48YnIgLz5JIG1lYW4gLSBkaWQgTXllcnMgZXZlbiBnbGFuY2UgYXQgYSBzY3JpcHQ/IFdhcyBvbmUgd3JpdHRlbj8gVGhlIG90aGVyIGFjdG9ycyBzZWVtZWQgdG8gaGF2ZSBvbmUgLSBidXQgdGhlIENhdCBqdXN0IHNlZW1lZCB0byBiZSB3aW5naW5nIGl0ITxiciAvPjxiciAvPk9uIHRoZSBvdGhlciBoYW5kIEkgd291bGQgbGlrZSB0byBtZW50aW9uIHRoYXQgdGhlIHNldHMgYW5kIHByb3BzIHdlcmUgbWFydmVsbG91cyEhISBCdXQgdW5mb3J0dW5hdGVseSB0aGV5IGNhbnQgc2F2ZSB0aGlzIGZpbG0uPGJyIC8+PGJyIC8+UG9vciBEciBTZXVzcyAtIHRoZSBtYW4gd2FzIGEgZ2VuaXVzISBEb250IHJ1aW4gaGlzIHJlcHV0YXRpb24gYnkgYWRhcHRpbmcgaGlzIHdvcmsgaW4gYSBzdWNoIGEgbGF6eSwgbWVzc3kgd2F5ISEhPGJyIC8+PGJyIC8+MS8xMCkAAAAAAAAAQAq4HQhoEGgiqB1UaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhpcyBvbmUgZmxvYXRpbmcgYXJvdW5kLCBzbyBtYWtlIHN1cmUgeW91IGNhbiBsb2NhdGUgb25lIG9mIHRoZSB1bnJhdGVkIGNvcGllcywgb3RoZXJ3aXNlIHNvbWUgZ29yZSBhbmQgb25lIHNjZW5lIG9mIG51ZGl0eSBtaWdodCBiZSBtaXNzaW5nLiBTb21lIHZlcnNpb25zIGFsc28gb21pdCBtb3N0IG9mIHRoZSBvcGVuaW5nIHNlcXVlbmNlIGFuZCBvdGhlciBiaXRzIGhlcmUgYW5kIHRoZXJlLiBUaGUgY3V0IEkgc2F3IGhhcyB0aGUgb24tc2NyZWVuIHRpdGxlIFdJVENIQ1JBRlQ6IEVWSUwgRU5DT1VOVEVSUyBhbmQgd2FzIHJlbGVhc2VkIGJ5IFNocmllayBTaG93LCB3aG8gbWFpbnRhaW4gdGhlIG9yaWdpbmFsIFVTIHJlbGVhc2UgdGl0bGUgV0lUQ0hFUlkgZm9yIHRoZSBEVkQgcmVsZWFzZS4gSXQncyBhIG5pY2UtbG9va2luZyBwcmludCBhbmQgc2VlbXMgdG8gaGF2ZSBhbGwgb2YgdGhlIGZvb3RhZ2UsIGJ1dCBoYXMgc29tZSBjcm9wcGluZy9hc3BlY3QgcmF0aW8gaXNzdWVzLiBJbiBJdGFseSwgaXQgd2FzIHJlbGVhc2VkIGFzIExBIENBU0EgNCAoV0lUQ0hDUkFGVCkuIFRoZSBmaXJzdCB0d28gTEEgQ0FTQSByZWxlYXNlcyB3ZXJlIGFjdHVhbGx5IHRoZSBmaXJzdCB0d28gRVZJTCBERUFEIGZpbG1zIChyZXRpdGxlZCkgYW5kIHRoZSB0aGlyZCBMQSBDQVNBIHdhcyBhbm90aGVyIGZpbG0gYnkgdGhlIHNhbWUgcHJvZHVjdGlvbiBjb21wYW55IChGaWxtaXJhZ2UpLCB3aGljaCBpcyBiZXN0IGtub3duIGhlcmUgaW4gQW1lcmljYSBhcyBHSE9TVEhPVVNFLiBUbyBtYWtlIG1hdHRlcnMgZXZlbiBtb3JlIGNvbmZ1c2luZywgV0lUQ0hFUlkgd2FzIGFsc28gcmVsZWFzZWQgZWxzZXdoZXJlIGFzIEdIT1NUSE9VU0UgMi4gRXhjZXB0IGluIEdlcm1hbnksIHdoZXJlIEdIT1NUSE9VU0UgMiBpcyBhY3R1YWxseSBUSEUgT0dSRTogREVNT05TIDMuIE9LLCBJIGJldHRlciBqdXN0IHNodXQgdXAgbm93LiBJJ20gc3RhcnRpbmcgdG8gY29uZnVzZSBteXNlbGYhPGJyIC8+PGJyIC8+UmVnYXJkbGVzcyBvZiB0aGUgdGl0bGUsIHRoaXMgaXMgYSB2ZXJ5IGhpdC1vci1taXNzIGhvcnJvciBlZmZvcnQuIFNvbWUgb2YgaXQgaXMgZ29vZCwgc29tZSBvZiBpdCBpc24ndC4gSSBhY3R1YWxseSB3YXMgaW50byB0aGlzIGZpbG0gZm9yIHRoZSBmaXJzdCBoYWxmIG9yIHNvLCBidXQgdG93YXJkIHRoZSBlbmQgaXQgYmVjYW1lIGEgc2Vuc2VsZXNzIG1lc3MuIEEgbGFyZ2UsIHZhY2FudCBob3RlbCBsb2NhdGVkIG9uIGFuIGlzbGFuZCBhYm91dCA1MCBtaWxlcyBmcm9tIEJvc3RvbiBpcyB0aGUgc2V0dGluZywgYXMgdmFyaW91cyBwZW9wbGUgZ2V0IHBpY2tlZCBvZmYgb25lLWJ5LW9uZSBieSBhIEdlcm1hbi0gc3BlYWtpbmcgd2l0Y2ggKEhpbGRlZ2FyZCBLbmVmKS4gUGhvdG9ncmFwaGVyIEdhcnkgKERhdmlkIEhhc3NlbGhvZmYpLCB3aG8gd2FudHMgdG8gY2FwdHVyZSAiV2l0Y2ggTGlnaHQsIiBhbmQgaGlzIHZpcmdpbmFsIHdyaXRlciBnaXJsZnJpZW5kIChMZXNsaWUgQ3VtbWluZyksIHdobyBpcyBzdHVkeWluZyB3aXRjaGNyYWZ0LCBhcmUgc2hhY2tpbmcgdXAgYXQgdGhlIGhvdGVsIHdpdGhvdXQgcGVybWlzc2lvbi4gQWxvbmcgY29tZXMgcmVhbCBlc3RhdGUgYWdlbnQgSmVycnkgKFJpY2sgRmFybnN3b3J0aCksIHdobydzIHNob3dpbmcgb2ZmIHRoZSBwcm9wZXJ0eSB0byBwb3RlbnRpYWwgYnV5ZXJzIFJvc2UgKEFubmllIFJvc3MpIGFuZCBGcmVkZGllIChSb2JlcnQgQ2hhbXBhZ25lKSBCcm9va3MuIEFsc28gdGFnZ2luZyBhbG9uZyBhcmUgdGhlaXIgY2hpbGRyZW47IHByZWduYW50IGdyb3duIGRhdWdodGVyIEphbmUgKExpbmRhIEJsYWlyKSBhbmQgdmVyeSB5b3VuZyBzb24gVG9tbXkgKE1pY2hhZWwgTWFuY2hlc3RlciksIGFzIHdlbGwgYXMgb3ZlcnNleGVkIGFyY2hpdGVjdCBMaW5kYSBTdWxsaXZhbiAoQ2F0aGVyaW5lIEhpY2tsYW5kIC0gSGFzc2VsaG9mZidzIHdpZmUgYXQgdGhlIHRpbWUpLiBPbmNlIGV2ZXJ5b25lIGlzIGluc2lkZSwgdGhlaXIgYm9hdCBkcml2ZXIgaXMga2lsbGVkIChodW5nKSBhbmQgdGhlIGJvYXQgZGlzYXBwZWFycywgc28gdGhleSBmaW5kIHRoZW1zZWx2ZXMgdHJhcHBlZCBhbmQgYmFzaWNhbGx5IGF0IHRoZSBtZXJjeSBvZiB0aGUgIkxhZHkgaW4gQmxhY2suIjxiciAvPjxiciAvPlNvIHdoYXQgY2FuIHlvdSBleHBlY3QgdG8gZmluZCBoZXJlPyBQbGVudHkgb2YgdW5wbGVhc2FudHJpZXMhIE9uZSBvZiB0aGUgY2hhcmFjdGVycyBoYXMgdGhlaXIgbGlwcyBzZXduIHNodXQgYW5kIGlzIHRoZW4gaHVuZyB1cHNpZGUgZG93biBpbiB0aGUgZmlyZXBsYWNlIGFuZCBhY2NpZGVudGFsbHkgc2xvdy1yb2FzdGVkIGJ5IHRoZSByZXN0IG9mIHRoZSBjYXN0LiBUaGVyZSdzIGFsc28gYSBjcnVjaWZpeGlvbiwgd2l0Y2hlcyBlYXRpbmcgYSBkZWFkIGJhYnksIGEgc3dvcmRmaXNoIHRocm91Z2ggdGhlIGhlYWQsIHNvbWVvbmUgc2V0IG9uIGZpcmUsIGEgcG9zc2Vzc2lvbiwgYSBTZXNhbWUgU3RyZWV0IHRhcGUgcmVjb3JkZXIsIHRoZSB2aXJnaW4gZ2V0dGluZyByYXBlZCBieSBzb21lIGRlbW9uLCBhIGd1eXMgdmVpbnMgYnVsZ2luZyBhbmQgZXhwbG9kaW5nIHRoYW5rcyB0byB2b29kb28gZG9sbCBwb2tlcyBhbmQgc29tZSBvdGhlciBzdHVmZi4gRnJvbSBhIHRlY2huaWNhbCBzdGFuZHBvaW50LCBpdCdzIGEgbmljZS1sb29raW5nIGZpbG0gd2l0aCBwcmV0dHkgZ29vZCBjaW5lbWF0b2dyYXBoeSwgYSBkZWNlbnQgc2NvcmUgYW5kIGdvb2QgZ29yZSBlZmZlY3RzLiBUaGUgaG90ZWwvaXNsYW5kIHNldHRpbmcgaXMgYWxzbyBwcmV0dHkgbmljZS4gQmxhaXIgKHBhcnRpY3VsYXJseSBhdCB0aGUgZW5kKSBhbmQgUm9zcyBib3RoIHNlZW0gbGlrZSB0aGV5J3JlIGhhdmluZyBmdW4gYW5kIEtuZWYgaXMgZ3JlYXQgYXMgdGhlIGV2aWwgd2l0Y2guIEV2ZW4gdGhvdWdoIHBlb3BsZSBsaWtlIHRvIHJpZGljdWxlIEhhc3NlbGhvZmYgdGhlc2UgZGF5cywgaGUncyBub3QgYmFkIGluIGhpcyByb2xlLCBlaXRoZXIuPGJyIC8+PGJyIC8+T24gdGhlIGRvd24gc2lkZSwgZGVzcGl0ZSBhbGwgdGhlIGdvcmUsIHRoZSBmaWxtIHNlZW1zIHNvbWV3aGF0IGR1bGwgYW5kIGl0IGdldHMgbW9ub3Rvbm91cyBhZnRlciBhYm91dCBhbiBob3VyLiBUaGUgc3VwZXJuYXR1cmFsIHRoZW1lcyBhcmUgbXVkZGxlZCBhbmQgY29uZnVzaW5nLCB0b28uIFdoZW4gY2hhcmFjdGVycyBhcmUgYmVpbmcgc3dlcHQgaW50byB0aGUgd2l0Y2hlcyBsYWlyIHRvIGJlIHRvcnR1cmVkIGFuZCBraWxsZWQsIHRoZSBmaWxtbWFrZXJzIHVud2lzZWx5IGRlY2lkZWQgdG8gc3VwZXJpbXBvc2UgdGhlIHNjcmVhbWluZyBhY3RvcnMgb3ZlciBzb21lIHNpbGx5IGxvb2tpbmcgcmVkIHNwaXJhbCB2b3J0ZXggZWZmZWN0IHRoYXQgbG9va3Mgc3VwcmVtZWx5IGNoZWVzeS4gQW5kIHRoZSB3aXRjaCBsYWlyIGl0c2VsZiBpcyB2YWNhbnQgYW5kIGNoZWFwbHkgZGVzaWduZWQgd2l0aCB1bmZpbmlzaGVkIGx1bWJlci4gQW5kIHdoaWxlIG1vc3Qgb2YgdGhlIGNhc3QgaXMgYXQgbGVhc3QgZGVjZW50LCBhIGZldyBvZiB0aGUgcGVyZm9ybWFuY2VzIChwYXJ0aWN1bGFybHkgdGhlICJhY3RyZXNzIiB3aG8gcGxheXMgSGFzc2VsaG9mZidzIGdpcmxmcmllbmQgYW5kIHRoZSBraWQpIGFyZSBzbyBiYWQgdGhleSdyZSBjb25zdGFudGx5IGRpc3RyYWN0aW5nLikAAAAAAAAAQAreDAhpEGkizgxUaGUgd2hvbGUgc2hvcnRoYW5kIGZvciBzdXBwb3NlZGx5IGJlaW5nIG1vcmUgYXdhcmUgaW4gdGhpcyB3ZWlyZCB0aW1lIGlzIHRoYXQgeW91IGFyZSAiQmx1ZSIuIFRoZSBCbHVlIFN0YXRlIG1lbnRhbGl0eS4gVGhpcyBpcyBzdXBwb3NlZCB0byBnZXQgdXMgb2ZmIHRoZSBob29rIGZvciB3aGF0IGlzL3dhcyBoYXBwZW5pbmcgZHVyaW5nIHRoZSBsYXN0IGZldyB5ZWFycyBpbiBvdXIgY291bnRyeSAoVGhlIFVTQSkuIEl0IGRvZXNuJ3QgZ2V0IGFueW9uZSBvZmYgdGhlIGhvb2sgYnV0IGl0IG1ha2VzIHVzIGZlZWwgYmV0dGVyLCBhcyB0aG91Z2ggd2UgYXJlbid0IGJlbmVmaXRpbmcgaW4gYW55IHdheSBmcm9tIGxpdmluZyBoZXJlIGFuZCBnZXR0aW5nIGFsbCB0aGUgZ29vZCBzdHVmZiB0aGF0IGEgVVMgY2l0aXplbiBnZXRzIGp1c3QgYnkgYmVpbmcgYSBVUyBjaXRpemVuLiA8YnIgLz48YnIgLz5CdXQgSSdtIHNvIHNpY2sgb2YgYml0Y2hpbmcgYWJvdXQgdGhpcy4gSXQgZG9lc24ndCBkbyBhbnkgZ29vZC4gSSBoYXZlbid0IHRha2VuIG11Y2ggYWN0aW9uIGxhdGVseSBhbmQgSSB3b25kZXIgaG93IG1hbnkgcGVvcGxlIGhhdmUuIE1heWJlIEknbSBqdXN0IGRvd24gYmVjYXVzZSBteSBqb2Igd2FzICJvdXRzb3VyY2VkIiBsYXN0IG1vbnRoIGFuZCBub3cgSSdtIGxvb2tpbmcgZm9yIHdvcmsgaW4gdGhlIHNocmlua2luZyB0ZWNoIHN1cHBvcnQgZmllbGQgd2hlcmUgbW9zdCBvZiB0aGUgam9icyBhcmUgcXVpY2tseSBnb2luZyB0byBJbmRpYSBhbmQgb3RoZXIgcGxhY2VzIG92ZXJzZWFzLiBJJ20gdGhpbmtpbmcgdGhhdCBzb29uIGl0J3Mgbm90IGdvaW5nIHRvIHBheSBvZmYgdG8gYmUgYSBjaXRpemVuIGhlcmUgd2l0aCB0aGUgc2NyZXdlZCB1cCBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIHNocmlua2luZyBqb2IgbWFya2V0IGFuZCB0aGUgb2JzZXNzaW9uIHdpdGggd2FyLiBUaGVzZSBkYXlzIGl0IHNlZW1zIGxpa2UgYW55b25lIHdobyBzcGVha3Mgb3V0IGdldHMganVtcGVkIGFuZCBxdWVzdGlvbmVkIGFib3V0IHRoZXJlICJwYXRyaW90aXNtIi4gQW55d2F5LCBiYWNrIHRvIHRoaXMgcmV2aWV3OiBVU0EgVGhlIE1vdmllIGlzIGFuIG9ic2N1cmUgRFZEIHRoYXQgbWFrZXMgbWUgcmVhbGl6ZSB0aGF0IHNvbWUgcGVvcGxlIGhhdmUgdGFrZW4gYWN0aW9uLCB3aGV0aGVyIGl0J3MgdGhyb3VnaCBwb2xpdGljcywgcHJvdGVzdGluZyBvciBhcnRzIG9yIG1lZGlhLiBUaGUgZmlsbW1ha2VyIGlzIG9idmlvdXNseSBwYXNzaW9uYXRlLCBrbm93bGVkZ2VhYmxlLCB3aWxsaW5nIHRvIGdvIG91dHNpZGUgdGhlIG5vcm0sIGZydXN0cmF0ZWQsIHVuaXF1ZSwgYXN0dXRlIGV0Yy4gPGJyIC8+PGJyIC8+SSBsb29rZWQgdGhyb3VnaCB0aGUgd2hvbGUgc2l0ZSB0aGF0J3MgbGlua2VkIHRvIHRoZSBEVkQgYW5kIGdvdCBsb3N0IGluIGFsbCB0aGUgYXJ0aWNsZXMsIGVzc2F5cyBldGMudGhhdCBhcmUgdGhlcmUuIFRoZSBEVkQgZG9lcyB0aGF0IHRvbywgaGFzIHJlZmVyZW5jZXMgdG8gZGlmZmVyZW50IHRpbWVzLCB2aWV3cyBhbmQgaGlzdG9yaWNhbCBwb2ludHMuIFNvbWV0aW1lcyBzb21lb25lIGRvZXMgc29tZXRoaW5nIG91dCB0aGVyZS4pAAAAAAAAAEAKwR0IahBqIrEdVGhlIHVudGhpbmthYmxlIGhhcyBoYXBwZW5lZC4gSGF2aW5nIGZpcnN0IHdpdG5lc3NlZCBpdCBhIGZldyB5ZWFycyBhZ28sIEkgaGF2ZSBoYWQgYSBmaWxtIHRoYXQgaGFzIGJlZW4gbXkgYmVuY2htYXJrIGZvciBhd2Z1bG5lc3MgYW5kIHRoYXQgZmlsbSB3YXMgY2FsbGVkICJNY0NpbnNleSdzIElzbGFuZCIuIEEgZmFtaWx5IGFkdmVudHVyZSBtb3ZpZSB3aXRoIEh1bGsgSG9nYW4gYW5kIEdyYWNlIEpvbmVzIChJJ20gbm90IG1ha2luZyB0aGlzIHVwKSwgaXQgcGx1bmdlZCB0byBuZXcgZGVwdGhzIG9mIG1vdmllIG1ha2luZyBhbmQgaXMgc3RpbGwgdGhlIG9ubHkgZmlsbSBJJ3ZlIHNlZW4gdGhhdCBtYWRlIG1lIHdvbmRlciB3aGF0IGVsc2UgdGhlIGZpbG0ncyBidWRnZXQgY291bGQgaGF2ZSBiZWVuIHNwZW50IG9uLiBMaWtlIG5ldyBzY2hvb2xzIG9yIGNhbmNlci10cmVhdGluZyBkcnVncy4gSG93ZXZlciwgZm9yIHNoZWVyIGFuZCB1bmFkdWx0ZXJhdGVkIGxldmVscyBvZiBjcmFwLCBhbnkgZmlsbSB3aWxsIGJlIGhhdmluZyB0byBsb3dlciB0aGVpciBzdGFuZGFyZHMgZXZlbiBsb3dlciBpZiB0aGV5IHdpc2ggdG8gdHJ1bXAgIkd1ZXN0IEhvdXNlIFBhcmFkaXNvIiB0byB0aGUgZGlzdGluY3Rpb24gb2YgYmVpbmcgb25lIG9mIHRoZSB2ZXJ5IHdvcnN0IG1vdmllcyBJJ3ZlIGV2ZXIgaGFkIHRvIHdhdGNoLjxiciAvPjxiciAvPkJhc2VkIGxvb3NlbHkgYXJvdW5kIHRoZSBwdWVyaWxlIGJ1dCBhbXVzaW5nIFRWIHNob3cgIkJvdHRvbSIsIHRoaXMgZmlsbSBpbnRyb2R1Y2VzIHVzIHRvIHR3byBvZiB0aGUgYmlnZ2VzdCBsb3NlcnMgaW1hZ2luYWJsZS4gUmljaGFyZCAoUmlrIE1heWFsbCkgaXMgYSBob3RlbCBtYW5hZ2VyLCBhcyB1bmZyaWVuZGx5IGFzIGFueW9uZSB5b3UgY2FuIGltYWdpbmUgYW5kIHNvIHR3aXN0ZWRseSBsZWNoZXJvdXMgYXMgdG8gYWxtb3N0IG9vemUgc2xpbWUgZnJvbSBldmVyeSBhY3Rpb24uIEhpcyBidWRkeSBFZGRpZSAoZGlyZWN0b3IgQWRyaWFuIEVkbW9uZHNvbikgaXMgYW4gYWxjb2hvbGljIHdhc3RlIG9mIGh1bWFuIGxpZmUgYW5kIHRvZ2V0aGVyLCB0aGV5IHRyeSB0byBydW4gQnJpdGFpbidzIHdvcnN0IGhvdGVsIHNpdHVhdGVkIHVwb24gYSBjbGlmZi10b3AgbmV4dCB0byBhIG51Y2xlYXIgcG93ZXIgc3RhdGlvbi4gQmV0d2VlbiB0aGVtLCB0aGV5IGluZHVsZ2UgaW4gY2FydG9vbnkgdmlvbGVuY2UgKHdpdGggc291bmQgZWZmZWN0cykgYXQgcmVndWxhciBpbnRlcnZhbHMsIHN0ZWFsIGFueXRoaW5nIHJlbW90ZWx5IHZhbHVhYmxlIG9yIGludGVyZXN0aW5nIGZyb20gdGhlIGZvb2xzIHdobyBzdGF5IHRoZXJlIGFuZCBzdGFyZSBsb25naW5nbHkgYXQgYW55IHdvbWFuIGF0IGFsbC4gVGhlIHBsb3QsIHN1Y2ggYXMgaXQgaXMsIGludm9sdmVzIHRoZSBhcnJpdmFsIG9mIGZhYmxlZCBJdGFsaWFuIHNjcmVlbiBnb2RkZXNzIEdpbmEgQ2FyYm9uYXJhIChWaW5jZW50IENhc3NlbCkgd2hvIGlzIGZsZWVpbmcgZnJvbSBoZXIgd2VkZGluZyBhbmQgYXR0ZW1wdHMgdG8gbGF5IGxvdyBhdCB0aGUgR3Vlc3QgSG91c2UgUGFyYWRpc28sIG11Y2ggdG8gdGhlIGFzdG9uaXNobWVudCBvZiBSaWNoaWUgYW5kIEVkZGllLiBBbmQuLi4gdGhhdCdzIGl0LjxiciAvPjxiciAvPkkgdXNlZCB0byB0aGluayB0aGF0IHRoZSBDYXJyeSBPbiBmaWxtcyByZXByZXNlbnRlZCBldmVyeXRoaW5nIGJhZCBhYm91dCB0aGUgVUsgZmlsbSBpbmR1c3RyeSBhbmQgR29kIGtub3dzLCB3ZSd2ZSBzcGVudCBzbyBtdWNoIHRpbWUgYW5kIG1vbmV5IHRyeWluZyB0byBlc2NhcGUgdGhhdCBnb2QgYXdmdWwgbGVnYWN5LiBXZSd2ZSBoYWQgZmlsbXMgbGlrZSAiVHJhaW5zcG90dGluZyIsICIyOCBEYXlzIExhdGVyIiwgIkZvdXIgV2VkZGluZ3MgQW5kIEEgRnVuZXJhbCIgYW5kIHRoZSBicmlsbGlhbnQgIlNoYXVuIE9mIFRoZSBEZWFkIiAoYWxzbyBzdGFycmluZyBTaW1vbiBQZWdnKSBidXQgdGhpcy4uLiB0aGlzIGRyYWdzIHRob3NlIGZpbG1zIHNjcmVhbWluZyBhbmQga2lja2luZyBiYWNrIHRvIHRoZSBkYXlzIG9mIFNpZCBKYW1lcyBhbmQgQmFyYmFyYSBXaW5kc29yJ3MgdG9wIGZseWluZyBvZmYgd2l0aCB0aGUgYWlkIG9mIGEgYmljeWNsZSB3aGlzdGxlLiAiR3Vlc3QgSG91c2UgUGFyYWRpc28iIGlzIHNvIGxvdyBpbiBpdHMgYW1iaXRpb24gdGhhdCBpdCBpbnN1bHRzIHlvdSB0aGUgbWludXRlIHlvdSB3YXRjaCBpdC4gSSBrZXB0IHdhdGNoaW5nLCB3YWl0aW5nIGluIGFudGljaXBhdGlvbiBmb3IgdGhlIGpva2VzIHRvIHN0YXJ0IGJ1dCB0aGV5IG5ldmVyIGNhbWUuIEp1c3QgYW4gZW5kbGVzcyBzdHJlYW0gb2YgdHJhcHBlZCBrbm9iIGdhZ3MsIHVuaW1hZ2luYXRpdmUgc2NlbmFyaW9zIHRoYXQgZGVmeSBleHBsYW5hdGlvbiwgc2xpZ2h0bHkgYW11c2luZyB2aW9sZW5jZSB3aXRoIGZyeWluZyBwYW5zIGFuZCBmcmlkZ2UgZG9vcnMgYW5kIGFsbW9zdCBub3RoaW5nIHJhaXNpbmcgc28gbXVjaCBhcyBhIHNtaXJrLiBDb21lIHRoZSBmaXJzdCBhZCBicmVhayAoaXQgd2FzIG9uIFRWLCB5b3Ugc2VlKSBhbmQgSSB3YXMgcmVhZHkgdG8gc3dpdGNoIG9mZiBidXQgbXkgbG95YWwgZHV0aWVzIHRvIHlvdSwgbXkgcmVhZGVycywga2VwdCBtZSBnb2luZy4gIkknbSB3YXRjaGluZyB0aGlzIHNvIHRoZXkgZG9uJ3QgaGF2ZSB0byIgYmVjYW1lIG15IG1hbnRyYSBzbyB5b3UgZ3V5cyBiZXR0ZXIgcmVtZW1iZXIgaG93IG11Y2ggeW91IG93ZSBtZSBmb3IgdGhpcyBiZWNhdXNlIHRoaXMgd2FzIGFib3V0IGFzIG11Y2ggZnVuIGFzIGhhdmluZyBzYW5kIGtpY2tpbmcgaW50byBteSBleWVzIGFuZCBiZWluZyBmb3JjZS1mZWQgZG9nIGZvb2QuPGJyIC8+PGJyIC8+VHJ1c3QgbWUsIEkgdXNlZCB0byBsb3ZlIHRoZSAiQm90dG9tIiBUViBzaG93LiBUaGUgY29tYmluYXRpb24gb2Ygc3VpdGFibHkgZ3J1YmJ5IGFjdGluZyBmcm9tIE1heWFsbCBhbmQgRWRtb25kc29uIHdpdGggT1RUIGp1dmVuaWxlIGh1bW91ciB3b3JrZWQuLi4gZm9yIGhhbGYgYW4gaG91ciBldmVyeSB3ZWVrLiBDZXJ0YWlubHkgbm90IGZvciBhbiBob3VyIGFuZCBhIGhhbGYsIGFzIEVkbW9uZHNvbiBhbmQgTWF5YWxsIGluZHVsZ2UgdGhlbXNlbHZlcyBpbiB0aGVpciBsaXR0bGUgcHJpdmF0ZSBqb2tlIGFuZCBib3JlIGFuZCBkZXByZXNzIHRoZSByZXN0IG9mIHRoZSBhdWRpZW5jZS4gSG9uZXN0bHksIHRoaXMgbWFrZXMgTWF5YWxsJ3MgIkRyb3AgRGVhZCBGcmVkIiBzZWVtIGxpa2UgIlRoZSBHb2RmYXRoZXIiIGFuZCBzaG91bGQgeW91IGhhcHBlbiB0byBtZWV0IGVpdGhlciBvZiB0aGVzZSB0d28gcGVvcGxlICh3aG8gYXJlIHByZXR0eSBtdWNoIHNvbGVseSByZXNwb25zaWJsZSBmb3IgdGhlIGNoYW9zIG9uIHNjcmVlbiBwcmV0ZW5kaW5nIHRvIGJlIGEgbW92aWUpLCBmZWVsIGZyZWUgdG8gc3dpZnRseSBkZWxpdmVyIGEgYm9vdCB0byB0aGVpciB0ZXN0aWNsZSByZWdpb24uIFRoZXknZCBwcm9iYWJseSBlbmpveSBpdC4gUGVnZyBhbmQgQmlsbCBOaWdoeSAoYm90aCBhcyBndWVzdHMgYXQgdGhlIGhvdGVsKSBhcmUgZHJhZ2dlZCBkb3duIHdpdGggdGhpcyBzaW5raW5nIHNoaXAgYnV0IGF0IGxlYXN0IHRoZXkgc3Vydml2ZWQuIE1heWFsbCBhbmQgRWRtb25kc29uIHNob3VsZCBub3QgYmUgc28gbHVja3kuIFRoZSBtb3ZpZSBlcXVpdmFsZW50IG9mIENoZXJub2J5bCBhbmQgc2hvdWxkIGJlIGF2b2lkZWQgYXMgc3VjaC4pAAAAAAAAAEAKwwQIaxBrIrMEVGhlIHVuZG91YnRlZCBoaWdobGlnaHQgb2YgdGhpcyBtb3ZpZSBpcyBQZXRlciBPJ1Rvb2xlJ3MgcGVyZm9ybWFuY2UuIEluIHR1cm4gd2lsZGx5IGNvbWljYWwgYW5kIHRlcnJpYmx5IHRlcnJpYmx5IHRyYWdpYy4gRG9lcyBhbnlib2R5IGRvIGl0IGJldHRlciB0aGFuIE8nVG9vbGU/IEkgZG9uJ3QgdGhpbmsgc28uIFdoYXQgYSBncmVhdCBmYWNlIHRoYXQgbWFuIGhhcyE8YnIgLz48YnIgLz5UaGUgc3RvcnkgaXMgYW4gb2RkIG9uZSBhbmQgcXVpdGUgZGlzdHVyYmluZyBhbmQgZW1vdGlvbmFsbHkgaW50ZW5zZSBpbiBwYXJ0cyAoZXNwZWNpYWxseSB0b3dhcmQgdGhlIGVuZCkgYnV0IGl0IGlzIGFsc28gb2RkbHkgdG91Y2hpbmcgYW5kIGRvZXMgc3VjY2VlZCBvbiBtYW55IGxldmVscy4gSG93ZXZlciwgSSBmZWx0IHRoZSBmaWxtIGJhc2ljYWxseSByZXZvbHZlZCBhcm91bmQgUGV0ZXIgTydUb29sZSdzIGx1bWlub3VzIHBlcmZvcm1hbmNlIGFuZCBJJ20gc3VyZSBJIHdvdWxkbid0IGhhdmUgZW5qb3llZCBpdCBldmVuIGhhbGYgYXMgbXVjaCBpZiBoZSBoYWRuJ3QgYmVlbiBpbiBpdC4pAAAAAAAAAEAK1AUIbBBsIsQFVGhlIHRocmVlc29tZSBvZiBCaWxsIEJveWQsIFJvYmVydCBBcm1zdHJvbmcsIGFuZCBKYW1lcyBHbGVhc29uIHBsYXkgQ29uZXkgSXNsYW5kIGNhcm55cyB2eWluZyBmb3IgdGhlIGhhbmQgb2YgR2luZ2VyIFJvZ2VycywgYSB3b3JraW5nIGdhbCB3aG8gc2VsbHMgc2FsdCB3YXRlciB0YWZmeS4gV2l0aCB0aGUgb3V0YnJlYWsgb2YgV29ybGQgV2FyIEksIHRoZSB0aHJlZXNvbWUgZW5saXN0IGFuZCBwdXJzdWUgR2luZ2VyIGZyb20gYWZhci4gVGhlIGZpcnN0IGhhbGYgb2YgdGhpcyBSS08gUGF0aGUgcHJvZHVjdGlvbiBpcyBoYXJkIGdvaW5nLCB3aXRoIHRoZSB0aHJlZSBtYWxlIGxlYWRzIGNoZXdpbmcgdXAgdGhlIHNjZW5lcnkgd2l0aCBvdmVyY29va2VkIG9uZS1saW5lcnMgYW5kICdzbmFwcHknIGRpYWxvZ3VlIHRoYXQgcXVpY2tseSBncm93cyB0aXJlc29tZS4gVGhlIHNlY29uZCBoYWxmIGNvbmNlbnRyYXRlcyBvbiBhY3Rpb24gc2VxdWVuY2VzIGFzIHRoZSBVUyBOYXZ5IHB1cnN1ZXMgYm90aCBhIEdlcm1hbiBtZXJjaGFudCBjcnVpc2VyIGFuZCBhIFUtYm9hdC4gVGhlc2Ugc2VxdWVuY2VzIGFyZSBsaXZlbHkgYW5kIHdlbGwtZmlsbWVkLCBidXQgb3ZlcmFsbCB0aGlzIGlzIGFuIG92ZXJsb25nIGFuZCB1bnNhdGlzZnlpbmcgY29tZWR5LWRyYW1hIHdpdGggYSBmbGF0IGVuZGluZy4gRm9yIGZhbnMgb2YgdGhlIHN0YXJzIG9ubHkuKQAAAAAAAABACqoWCG0QbSKaFlRoZSBzdW4gd2FzIG5vdCBzaGluaW5nLCBpdCB3YXMgdG9vIHdldCB0byBwbGF5LCBzbyBJIHdlbnQgdG8gdGhlIG1vdmllcywgdGhhdCBjb2xkLCBjb2xkLCB3ZXQgZGF0ZSBkYXkuPGJyIC8+PGJyIC8+IlRoZSBDYXQgaW4gdGhlIEhhdCIgd2FzIHRoZSBuYW1lIG9mIHRoZSBmbGljaywgYW5kIHdoZW4gaXQgd2FzIG92ZXIsIG15IHN0b21hY2ggd2FzIHNpY2suPGJyIC8+PGJyIC8+TWlrZSBNeWVycyBwbGF5ZWQgdGhlIENhdCwgaGlzIGh1bW9yIHdhcyBsYW1lLCBhbmQga2lkcyBuZWVkbid0IHNlZSB0aGlzLCB0aGUgaHVtb3Igd2FzIG5vdCB0YW1lLjxiciAvPjxiciAvPnRoZSBmaWxtIHdhcyBsaWtlIGRyaW5raW5nIG1pbGssIGZyb20gYSByYWJpZCBjb3csIHNvIGl0IElTIGZ1biB0byBoYXZlIGZ1biwgeWV0IHRoZSBmaWxtbWFrZXJzIGRpZG4ndCBrbm93IGhvdy48YnIgLz48YnIgLz5UaGlzIGZpbG0sIGluIHNob3J0IGlzIGF0cm9jaW91cy4gVGhlIGFjdGluZyB3YXMgYmFkLCB0aGUgcGxvdCB3YXMgdHdlYWtlZCB0b28gbXVjaCwgYW5kIHRoZSBodW1vciB3YXMgc3VycHJpc2luZ2x5IHZlcnkgY3J1ZGUuPGJyIC8+PGJyIC8+SXQgc3RhcnRzIHdpdGggQ29ucmFkIGFuZCBTYWxseSwgQSBydWxlIGJyZWFrZXIgYW5kIGEgZnV0dXJlIHNoZXJpZmYuIFdoZW4gdGhlaXIgTW90aGVyIGhhcyB0byBnbyB0byB3b3JrLCBzaGUgZ2V0cyBNcnMuIEt3YW4gdG8gYmFieXNpdC4gUG9zc2libHkgdGhlIGxvbmUgZnVubnkgcGFydCBpbiB0aGUgbW92aWUgaXMgd2hlbiBNcnMuIEt3YW4gaXMgd2F0Y2hpbmcgYSBUYWl3YW5lc2UgY291cnQgcm9vbSwgYSBgbGEgQy1TUEFOLiBTaGUgc29vbiBmYWxscyBhc2xlZXAsIGFuZCBoZXJlIGNvbWVzIHRoZSBDYXQuPGJyIC8+PGJyIC8+VGhlIGZpbG0gc3RhcnRzIHRvIHNwaXJhbCBvdXQgb2YgY29udHJvbC4gVGhlIENhdCBjYW1lIHRvIHRyeSB0byBsZXQgdGhlIGtpZHMgaGF2ZSBzb21lIGZ1bi4gSGUncyBnb3QgVGhpbmcgMSBhbmQgVGhpbmcgMiwgV2hvIHN1ZGRlbmx5IHN0YXJ0IHRyYXNoaW5nIHRoZSBob3VzZS4gSGUgaW1wcm92aXNlcyBhIFRWIEluZm9tZXJjaWFsLCBhbmQgYWNjaWRlbnRhbGx5IHNsaWNlcyBoaXMgdGFpbCBvZmYuIEFuZCB3aGVuIHRoZSBDYXQgZ29lcyBmdWxsIENhcm1lbiBNaXJhbmRhLCBpdCdzIG5vdCBmdW5ueS4gUG9zc2libHkgaGlzIG9ubHkgZnVubnkgZGlzZ3Vpc2UgaXMgYXMgYSBoaXBwaWUgYWN0aXZpc3QuIEFuZCB0aGVyZSdzIGEgZmlzaCB3aG8gdHJpZXMgd2FybmluZyB0aGUga2lkcyBhYm91dCB0aGUgQ2F0LjxiciAvPjxiciAvPlRvbyBiYWQgaGUgZGlkbid0IHdhcm4gdXMgdGhpcyBmaWxtIHdhcyBhcyBtdWNoIGZ1biBhcyBzb3VyIG1pbGssIG9yIGNob3BwaW5nIHlvdXIgdGFpbCBvZmYuPGJyIC8+PGJyIC8+U29vbiB0aGUga2lkcyBhcmUgb3V0c2lkZSBsb29raW5nIGZvciB0aGUgZmFtaWx5IGRvZywgd2hvIGhhcyB0aGUga2V5IHRvIGEgY3JhdGUgb24gaGlzIGNvbGxhci4gSWYgdGhlIGNyYXRlIGlzIG5vdCBsb2NrZWQgc29vbiwgdGhlaXIgaG91c2Ugd2lsbCBiZSBob21lIHRvIHRoZSBDYXQncyB1bml2ZXJzZS4gSGVyZSBpdCBnZXRzIGEgbGl0dGxlIG1vcmUgaW50ZXJlc3RpbmcsIGJ1dCBub3QgZW5vdWdoIHRvIHNhdmUgdGhlIGZpbG0uPGJyIC8+PGJyIC8+VGhlIGFjdGluZywgb3ZlcmFsbCwgaXMgaG9ycmlibGUuIE1pa2UgTWV5ZXJzIGJyaW5ncyBoaXMgYnJhbmQgb2YgaXJyZXZlcmVudCBBdXN0aW4gUG93ZXJzIGh1bW9yIHRvIHRoZSBDYXQsIFNheWluZyB0aGluZ3MgbGlrZSAiWW91IGRpcnR5IGhvIiBhbmQgaW1hZ2luaW5nIGhpbXNlbGYgYXMgYSB3b21hbiBmb3IgdGhlIHJlc3Qgb2YgaGlzIGxpZmUgYWZ0ZXIgYSB3aGFjayBpbiB0aGUgdGVzdGljbGVzIHdoaWxlIHBvc2luZyBhcyBhIHBpbmF0YS4gU3BlbmNlciBCcmVzbGluIGlzIGdyZWF0IGFzIHRoZSB0cm91YmxlLW1ha2luZyBDb25yYWQsIGFuZCBEYWtvdGEgRmFubmluZyBpcyBjdXRlIGFzIFNhbGx5LCB0aG91Z2ggdGhleSBhbG9uZSBhcmUgbm90IGVub3VnaCB0byBzYXZlIHRoaXMgaG9ycmVuZG91cyBBb3J0aWMgRGlzc2VjdGlvbiB3YWl0aW5nIHRvIGtpbGwgSm9obiBSaXR0ZXIoYWNjaWRlbnQgd2FpdGluZyB0byBoYXBwZW4pLiBBbGVjIEJhbGR3aW4ncyBzbGljayBhbmQgc2xpbWV5IExhd3JlbmNlIFF1aW5uIGlzIGRpc2d1c3RpbmcsIGV2ZXIgdHJ5aW5nIHRvIHdvbyB0aGUga2lkcyBtb20sIHdobyBpcyBwbGF5ZWQgYnkgS2VsbHkgUHJlc3Rvbi4gQW5kIFNlYW4gSGF5ZXMgaXMgTXIuIEh1bWJlcmZsb29iLCBNb20ncyBib3NzLCBhbmQgaXMgYWxzbyB0aGUgdm9pY2Ugb2YgdGhlIGZpc2guIFRoZSBsYXR0ZXIgdGhyZWUgYXJlIGFsc28gYmxhbmQuPGJyIC8+PGJyIC8+T3ZlcmFsbCwgaWYgSSB3ZXJlIGEgcGFyZW50IEkgd291bGQgbm90IHRha2UgbXkga2lkcyB3aG8gYXJlIGludG8gcG90dHkgaHVtb3IsIGNhdXNlIHRoZXJlJ3MgcGxlbnR5IG9mIGl0IGFuZCBtb3JlLiBTYXZlIHlvdXIgJDcuMDAgYW5kIHNlZSBzb21ldGhpbmcgZWxzZS4gQXMgdGhlIGxhdGUgZ3JlYXQgRHIuIFNldXNzIG9uY2Ugc2FpZCw8YnIgLz48YnIgLz5JdCBpcyBmdW4gdG8gaGF2ZSBmdW4sIEJ1dCB5b3UgaGF2ZSB0byBrbm93IGhvdy4gUmVhbGx5LCBVbml2ZXJzYWwsIHN0b3AhIFRoZW9kb3JlJ3MgYWxyZWFkeSB0dXJuaW5nIG92ZXIgaW4gaGlzIGdyYXZlLjxiciAvPjxiciAvPkxpa2UgbXkgTW9tIGFsd2F5cyBzYXlzLCAiQ3VyaW91c2l0eSBraWxsZWQgdGhlIENhdCIuLSBUaGUgQ2F0IEluIFRoZSBIYXQgKiBvdXQgb2YgKioqKiopAAAAAAAAAEAKtAkIbhBuIqQJVGhlIHN0cmFuZ2VyIEphY2sgKE1hdHRoZXcgTGlsbGFyZCkgYXJyaXZlcyBpbiB0aGUgc3R1ZGlvIG9mIHRoZSBjcm9vayBjb2xsZWN0b3Igb2YgYW50aXF1ZXMgTWF4IChWaW5jZW50IEQnT25vZnJpbykgYW5kIHRlbGxzIGhpcyBhbWJpdGlvdXMgY29tcGFuaW9uIGFuZCBzcGVjaWFsaXN0IGluIHBvaXNvbnMgSmFtaWUgKFZhbGVyaWEgR29saW5vKSB0aGF0IGhlIGlzIEphY2sncyBicm90aGVyLiBKYW1pZSBkb2VzIG5vdCBidXkgaGlzIHN0b3J5LCBkb21pbmF0ZXMgSmFjayBhbmQgdGllcyBoaW0gdXAgdG8gYSBjaGFpci4gV2hlbiBNYXggYXJyaXZlcywgSmFjayBwcm9wb3NlcyBVUyQgMTAwLDAwMC4wMCBmb3IgZWFjaCBvbmUgdG8gcHJvdGVjdCBoaW0gaW4gYSBuZWdvdGlhdGlvbiBvZiB0aGUgYW50aXF1ZXMgIlNwYW5pc2ggSnVkZ2VzIiB3aXRoIGEgd2VhbHRoeSBhbmQgZGFuZ2Vyb3VzIGNvbGxlY3Rvci4gTWF4IGludml0ZXMgaGlzIHN0dXBpZCBhY3F1YWludGFuY2UgUGllY2UgKE1hcmsgQm9vbmUgSnVuaW9yKSwgd2hvIGNvbWVzIHdpdGggaGlzIHJldGFyZGVkIGdpcmxmcmllbmQgdGhhdCBiZWxpZXZlcyBzaGUgaXMgZnJvbSBNYXJzLCB0byBjb21wb3NlIHRoZSBiYWNrdXAgdGVhbS4gSG93ZXZlciwgSmFjayBkb3VibGUtY3Jvc3NlcyB0aGUgY29sbGVjdG9yIGFuZCB0aGVuIGhlIGludHJpZ3VlcyBKYWNrLCBKYW1pZSBhbmQgUGllY2UuPGJyIC8+PGJyIC8+VGhlIGxvdyBidWRnZXQgIlNwYW5pc2ggSnVkZ2VzIiBpcyBhIG1vdmllIHdpdGggYSByZWFzb25hYmxlIHNjcmVlbnBsYXkgd2l0aCBhbiBhd2Z1bCBjb25jbHVzaW9uIHRoYXQgd2FzdGVzIGEgZ29vZCBjYXN0LiBWYWxlcmlhIEdvbGlubyBpcyBhc3RvbmlzaGluZ2x5IGJlYXV0aWZ1bCBidXQgdG9nZXRoZXIgd2l0aCB0aGUgZ29vZCBhY3RvciBWaW5jZW50IEQnT25vZnJpbywgdGhleSBhcmUgbm90IGFibGUgdG8gc2F2ZSB0aGUgc3R1cGlkIHN0b3J5LiBGdXJ0aGVyLCB0aGUgc2NlbmVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGZ1bm55IHVuZm9ydHVuYXRlbHkgZG8gbm90IHdvcmssIGFuZCBhY3R1YWxseSB0aGV5IGFyZSBzaWxseSBhbmQgbm90IGZ1bm55LiBNeSB2b3RlIGlzIHRocmVlLjxiciAvPjxiciAvPlRpdGxlIChCcmF6aWwpOiAiVHVkbyBQb3IgRGluaGVpcm8iICgiQWxsIEZvciBNb25leSIpKQAAAAAAAABACusGCG8QbyLbBlRoZSBzdG9yeSBhbmQgdGhlIHNob3cgd2VyZSBnb29kLCBidXQgaXQgd2FzIHJlYWxseSBkZXByZXNzaW5nIGFuZCBJIGhhdGUgZGVwcmVzc2luZyBtb3ZpZXMuIFJpJ0NoYXJkIGlzIGdyZWF0LiBIZSByZWFsbHkgcHV0IG9uIGEgdG9wIG5vdGNoIHBlcmZvcm1hbmNlLCBhbmQgdGhlIGdpcmwgd2hvIHBsYXllZCBoaXMgc2lzdGVyIHdhcyByZWFsbHkgYXdlc29tZSBhbmQgZ29yZ2VvdXMuIFNlcmlvdXNseSwgSSB0aG91Z2h0IHNoZSB3YXMgQ2FybWVuIEVsZWN0cmEgdW50aWwgSSBzYXcgdGhlIElNRGIgcHJvZmlsZS4gSSBjYW4ndCBzYXkgYW55dGhpbmcgYmFkIGFib3V0IFBldGVyIEdhbGxlZ2hhci4gSGUncyBvbmUgb2YgbXkgZmF2b3JpdGUgYWN0b3JzLiBJIGxvdmUgQW5uZSBSaWNlLiBJJ20gY3VycmVudGx5IHJlYWRpbmcgdGhlIFZhbXBpcmUgQ2hyb25pY2xlcywgYnV0IEknbSBnbGFkIEkgc2F3IHRoZSBtb3ZpZSBiZWZvcmUgcmVhZGluZyB0aGUgYm9vay4gVGhpcyBpcyBhIGxpdHRsZSB0b28icmVhbCIgZm9yIG1lLiBJIHByZWZlciBMZXN0YXQgYW5kIExvdWlzJ3Mgd2l0dHkgbGl0dGxlIHRpZmZzIHRvIHRoZSBzdHJ1Z2dsZXMgb2Ygc2xhdmVzLiBFYXJ0aGEgS2l0dCB3YXMgc28gY3JlZXB5IGFuZCBhZnRlciBoZXIgY2hhcmFjdGVyIGRpZCB3aGF0IHNoZSBkaWQgVGhlIG1vdmllIHdhcyBydWluZWQgZm9yIG1lOyBJIGNvdWxkIGJhcmVseSBzdGFuZCB0byB3YXRjaCB0aGUgcmVzdCBvZiB0aGUgc2hvdy4gKHNvcnJ5IGZvciB0aGUgYW1iaWd1aXR5LCBidXQgSSBkb24ndCB3YW50IHRvIGdpdmUgYW55dGhpbmcgYXdheSkgU29ycnksIGJ1dCBpdCdzIGp1c3Qgbm90IG15IHR5cGUgb2Ygc2hvdy4pAAAAAAAAAEAKwAQIcBBwIrAEVGhlIHByZW1pc2Ugb2YgQm90dG9tIGNyb3NzZWQgd2l0aCBGYXdsdHkgVG93ZXJzIHNvdW5kcyBncmVhdCEgSG93ZXZlciwgQWRlIEVkbW9uc29uICYgUmlrIE1heWFsbCBoYXZlIG1hbmFnZWQgdG8gY3JlYXRlIGEgZmlsbSB0aGF0IHJhaXNlcyBiYXJlbHkgYSB0aXR0ZXIuIFRlbiB5ZWFycyBhZ28sIFJpayBNYXlhbGwncyBtYWQgc3RhcmUgYW5kIEFkZSdzIGlkaW9jeSB3ZXJlIGZ1bm55LCBub3cgdGhleSBhcmUganVzdCBhbm5veWluZy48YnIgLz48YnIgLz5UaGUgZmlsbSBoYWQgcHJvbWlzZSAtIHRob3VnaCB0aGUgbW9zdCBob3JyZW5kb3VzIGhvdGVsIGluIEJyaXRhaW4gaXMgbm90IGEgbmV3IGlkZWEgLSBidXQgZmFpbGVkIHRvIGRlbGl2ZXIuIFRoZSBzYXZpbmcgZ3JhY2VzIHdlcmUgY29tcGV0ZW50IHBlcmZvcm1hbmNlcyBmcm9tIFNpbW9uIChTcGFjZWQsIEJpZyBUcmFpbikgUGVnZyBhbmQgSGVsZW5lIE1hdGhpZXUsIGFuZCB0aGUgZmlsbSBpcyBvbmx5IDkwIG1pbnV0ZXMgbG9uZy4gU29ycnksIGd1eXMsIGJ1dCB5b3UgcmVhbGx5IGhhdmUgaGl0IHRoZSBCb3R0b20pAAAAAAAAAEAKtwYIcRBxIqcGVGhlIG90aGVyIGxvd2VzdC1yYXRpbmcgcmV2aWV3ZXJzIGhhdmUgc3VtbWVkIHVwIHRoaXMgc2V3YWdlIHNvIHBlcmZlY3RseSB0aGVyZSBzZWVtcyBsaXR0bGUgdG8gYWRkLiBJIG11c3Qgc3RyZXNzIHRoYXQgSSd2ZSBvbmx5IGhhZCB0aGUgQ29ja25leSBGaWx0aCBpbXBvc2VkIG9uIG1lIGR1cmluZyB2aXNpdHMgZnJvbSBteSBjaGlsZHJlbiwgd2hvIGluc2lzdCBvbiB3YXRjaGluZyB0aGUgU3VuZGF5IG9tbmlidXMuIE15IGdvZCwgaXQncyBkZXByZXNzaW5nISBMaWtlIGFsbCBzb2FwcywgaXQgY29uc2lzdHMgZW50aXJlbHkgb2YgdG90YWxseSB1bmxpa2VhYmxlIGNoYXJhY3RlcnMgYmVpbmcgdW5wbGVhc2FudCB0byBlYWNoIG90aGVyLCBidXQgaXQncyB0ZW4gdGltZXMgYXMgYmFkIGFzIHRoZSBuZXh0IHdvcnN0IG9uZSBjb3VsZCBiZS4gVGhlIHJldmlld2VyIHdobyBtb2NrZWQgdGhlICd0cnVlIHRvIGxpZmUnIGJpbGdlIHNwb3V0ZWQgYnkgaXRzIGRlZmVuZGVycyB3YXMgc3BvdC1vbi4gSWYgYW55b25lIGxpdmVkIGluIGEgc29jaWFsIGVudmlyb25tZW50IGxpa2UgdGhpcywgdGhleSdkIHNsYXNoIHRoZWlyIHdyaXN0cyB3aXRoaW4gZGF5cy4gQW5kIEkgY2FuIGFzc3VyZSBhbnlvbmUgbm90IGZhbWlsaWFyIHdpdGggdGhlIHJlYWwgRWFzdCBFbmQgdGhhdCBpdCdzIHJhdGhlciBtb3JlICdldGhuaWNhbGx5IGVucmljaGVkJyB0aGFuIHlvdSdsbCBldmVyIHNlZSBoZXJlLiBUYWtlIG15IGFkdmljZSAtIGF2b2lkIHRoaXMgbmFkaXIgb2YgdGhlIEJyaXRpc2ggVFYgaW5kdXN0cnkuIEl0IGlzIEVWSUwuKQAAAAAAAABACuEDCHIQciLRA1RoZSBvcmlnaW5hbCAibGVzIHZpc2l0ZXVycyIgd2FzIG9yaWdpbmFsLCBoaWxhcmlvdXMsIGludGVyZXN0aW5nLCBiYWxhbmNlZCBhbmQgbmVhciBwZXJmZWN0LiBMVjIgbXVzdCBiZSBhIGNhbmRpZGF0ZSBmb3IgIldvcnN0IGZpcnN0IHNlcXVlbCB0byBhIHJlYWxseSBnb29kIGZpbG0iLiBJbiBMVjIgZXZlcnlvbmUga2VlcHMgc2hvdXRpbmcsIHdoZW4gYSBnYWcgZG9lc24ndCB3b3JrIGZpcnN0IGl0J3MgcmVwZWF0ZWQgYW5vdGhlciA1IHRpbWVzIHdpdGggc29tZSB2YWd1ZSBob3BlIHRoYXQgaXQgd2lsbCBldmVudHVhbGx5IGJlY29tZSBmdW5ueS4gTFYyIGlzIGEgaG9ycmlibGUgcGFyb2R5IG9mIExWMSwgZXhjZXB0IG9mIGNvdXJzZSB0aGF0IGEgcGFyb2R5IHNob3VsZCBiZSBpbnZlbnRpdmUuIElmIHlvdSBsb3ZlZCBMVjEganVzdCBkb24ndCBzZWUgdGhpcyBmaWxtLCBqdXN0IHNlZSBMVjEgYWdhaW4hISkAAAAAAAAAQAqgBghzEHMikAZUaGUgb25seSBnb29kIHRoaW5nIGFib3V0IHRoaXMgdW5mdW5ueSBkcmVjayBpcyB0aGF0IEkgZGlkbid0IGhhdmUgdG8gcGF5IGZvciBpdC4gSSBzYXcgaXQgZm9yIGZyZWUgYXQgY29sbGVnZS4gQW5kIGlmIGEgY29sbGVnZSBzdHVkZW50IGNhbid0IGZpbmQgaHVtb3IgaW4gc29tZXRoaW5nIHRoYXQgd2FzIGZyZWUsIGl0J3MgaG9wZWxlc3MuPGJyIC8+PGJyIC8+U3RhbGUgYWN0aW5nIGFuZCBwb29yIGpva2VzIGNhbm5vdCBiZSBtYXNrZWQgYnkgYW4gZXhjZWxsZW50LCB5ZXQgYmV3aWxkZXJpbmcgc2V0IGRlc2lnbiAodGhhdCBnb2VzIG91dCBvZiBpdHMgd2F5IHRvIG1hcmtldCBWb2xrc3dhZ29uIEJlZXRsZXMpLiBJIGRvbid0IGtub3cgd2hhdCBNaWNoYWVscyBNeWVycyB3YXMgZG9pbmcgaW4gdGhpcyBtb3ZpZSwgYnV0IEkgaGF2ZSBuZXZlciBzZWVuIGFueXRoaW5nIG1vcmUgZGVwcmVzc2luZy4gVGhpcyB3YXMgbm90aGluZyBtb3JlIHRoYW4gYSBibGF0YW50IGVmZm9ydCB0byBjYXBpdGFsaXplIG9uIHRoZSBwcmV2aW91cyBzdWNjZXNzIG9mIHRoZSBHcmluY2ggKHdoaWNoIGhhcyBpdHMgb3Bwb25lbnRzLCBidXQgSSBlbmpveWVkIGl0IHZlcnkgbXVjaCkuIEl0J3MgZGlmZmljdWx0IG5vdCB0byBzaXQgdGhyb3VnaCB0aGlzIGZhaWx1cmUgYW5kIHdvbmRlciB3aGF0IGJldHRlciBwcm9qZWN0cyB3ZXJlIHBhc3NlZCBvdmVyIHRvIGZ1bmQgaXQuPGJyIC8+PGJyIC8+WW91IHdhbnQgYSBmdW5ueSBTZXVzcyBhZGFwdGF0aW9uPyBHbyB3aXRoIHRoZSBHcmluY2guKQAAAAAAAABACqkFCHQQdCKZBVRoZSBtb3ZpZSB3YXMgdmVyeSBnb29kLiBJJ20gYW4gYXZpZCBteXN0ZXJ5IGZhbiBhbmQgSSB1c3VhbGx5IGZpZ3VyZSBvdXQgd2hvIGlzIGdvaW5nIHRvIGJlIGtpbGxlZCBhbmQgd2hvIGRpZCB0aGUga2lsbGluZy4gV2hpbGUgSSBkaWQgZmlndXJlIG91dCB3aG8gd2FzIGdvaW5nIHRvIGJlIGtpbGxlZCBJIGRpZG4ndCBmaWd1cmUgb3V0IHdobyBkaWQgaXQuIEkgd2Fzbid0IGhhcHB5IHdpdGggdGhlIHBvcnRyYXlhbCBvZiB0aGUgR2VyZGEgY2hhcmFjdGVyIGJ1dCBnaXZlbiB0aGUgeWVhciB0aGUgbW92aWUgd2FzIHN1cHBvc2VkIHRvIHRha2UgcGxhY2UgaXQgaXMgcG9zc2libGUgdGhlIHdvbWFuIHdvdWxkIGhhdmUgYmVlbiB0aGF0ICdjbG95aW5nJy4gUGxlYXNlIGtub3cgdGhhdCB3aGlsZSB0aGVzZSBQb2lyb3QgbW92aWVzIGFyZSBnb29kLCB0aGV5IGp1c3QgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBkeW5hbWljIHRvIHRoZW0gYXMgdGhlIHNlcmllcyBkb2VzIGJlY2F1c2UgdGhleSBkb24ndCBoYXZlIEphcHAsIE1zLiBMZW1vbiBhbmQgZXNwZWNpYWxseSBIYXN0aW5ncyEgRGF2aWQgU3VjaGV0IGlzIGRlZmluaXRlbHkgUG9pcm90LiBJIGhhdmUgc2VlbiBldmVyeSBhY3RvciB3aG8ncyBwbGF5ZWQgaGltLiBUaGUgd29yc3Qgd2FzIFBldGVyIFVzdGlub3YhKQAAAAAAAABACuIFCHUQdSLSBVRoZSBtb3ZpZSB3YXMgZXhjZWxsZW50LCBzYXZlIGZvciBzb21lIG9mIHRoZSBzY2VuZXMgd2l0aCBFc3Bvc2l0by4gSSBlbmpveWVkIGhvdyBpdCBicm91Z2h0IHRvZ2V0aGVyIGV2ZXJ5IGRldGVjdGl2ZSBvbiB0aGUgc2VyaWVzLCBhbmQgd3JhcHBlZCB1cCBzb21lIHBsb3RsaW5lcyB0aGF0IHdlcmUgbmV2ZXIgcmVzb2x2ZWQgZHVyaW5nIHRoZSBzZXJpZXMgKHRoYW5rcyB0byBOQkMuLi4pLiBJdCB3YXMgZ3JlYXQgdG8gc2VlIFBlbWJsZXRvbiBhbmQgQmF5bGlzcyB0b2dldGhlciBhdCB0aGVpciBtb3N0IGh1bWFuLCBhbmQgbW9zdCBiYXNpYyBwZXJzb25zLiBCcmF1Z2hlciBhbmQgU2Vjb3IgZGlkIGEgZ3JlYXQgam9iLCBidXQgYXMgdXN1YWwgd2lsbCBnZXQgb3Zlcmxvb2tlZC4gSXQgaHVydCB0byBzZWUgdGhhdCB0aGlzIHdhcyB0aGUgZW5kIG9mIEhvbWljaWRlLiBNZW1vcmllcywgdGFwZXMsIGFuZCByZXJ1bnMgb24gQ291cnRUViBqdXN0IGFyZW4ndCB0aGUgc2FtZSBhcyB3YXRjaGluZyBpdCBjb21lIG9uIGV2ZXJ5IEZyaWRheS4gQnV0IHRoZSBtb3ZpZSBkaWQgaXRzIGpvYiBhbmQgZGlkIGl0IHZlcnkgd2VsbCwgcHJlc2VudGluZyBhIGdyZWF0IGRlcGljdGlvbiBvZiBsaWZlIGFmdGVyIEFsIHJldGlyZWQsIGFuZCB0aGUgZmFtaWx5IHJlbGF0aW9uc2hpcCB0aGF0IGV4aXN0ZWQgYmV0d2VlbiB0aGUgdW5pdC4gSSBlbmpveWVkIHRoaXMgYSBsb3QuKQAAAAAAAABACrsDCHYQdiKrA1RoZSBtb3ZpZSBjb250YWlucyBhIHZlcnkgc2hvcnQgc2NlbmUgb2YgRGVuZXV2ZSBpbiBhIGJhdGh0dWIuIFNoZSBsb29rcyBhYnNvbHV0ZWx5IHN0dW5uaW5nIGZvciBhIGxhZHkgYWdlIDU2LCBidXQgdGhpcyBpcyB0aGUgb25seSBzYXZpbmcgZ3JhY2Ugb2YgdGhlIG1vdmllLiBPdGhlcndpc2UsIGl0IGhhcyBhIG1pbmRsZXNzLCB1bm1vdGl2YXRlZCBzY3JpcHQgYW5kIHRoZSBsZWFkIGFjdHJlc3MgaGFzIG5vbmUgb2YgRGVuZXV2ZSdzIGFwcGVhbC4gVGhlIGRpcmVjdG9yIGFwcGFyZW50bHkgd2F0Y2hlZCB0b28gbWFueSBQZXRlciBHcmVlbmF3YXkgZmlsbXMgYW5kIFBvbGEgWCBjb21lcyBhY3Jvc3MgYXMgYSBzdHVkZW50J3MgaW1pdGF0aW9uIG9mIHRoZSBHcmVlbmF3YXkgc3R5bGUsIHdpdGhvdXQgYW55IG9mIGhpcyBpbnNwaXJhdGlvbi4pAAAAAAAAAEAKzBYIdxB3IrwWVGhlIGZpcnN0IHRpbWUgSSBoYWQgaGVhcmQgb2YgR3Vlc3QgSG91c2UgUGFyaWRpc28gd2FzIGluIHRoZSwgZXIuLi4gIndhc2hyb29tIiBhZnRlciBoYXZpbmcganVzdCBzZWVuIEZpZ2h0IENsdWIuIEluIGVhY2ggdXJpbmFsIHdhcyBkZXBvc2l0ZWQgYSBzbWFsbCwgcm91bmQgYmxhY2sgY2lyY2xlLiBXaGVuIHRoZSBjaXJjbGUgY2FtZSBpbnRvIGNvbnRhY3Qgd2l0aCBtb2lzdHVyZSAodG8gcHV0IGl0IGRlbGljYXRlbHkpLCBpdCBjYXVzZWQgYSBjb2xvdXIgcGljdHVyZSB0byBmb3JtLCB3aXRoIHBob3RvZ3JhcGhzIG9mIHRoZSB0d28gc3RhcnMgYW5kIHRoZSB0YWcgbGluZSAiWW91J2xsIFAqKiogWW91cnNlbGYgTGF1Z2hpbmciLiBXaGVuIHlvdSdkIGZpbmlzaGVkIHdhc2hpbmcgeW91ciBoYW5kcywgdGhlIGNpcmNsZSBoYWQgZHJpZWQgYW5kIGZhZGVkIHRvIGJsYWNrIGFnYWluLCB3YWl0aW5nIHRvIHNwcmluZyBpdCdzIHN1cnByaXNlIG9uIHRoZSBuZXh0ICJ2aWN0aW0iLjxiciAvPjxiciAvPk9rYXksIG1heWJlIHRoZSBwdW5jaGxpbmUgd2Fzbid0IHRlcnJpYmx5IHNvcGhpc3RpY2F0ZWQsIGJ1dCB5b3UgaGF2ZSB0byBhZG1pdCBpdCB3YXMgaW5ub3ZhdGl2ZS4gSW4gZmFjdCwgSSB0aGluayBJIGNhbiBob25lc3RseSBzYXkgSSd2ZSBuZXZlciBzZWVuIGFueXRoaW5nIGxpa2UgaXQgaW4gbXkgbGlmZSBiZWZvcmUsIGFuZCB0aGVzZSBkYXlzIG9mIG92ZXIgYSBjZW50dXJ5IG9mIGNpbmVtYSBhbmQgbWFya2V0aW5nLCB0aGF0J3MgYSByZWFsIGZlYXQuIFdoYXQgYSBwaXR5IHRoZSBmaWxtIHRoYXQgd2VudCB3aXRoIGl0IGZhaWxlZCB0byBsaXZlIHVwIHRvIHRoZSBwcm9taXNlLjxiciAvPjxiciAvPkkgaGF0ZSB0byBwYW4gR3Vlc3QgSG91c2UgUGFyaWRpc28gYW5kIEkgYW0gaW5kZWJ0ZWQgdG8gUmlrIE1heWFsbCAoUmljaGFyZCBUd2F0KSBhbmQgQWRyaWFuIEVkbW9uZHNvbiAoRWRkaWUgRWxpemFiZXRoIE5kaW5nb21iYWJhKSBmb3IgbWFueSB5ZWFycyBvZiBsYXVnaHRlciB0aHJvdWdoIHRoZWlyIGFwcGVhbGluZyB0ZWxldmlzaW9uIHNlcmllcywgYmUgaXQgdGhlIGludmVudGlvbiBvZiBUaGUgWW91bmcgT25lcyAoMTk4Mi0xOTg0KSwgdGhlIHNpdHRpbmcgcm9vbSBwbGF5cyBvZiBCb3R0b20gKDE5OTEtMTk5NSksIG9yIGV2ZW4gc29sbyB3b3JrLCBzdWNoIGFzIFJpayBpbiB0aGUgTmV3IFN0YXRlc21hbiAoMTk4OC0xOTkzKS4gSW4gZmFjdCwgdGhpcyB3b3VsZCBoYXZlIG1hZGUgYW4gaGlsYXJpb3VzIDQ1IG1pbnV0ZSB0diBzcGVjaWFsLiBVbmZvcnR1bmF0ZWx5LCBpdHMgYW4gODkgbWludXRlIGZpbG0uPGJyIC8+PGJyIC8+VGhlcmUncyBkZWZpbml0ZWx5IHNvbWUgbWVyaXQgdG8gYmUgaGFkLCBhbmQgSSBsYXVnaGVkIGNvbnRpbnVvdXNseSB0aHJvdWdob3V0IHRoZSBwcm90cmFjdGVkIGZpbmFsZSwgd2hpY2ggc3Bvb2ZlZCB0aGUgRXhvcmNpc3QgYW5kIFJhaWRlcnMgb2YgdGhlIExvc3QgQXJrLCBhbmQgaW52b2x2ZWQuLi4gd2VsbCwgeW91J2xsIGhhdmUgdG8gc2VlIHRoYXQgYml0IGZvciB5b3Vyc2VsZi4gWWV0IG9mdGVuIHRoZSBwYWNlIGlzIGxlYWRlbiwgYW5kIGEgc3RlcmlsZSBhdG1vc3BoZXJlIGlzIHRocm91Z2hvdXQuIFRoZSB0d28gc3RhcnMgKEVkbW9uZHNvbiB0YWtpbmcgaGlzIHVzdWFsIGJhY2tzZWF0LCB0aGlzIHRpbWUgZHVlIHRvIHRoZSBmYWN0IHRoYXQgaGUgYWRlcXVhdGVseSBkaXJlY3RzKSBuZXZlciByZWFsbHkgZ2V0IGludG8gZmlyc3QgZ2VhciwgTWF5YWxsIG9ubHkgc3BvcmFkaWNhbGx5IHNob3dpbmcgdGhlIGZvdWwtbW91dGhlZCBtYW5pYSB0aGF0IG1ha2VzIHVzIGxvdmUgaGltIG9uIHRoZSBzbWFsbCBzY3JlZW4uIEluZGVlZCwgdGhlIHdyaXRlcnMnIHByZXN1bXB0aW9uIHRoYXQgd2UgYXJlIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgY2hhcmFjdGVycyBsZWFkcyB0byB0aGVtIGJlaW5nIHVuZGVyZGVsaXZlcmVkIHRvIHRoZSBhdWRpZW5jZS4gVGhlIHNsaWdodCBoaW50cyBvZiBkZXB0aCBzZWVuIGluIHRoZSBzZXJpZXMgKFJpY2hpZSdzIGVmZmVtaW5hdGUsIGZhaWxlZCBzb2NpYWwtY2xpbWJpbmcgZm9yIGV4YW1wbGUpIGFyZSBub3QgcHJlc2VudCBoZXJlLCBhbmQgaW5zdGVhZCB3ZSBhcmUgbGVmdCB3aXRoIHBhcm9kaWVzIG9mIHBhcm9kaWVzLjxiciAvPjxiciAvPlRoZSBGYXdsdHkgVG93ZXJzIGFjY3VzYXRpb24gZG9lcyBwYXNzIHdhdGVyLCBjb21wbGV0ZSB3aXRoIGRydW5rZW4gY2hlZiBhbmQgdW5zZWVuLCBjYWxsZWQtZm9yIHdhaXRlciAiUGFzcXVlbGUiLCB3aGljaCB1bmNhbm5pbHkgcmh5bWVzIHdpdGggTWFudWVsLiBTb21lIG9mIHRoZSBpZGVhcywgc3VjaCBhIGhvdGVsIG5leHQgdG8gYSBudWNsZWFyIHJlYWN0b3Igd2l0aCBhIGNoaWxkcmVucycgc3dpbmcgaGFuZ2luZyBvdmVyIGEgY2xpZmYgZmFjZSwgYXJlIHZlcnksIHZlcnkgZnVubnksIGJ1dCB1bHRpbWF0ZWx5IHRoZSBmcmVuZXRpYyBwYWNlIGlzIHN0b2xlbiwgdGhlIHR3byBjb25zdGFudGx5IGxvb2tpbmcgZm9yIGEgc3R1ZGlvIGF1ZGllbmNlIHRoYXQgaXNuJ3QgdGhlcmUsIGFuZCBhbGwgdGhlICJkZWFkIGxhdWdoIiBhcmVhcyBwYXRjaGVkIHVwIHdpdGggaW5jaWRlbnRhbCAiY29tZWR5IiBtdXNpYyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBkYXRlZCBpbiBhIENhcnJ5IE9uIGZpbG0gdHdvIGRlY2FkZXMgYWdvLjxiciAvPjxiciAvPlBhcmlkaXNvJ3MgYnJhbmQgb2YgcHVlcmlsZSwgc2FkaXN0aWMsIHBlcnZlcnNlIGh1bW91ciBJUyBmdW5ueSwgYW5kIEkgZmVlbCBzdXJlIGl0IHdpbGwgbWFrZSB5b3UgbGF1Z2ggLi4uIGp1c3Qgbm90IGFzIG9mdGVuIGFzIGl0IHNob3VsZC4pAAAAAAAAAEAKqgUIeBB4IpoFVGhlIGZhY3QgdGhhdCB0aGlzIGNydWRkeSBzZXJpZXMgY291bGQgZWxpY2l0IGRvemVucyBvZiBjb21tZW50cyAobXVjaCBsZXNzIGh1bmRyZWRzIG9mICd2b3RlcycpIHNwZWFrcyB2b2x1bWVzIGFzIHRvIHRoZSBkZWNsaW5lIG9mIFdlc3Rlcm4gKG9yIGF0IGxlYXN0IEFtZXJpY2FuKSBjaXZpbGl6YXRpb24uPGJyIC8+PGJyIC8+UmVhZCBQcm91c3QsIHlvdSBtb3JvbnMhISBPciBhdCBsZWFzdCBEYXZlIEJhcnJ5IG9yIENhbHZpbiBhbmQgSG9iYmVzIGFudGhvbG9naWVzLjxiciAvPjxiciAvPkNodWNrIE5vcnJpcy4gV3JhcCB5b3VyIGJyYWlucyBhcm91bmQgdGhlIGZhY3QgdGhhdCBpbiBvcmRlciB0byByYXRlIG9yIHdyaXRlIGFib3V0IHRoaXMgc2VyaWVzIHlvdSdkIGhhdmUgdG8gaGF2ZSBzcGVudCBtaW51dGVzLi5uYXksIEhPVVJTLi4udmlld2luZyB0aGlzIHBvb3Igc29kIHRyZWFkaW5nIHRoZSBib2FyZHMgYW5kIHNwZXdpbmcgbGluZXMgd2l0aCBsZXNzIGVtb3Rpb25hbCBpbXBhY3QgdGhhbiB0aGUgZ2FsIHdobyB1c2VkIHRvIGNhbGwgb2ZmIHRoZSBjb3JyZWN0IHRpbWUgb24geW91ciBsb2NhbCBzZXJ2aWNlLjxiciAvPjxiciAvPlBMRUFTRSBET04nVCBXQVRDSCBUSElTIFNIT1chISBTUEFSRSBZT1VSIEZFVyBSRU1BSU5JTkcgQlJBSU4gQ0VMTFMhKQAAAAAAAABACq4CCHkQeSKeAlRoZSBkYXl0aW1lIFRWIG9mIGZpbG1zLiBTZWxkb20gaGF2ZSBJIGZlbHQgc28gbGl0dGxlIGF0dGFjaG1lbnQgdG8gY2hhcmFjdGVycy4gU2VsZG9tIGhhdmUgSSBiZWVuIG1hZGUgdG8gY3JpbmdlIGJ5IHN1Y2ggZGlyZSBkaWFsb2d1ZS4gTmF1c2VvdXMgTG9uZG9uIHRoaXJ0eS1zb21ldGhpbmdzIG1pbmNpbmcgcm91bmQgbHVyaWQgQkJDIHNldHMgc3BvdXRpbmcgcGxhdGl0dWRpbm91cyBtdWxjaC4gQXZvaWQgdGhpcyBmaWxtIGFzIGlmIGl0IHdlcmUgeW91ciBncmFuZG1vdGhlcidzIGNsdW5nZS4pAAAAAAAAAEAKpg0IehB6IpYNVGhlIFJ1c3NpYW4gc3BhY2Ugc3RhdGlvbiAnQXZuYScgd2l0aCBhIGNyZXcgb2YgZm91ciBSdXNzaWFucyBhbmQgdHdvIEFtZXJpY2FucyBpcyB0aHJlYXRlbmluZyB0byByZS1lbnRlciB0aGUgRWFydGgncyBhdG1vc3BoZXJlIGluIGEgbWF0dGVyIG9mIGRheXMuIFJ1c3NpYSBhc2tzIGZvciBOQVNBJ3MgaGVscCBpbiByZXNjdWluZyB0aGUgc3RyYW5kZWQgY3JldyBhbmQgTkFTQSBzY3JhbWJsZXMgdGhlIHNwYWNlIHNodXR0bGUgQXRsYW50aXMuIFRoZSBOU0EgYWxzbyBoYXZlIGFuIGludGVyZXN0IGluIHRoZSAnUHJvbWV0aGV1cycsIGEgcHJvdG90eXBlIG1pY3Jvd2F2ZSBwb3dlciBzb3VyY2UgYmVpbmcgdGVzdGVkIGFib2FyZCAnQXZuYScgYW5kIG9yZ2FuaXNlIGZvciBvbmUgb2YgdGhlaXIgbWVuIHRvIGJlIHBsYWNlZCBvbiB0aGUgbWlzc2lvbi48YnIgLz48YnIgLz5UaGF0J3MgdGhlIHBsb3QuIE9udG8gbGVzcyBpbXBvcnRhbnQgdGhpbmdzLiBUaGUgc3BhY2Ugc3RhdGlvbiBhbmQgdGhlIHNodXR0bGUgYXJlIHRoZSBzYW1lLCBibGF0YW50bHkgb2J2aW91cyBtb2RlbHMgdXNlZCBpbiAnRmFsbG91dCcsICdNZW1vcmlhbCBEYXknIGFuZCAnRGFyayBCcmVlZCcgKGFuZCBhIGhhbmRmdWwgb2Ygb3RoZXIgZmlsbXMsIEkgc3VzcGVjdCkuIFRoZSBtb2RlbCBlZmZlY3RzIGFyZSBzbyBvYnZpb3VzIHRocm91Z2hvdXQgdGhlIGVudGlyZSBtb3ZpZSBhbmQgbWFrZSB0aGUgZmlsbSBsb29rIHZlcnkgMTk2MHMuIFRoZSBzZXRzIGFyZSBhIGxpdHRsZSBiZXR0ZXIgYnV0IGFyZSBmYXIgdG9vICc4MHMgZm9yIHdoYXQgaXMgc3VwcG9zZWRseSBhIGJyYW5kIG5ldyBzdGF0aW9uIGJ1aWx0IGJ5IGFuIEFtZXJpY2FuIGNvbXBhbnkgKHdoaWNoIGxhdGVyIGNvbWVzIGluIGFzIHBhcnQgb2YgYSBjb25zcGlyYWN5IHRvIGRlc3Ryb3kgJ0F2bmEnIGFuZCB0aGUgJ1Byb21ldGhldXMnIGFuZCBjbGFpbSB0aGUgaW5zdXJhbmNlLiBUaGUgc2NyaXB0IGhhcyBhIGZldyBnb29kIG1vbWVudHMgKGluY2x1ZGluZyBZdXJpJ3MgZmFyZXdlbGwgYW5kIHRoZSBsaXR0bGUgc3BpZWwgYXQgdGhlIGVuZCkgYnV0IGlzIG90aGVyd2lzZSBmYWlybHkgYmxhbmQgYW5kIHN1Yi1zdGFuZGFyZC4gVGhlIGFjdGluZyBpcyBva2F5OyB0aGUgb25seSByZWFsIHN0YW5kb3V0IHBlcmZvcm1hbmNlIGNvbWVzIGZyb20gQWxleCBWZWFkb3Ygd2hvIG9mZmVycyB1cCBzb21lIG9mIHRoZSBmaWxtJ3MgYmV0dGVyIGRpYWxvZ3VlLiBNaWNoYWVsIER1ZGlrb2ZmIGlzLCBzdXJwcmlzaW5nbHksIG9uZSBvZiB0aGUgYmVzdCBwYXJ0cyBhYm91dCB0aGlzIGZpbG0uIEljZS1UIGlzIEljZS1ULiAnTnVmZiBzYWlkLiBUaGUgZmlsbSBvZmZlcnMgYSBmZXcgc3VycHJpc2VzLCB0aG91Z2gsIHRoYXQgSSBkb24ndCB3aXNoIHRvIHNwb2lsLjxiciAvPjxiciAvPkNlcnRhaW5seSBvbmUgb2YgdGhlIGJldHRlciBsb3ctZ3JhZGUsIGNvbnRlbXBvcmFyeS1zZXQgc2NpLWZpIGZpbG1zIG9mIHRoZSBsYXN0IHNpeCB5ZWFycywgYnV0IG5vdCB0aGUgYmVzdC4gVGhlIGZpbG0gaXMgd2F0Y2hhYmxlIGJ1dCB0aGUgc3BlY2lhbCBlZmZlY3RzIGFuZCBwbG90IHdpbGwgcHJvYmFibHkgcHV0IGEgbG90IG9mIHZpZXdlcnMgb2ZmLiBSZW50IHRoZSBvdGhlciAnU3RyYW5kZWQnIHNjaS1maSBmaWxtIGluc3RlYWQuKQAAAAAAAABACvoUCHsQeyLqFFRoZSBIYW5kIG9mIERlYXRoIGFrYSBDb3VudGRvd24gaW4gS3VuZyBGdSAoMTk3NikgaXMgYSB2YXN0bHkgdW5kZXJyYXRlZCBlYXJseSB3b3JrIGJ5IGRpcmVjdG9yIEpvaG4gV29vLiBUaGUgZmlsbSBzdGFycyBEb3JpYW4gVGFuIChUYW4gVGFvLWxpYW5nKSBhbmQgZmVhdHVyZXMgSmFja2llIENoYW4sIFNhbW1vIEh1bmcgYW5kIEphbWVzIFRpZW4gaW4gc2lnbmlmaWNhbnQgc3VwcG9ydGluZyByb2xlcy4gTWFueSBwZW9wbGUgYmVsaWV2ZSwgb3IgaGF2ZSBiZWVuIGxlYWQgdG8gYmVsaWV2ZSBieSBkZWNlcHRpdmUgYWR2ZXJ0aXNpbmcsIHRoYXQgdGhpcyBpcyBhIEphY2tpZSBDaGFuIGZpbG0uIFRoaXMgaXMgbm90IGEgSmFja2llIENoYW4gZmlsbSwgRG9yaWFuIFRhbiBpcyB0aGUgc3RhciBidXQgSmFja2llIGdpdmVzIG9uZSBvZiBoaXMgYmVzdCAobW9zdCBzZXJpb3VzKSBlYXJseSBwZXJmb3JtYW5jZXMuPGJyIC8+PGJyIC8+VGhlIEhhbmQgb2YgRGVhdGggaXMgYWJvdXQgYSBTaGFvbGluIGRpc2NpcGxlIG5hbWVkIFl1bmZlaSAoVGFuKSB3aG8gaXMgc2VudCBvbiBhIG1pc3Npb24gdG8gYXNzYXNzaW5hdGUgYSBTaGFvbGluIHRyYWl0b3IgbmFtZWQgU2hpaCBYaWFvZmVuZyAoVGllbikgYW5kIHByb3RlY3QgYSByZXZvbHV0aW9uYXJ5IG5hbWVkIFpoYW5nIFlpIChXb28pLiBBbG9uZyBoaXMgam91cm5leSBZdW5mZWkgbWVldHMgdXAgd2l0aCBhIHlvdW5nIHdvb2RjdXR0ZXIgbmFtZWQgVGFuIChDaGFuKSBhbmQgYSBkaXNncmFjZWQgc3dvcmQgZmlnaHRlciAoQ2hhbmcgQ2h1bmcpIGtub3duIGFzICJ0aGUgd2FuZGVyZXIuIiBCb3RoIG1lbiBoYXZlIHN1ZmZlcmVkIGF0IHRoZSBoYW5kcyBvZiBTaGloIGFuZCB3YW50IHRvIHRha2UgcmV2ZW5nZS4gVGhlIHRocmVlIHRlYW0gdXAgdG8gZGVmZWF0IFNoaWggYW5kIGhpcyBlaWdodCBib2R5Z3VhcmRzIGFuZCBlc2NvcnQgdGhlIHJldm9sdXRpb25hcnkgdG8gc2FmZXR5LjxiciAvPjxiciAvPlRoZSBtYXJ0aWFsIGFydHMgYWN0aW9uIGlzIGFib3ZlIGF2ZXJhZ2UgdW5kZXIgdGhlIGRpcmVjdGlvbiBvZiBTYW1tbyBIdW5nLiBEb3JpYW4gVGFuIHVzZXMgaGlzIHRyYWRlbWFyayBoaWdoIGtpY2tzIHZlcnkgZWZmZWN0aXZlbHkgYXMgdGhlICJOb3J0aGVybiBlaWdodGVlbiBzdHlsZXMga2lja3MiIGFsb25nIHdpdGggc29tZSAiU291dGhlcm4gZml2ZSBzdHlsZXMgYm94aW5nLiIgU2FtbW8gSHVuZyBhbmQgSmFja2llIENoYW4gcHJvdmlkZSBleGNlbGxlbnQgbWFydGlhbCBhcnRzIHBlcmZvcm1hbmNlcyBhcyB3ZWxsLiBKYW1lcyBUaWVuIGlzIG5vdCB0aGUgZ3JlYXRlc3QgbWFydGlhbCBhcnRpc3Qgb24gdGhlIEphZGUgc2NyZWVuIGJ1dCBkb2VzIGFuIGFjY2VwdGFibGUgam9iLiBTb21lIG9mIHRoZSBlYXJseSBmaWdodHMgYXJlIGEgYml0IHNsb3cgYW5kIHNlZW0gb3ZlciBjaG9yZW9ncmFwaGVkIGJ1dCB0aGUgZmluYWwgc2hvd2Rvd25zIGZlYXR1cmluZyBDaGFuLCBUYW4gYW5kIEh1bmcgYXJlIHZlcnkgZ29vZC48YnIgLz48YnIgLz5EaXJlY3RvciBKb2huIFdvbyBwcm92aWRlcyBwbGVudHkgb2YgaW50ZXJlc3RpbmcgY2hhcmFjdGVyIGRldmVsb3BtZW50IGluIHRoZSBmaWxtLCB3aGljaCBpcyByZWZyZXNoaW5nLiBUaGUgY2luZW1hdG9ncmFwaHkgYnkgTGV1bmcgV2luZyBLYXQgaXMgdmVyeSBzdHlsaXNoLCB1bmlxdWUgYW5kIGJlYXV0aWZ1bCBmb3IgYSBrdW5nIGZ1IGZpbG0gb2YgdGhpcyBlcmEuIEpvc2VwaCBLb28ncyBtdXNpYzogYSBjb21iaW5hdGlvbiBvZiBzb2Z0IGZsdXRlcyBhbmQgNzAncyAiU2hhZnQiIHN0eWxlIG9yY2hlc3RyYWwgcGllY2VzIGlzIGt1bmcgZnUgY2luZW1hIGF0IGl0cyBiZXN0LiBIYW5kIG9mIERlYXRoIGlzIG5vdCBKYWNraWUgYW5kIFNhbW1vJ3MgdXN1YWwga3VuZyBmdSBjb21lZHkuIEhhbmQgb2YgRGVhdGggaXMgYSBzZXJpb3VzLCBzdHJhaWdodGZvcndhcmQgcmV2ZW5nZSBkcml2ZW4gc3RvcnkuPGJyIC8+PGJyIC8+SGFuZCBvZiBEZWF0aCBha2EgQ291bnRkb3duIGluIEt1bmcgRnUgaXMgYW4gdW5kZXJyYXRlZCBjbGFzc2ljIGluIHRoZSBvbGQgc2Nob29sIGt1bmcgZnUgZ2VucmUuIFRoZSBmaWxtIGlzIG9uZSBvZiB0aGUgYmVzdCBhcnRpc3RpY2FsbHkgb2YgaXRzIHRpbWUgYW5kIGEgcHJldmlldyBvZiB0aGUgZ3JlYXQgdGhpbmdzIHRvIGNvbWUgZnJvbSBKYWNraWUgQ2hhbiBhbmQgU2FtbW8gSHVuZy4gSHVuZydzIGdyZWF0IGNob3Jlb2dyYXBoeSBpcyBwdXQgb24gZGlzcGxheSBoZXJlIGJlZm9yZSBoaXMgZGlyZWN0b3JpYWwgZGVidXQgYW5kIENoYW4ncyBlYXJseSBjaGFyaXNtYSBhbmQgdGFsZW50IGNhbiBiZSBjbGVhcmx5IHNlZW4uPGJyIC8+PGJyIC8+SGFuZCBvZiBEZWF0aCBpcyBhIHNvbGlkLCBzdHlsaXNoIG9sZCBzY2hvb2wga3VuZyBmdSBmaWxtIGFuZCBhIGJyaWxsaWFudCBlYXJseSB3b3JrIG9mIHRoZSBsZWdlbmRhcnkgSm9obiBXb28uPGJyIC8+PGJyIC8+S3VuZyBGdSBHZW5yZSBSYXRpbmcgNy41LzEwIDxiciAvPjxiciAvPldhbmRlcmVyIHRvIFRhbiAocmVmZXJyaW5nIHRvIGhpcyBuZXcgd2VhcG9uKTogIlRoZSBMaXR0bGUgRWFnbGUgV2luZyBHb2QgTGFuY2UuIiA8YnIgLz48YnIgLz5UYW46ICJKdXN0IGEga25pY2trbmFjay4iKQAAAAAAAABACpoFCHwQfCKKBVRoZSBDYXQgaW4gdGhlIEhhdCBpcyBqdXN0IGEgc2xhcCBpbiB0aGUgZmFjZSBmaWxtLiBNaWtlIE15ZXJzIGFzIFRoZSBDYXQgaW4gdGhlIEhhdCBpcyBkb3ducmlnaHQgbm90IGZ1bm55IGFuZCBNaWtlIE15ZXJzIGNvdWxkIG5vdCBoYXZlIGJlZW4gYW55IHdvcnNlLiBUaGlzIGlzIGhpcyB3b3JzdCBmaWxtIGhlIGhhcyBldmVyIGJlZW4gaW4uIFRoZSBhY3RpbmcgYW5kIHRoZSBzdG9yeSB3YXMganVzdCB0ZXJyaWJsZS4gSSBtZWFuIGhvdyBjb3VsZCB0aGV5IG1ha2UgdGhlIG1vc3QgYmVsb3ZlZCBzdG9yaWVzIGJ5IERyLiBTZXVzcyBiZSBtYWRlIGludG8gZmlsbSBhbmQgYmVpbmcgb25lIG9mIHRoZSB3b3JzdCBmaWxtcyBvZiBhbGwtdGltZSBhbmQgc3VjaCBhIGRpc2FwcG9pbnRtZW50LiBJIGNvdWxkbid0IGhhdmUgc2VlbiBhIG1vcmUgd29yc3QgZmlsbSB0aGFuIHRoaXMgYmVzaWRlcywgbWF5YmUgQmFieSBHZW5pdXNlcy4gQnV0IHRoaXMgZmlsbSBpcyBqdXN0IHNvIGJhZCBJIGNhbid0IGV2ZW4gZGVzY3JpYmUgaG93IGJhZGx5IHRoZXkgbWFkZSB0aGlzIGZpbG0uIEJvIFdlbGNoIHNob3VsZCBiZSBmaXJlZCBvciB0aGUgd3JpdGVyIHNob3VsZC4gPGJyIC8+PGJyIC8+SGVkZWVuJ3Mgb3V0bG9vazogMC8xMCBObyBTdGFycyBGKQAAAAAAAABACrkZCH0QfSKpGVRoZSBCRkcgaXMgb25lIG9mIFJvYWxkIERhaGwncyBtb3N0IGNoZXJpc2hlZCBib29rcywgYnV0IGluIHRoaXMgYW5pbWF0ZWQgYWRhcHRhdGlvbiB0aGUgbWFnaWMganVzdCBpc24ndCB0aGVyZS4gVGhpcyB2ZXJzaW9uIHJlbWFpbnMgcHJldHR5IGZhaXRoZnVsIHRvIERhaGwncyBvcmlnaW5hbCBzdG9yeSBzbyBvbmUgY2FuJ3QgbGF5IHRoZSBibGFtZSBvbiBKb2huIEhhbWJsZXkncyBzY3JpcHQuIElmIGFueXRoaW5nIHRoZSBmYXVsdCBsaWVzIHdpdGggdGhlIGNvbG91cmxlc3MgYW5pbWF0aW9uLCB0aGUgbGV0aGFyZ2ljIHBhY2UgYW5kIHRoZSBnZW5lcmFsbHkgbGFja2x1c3RyZSB2b2ljZS1vdmVycy4gT25lIHdvdWxkIGJlIHJpZ2h0IHRvIGV4cGVjdCB0aGlzIHN0b3J5IHRvIG1ha2UgZm9yIGEgaGFwcHksIHZpYnJhbnQsIGZ1bi1maWxsZWQgbW92aWUuLi4uLiBpbnN0ZWFkLCB0aGUgZmlsbSBpcyBhIGhvcGVsZXNzbHkgZHVsbCBhZmZhaXIgdGhhdCBiZWNvbWVzIHF1aXRlIHRlZGlvdXMgdG8gd2F0Y2guIENoaWxkcmVuIHdobyBhcmUgbm90IGZhbWlsaWFyIHdpdGggdGhlIHN0b3J5IHNob3VsZCBkZWZpbml0ZWx5IHJlYWQgdGhlIGJvb2sgZmlyc3QhIEFsbCB0aGUgZmlsbSB3aWxsIGFjaGlldmUgaXMgdG8gcHV0IHRoZW0gb2ZmIHJlYWQgd2hhdCBpcyBhY3R1YWxseSBhIGNoaWxkcmVuJ3MnIGNsYXNzaWMuPGJyIC8+PGJyIC8+WW91bmcgb3JwaGFuIFNvcGhpZSAodm9pY2Ugb2YgQW1hbmRhIFJvb3QpIGxpdmVzIGluIGEgbm9uZS10b28tZnJpZW5kbHkgb3JwaGFuYWdlIHVuZGVyIHRoZSBjcnVlbCBzdXBlcnZpc2lvbiBvZiBNcnMgQ2xvbmtlcnMuIE9uZSBldmVuaW5nIHNoZSBpcyBwZWVyaW5nIHRocm91Z2ggdGhlIHdpbmRvdyB3aGVuIHNoZSBzcG90cyBhIG1hc3NpdmUgZmlndXJlIHdhbGtpbmcgc3RlYWx0aGlseSBkb3duIHRoZSB2aWxsYWdlIHN0cmVldC4gVGhlIGZpZ3VyZSByZWFsaXNlcyBpdCBoYXMgYmVlbiBzZWVuLCBzbyBpdCByZWFjaGVzIGluIHRocm91Z2ggdGhlIHdpbmRvdyBhbmQgc2Nvb3BzIFNvcGhpZSBmcm9tIGhlciBiZWQsIHBsYWNpbmcgaGVyIGludG8gaXRzIGVub3Jtb3VzIHBvY2tldCBiZWZvcmUgZmxlZWluZyBpbnRvIHRoZSBuaWdodC4gU29waGllIHNvb24gZGlzY292ZXJzIHRoYXQgc2hlIGhhcyBiZWVuIGtpZG5hcHBlZCBieSBhIGdpYW50IGZyb20gR2lhbnQgQ291bnRyeSwgYW5kIGZlYXJzIHRoYXQgaGUgd2lsbCBlYXQgaGVyLiBCdXQgdG8gaGVyIHJlbGllZiBoZSB0dXJucyBvdXQgdG8gYmUgYSBraW5kIGFuZCBzZW5zaXRpdmUgbWVtYmVyIG9mIGhpcyBzcGVjaWVzIHdobyBpbnRyb2R1Y2VzIGhpbXNlbGYgYXMgdGhlIEJGRyAodm9pY2Ugb2YgRGF2aWQgSmFzb24pLiBUaGUgQkZHIHJlZnVzZXMgdG8gZWF0IHBlb3BsZSwgaW5zdGVhZCByZXN0cmljdGluZyBoaW1zZWxmIHRvIGZvdWwtdGFzdGluZyB2ZWdldGFibGVzIGtub3duIGFzIHNub3p6Y3VtYmVycy4gSG93ZXZlciwgR2lhbnQgQ291bnRyeSBpcyBwb3B1bGF0ZWQgYnkgbnVtZXJvdXMgb3RoZXIgZ2lhbnRzIHdobyBETyBmZWFzdCAtIGV2ZXJ5IG5pZ2h0LCBhcyBpdCBoYXBwZW5zIC0gb24gcG9vciB1bnN1c3BlY3RpbmcgaHVtYW5zLiBTb3BoaWUgYW5kIHRoZSBCRkcgYmVjb21lIGdyZWF0IGZyaWVuZHMsIGFuZCBzb29uIHRoZXkgY29tZSB1cCB3aXRoIGEgcGxhbiB0byB0aHdhcnQgdGhlIG90aGVyIGdpYW50cy4gVG9nZXRoZXIgdGhleSBnbyB0byB0aGUgUXVlZW4gb2YgRW5nbGFuZCAodm9pY2Ugb2YgQW5nZWxhIFRob3JuZSkgd2l0aCB0aGVpciByZW1hcmthYmxlIHN0b3J5IGFuZCBiZWcgaGVyIHRvIHNlbmQgdGhlIGFybXkgYW5kIHRoZSBhaXIgZm9yY2UgdG8gZmlnaHQgdGhlIG1hbi1lYXRpbmcgZ2lhbnRzLiBUaGUgUXVlZW4gYWdyZWVzIGFuZCBzbyBiZWdpbnMgYSBkYW5nZXJvdXMgb3BlcmF0aW9uIHRvIGNhcHR1cmUgdGhlIGJhZCBnaWFudHMgYmVmb3JlIHRoZXkgY2FuIGhhcm0gYW55b25lIGVsc2UuPGJyIC8+PGJyIC8+SmFzb24gdm9pY2VzIHRoZSBCRkcgcXVpdGUgd2VsbCAob25lIG9mIHRoZSBmZXcgcGx1c2VzIGluIHRoZSBmaWxtKSBidXQgaGlzIGdvb2Qgd29yayBpcyBhbG1vc3QgcnVpbmVkIGJ5IHNvbWV3aGF0IHBvb3Igc291bmQgcXVhbGl0eS4gVGhlIHJlc3Qgb2YgdGhlIHZvaWNlIHdvcmsgaXMgZGVjaWRlZGx5IHVuaW5zcGlyZWQsIHdpdGggdmVyeSBsaXR0bGUgdG8gYnJpbmcgdGhlIGNoYXJhY3RlcnMgdG8gbGlmZS4gU2ltaWxhcmx5LCB0aGUgQkZHIGlzIHRoZSBvbmx5IGNoYXJhY3RlciB0aGF0IGlzIGltYWdpbmF0aXZlbHkgYW5pbWF0ZWQgLSBTb3BoaWUgbGFja3MgYXBwZWFsLCBhbmQgdGhlIGdpYW50cyBhcmUgYm9yaW5nbHkgZGVzaWduZWQgKGFuZCBsb29rIGFsbW9zdCBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGVhY2ggb3RoZXIpLiBFdmVuIHRoZSBwbGFjZXMgYXJlIHVuaW52ZW50aXZlOyBHaWFudCBDb3VudHJ5IGVzcGVjaWFsbHkgY29tZXMgdXAgc2hvcnQsIGJlaW5nIG5vdGhpbmcgbW9yZSB0aGFuIGEgYmFycmVuIHdhc3RlbGFuZCB3aXRoIG9jY2FzaW9uYWwgcm9ja3MgYW5kIGNhbnlvbnMuIEF0IDg4IG1pbnV0ZXMgdGhlIGZpbG0gaXMgbm90IGV4YWN0bHkgbGVuZ3RoeSwgeWV0IGl0IGRyYWdzIHF1aXRlIGJhZGx5IGluIHBhcnRzIGR1ZSB0byB0aGUgc29wb3JpZmljIGhhbmRsaW5nIG9mIHNldmVyYWwgc2VxdWVuY2VzLiBMaXR0bGUgb2YgRGFobCdzIG1pc2NoaWV2b3VzIGh1bW91ciBpcyBjb252ZXllZCBzYXRpc2ZhY3RvcmlseS4gT25lIGNoYXB0ZXIgaW4gdGhlIGJvb2sgZGVhbHMgd2l0aCB0aGUgQkZHJ3MgbG92ZSBvZiAid2hpenpwb3BwaW5nIiAoZmFydGluZykgYW5kIGlzIGxhdWdoLW91dC1sb3VkIGhpbGFyaW91cy4gSW4gdGhlIGZpbG0sIHRoZSBzYW1lIHNlY3Rpb24gaXMgdG90YWxseSBraWxsZWQgYnkgdW5mdW5ueSBoYW5kbGluZy4gSSBjYW1lIHRvIHRoZSBUaGUgQkZHIGV4cGVjdGluZyBsb3RzIG9mIHplc3QsIGZ1biBhbmQgZW5qb3ltZW50LCBidXQgd2hhdCBJIGdvdCB3YXMgcHJldHR5IG11Y2ggdGhlIG9wcG9zaXRlISBUaGlzIG9uZSBpcyBhIGZhaWxlZCBtaXNmaXJlIHRoYXQgc2ltcGx5IGRvZXNuJ3QgbWF0Y2ggdGhlIGNhbGlicmUgb2YgdGhlIGJvb2sgaW4gYW55IGRlcGFydG1lbnQgLSB1bmZvcnR1bmF0ZWx5LCB0aGVyZWZvcmUsIGl0IG11c3QgZ28gZG93biBhcyBvbmUgdG8gc2tpcC4pAAAAAAAAAEAK4QIIfhB+ItECVGhlIEFuZHJldyBEYXZpZXMgYWRhcHRhdGlvbiBvZiB0aGUgU2FyYWggV2F0ZXJzJyBub3ZlbCB3YXMgZXhjZWxsZW50LiBUaGUgY2hhcmFjdGVycyBvZiBOYW4gYW5kIGFuZCBLaXR0eSB3ZXJlIHN1cGVyYmx5IHBvcnRyYXllZCBieSBSYWNoYWVsIFN0aXJsaW5nIGFuZCBLZWxsZXkgSGF3ZXMgcmVzcGVjdGl2ZWx5LiBUaGUgd2hvbGUgc2VyaWVzIHdhcyBhIHRvdGFsIGpveSB0byB3YXRjaC4gSXQgY2F1Z2h0IHRoZSBpbWFnaW5hdGlvbiBvZiBldmVyeW9uZSBhY3Jvc3MgdGhlIGJvYXJkLCB3aGV0aGVyIHN0cmFpZ2h0IG9yIGdheS4gSSB3aXNoIHRoZXJlIGNvdWxkIGJlIGEgc2VxdWVsISkAAAAAAAAAQArnBQh/EH8i1wVUaGUgNjBzICgxOTk5KSBEOiBNYXJrIFBpem5hcnNraS4gSm9zaCBIYW1pbHRvbiwgSnVsaWEgU3RpbGVzLCBKZXJyeSBPJ0Nvbm5lbGwsIEplcmVteSBTaXN0bywgSm9yZGFuYSBCcmV3c3RlciwgTGVvbmFyZCBSb2JlcnRzLCBCaWxsIFNtaXRyb3ZpY2gsIEFubmllIENvcmxleSwgQ2hhcmxlcyBTLiBEdXR0b24uIE5CQyBtaW5pLXNlcmllcyAobGF0ZXIgcmVsZWFzZWQgdG8gdmlkZW8vRFZEIGFzIGZ1bGwgbGVuZ3RoIGZlYXR1cmUgZmlsbSkgYWJvdXQgdGhlIHRyZWFjaGVyb3VzIDE5NjBzLCBhcyBzZWVuIHRocm91Z2ggdGhlIGV5ZXMgb2YgYm90aCBhIHdoaXRlIGZhbWlseSBhbmQgYSBibGFjayBmYW1pbHkuIFRoZSBmaWxtJ3MgZmlyc3QgaGFsZiBpcyBkcml2ZW4gYnkgdGhlIGV4Y2VsbGVudCBwZXJmb3JtYW5jZSBvZiBEdXR0b24gYXMgUmV2ZXJlbmQgV2lsbGllIFRheWxvciBhbmQgZXZlbmx5IHNwcmVhZHMgdGhlIHN0b3J5bGluZSBiZXR3ZWVuIHRoZSBmYW1pbGllcy4gSG93ZXZlciwgRHV0dG9uJ3MgY2hhcmFjdGVyIGlzIGtpbGxlZCBoYWxmd2F5IHRocm91Z2ggYW5kIHRoZSBibGFjayBmYW1pbHkgaXMgY29tcGxldGVseSBmb3Jnb3R0ZW4gaW4gYSBkdWxsLCBpbmNvaGVyZW50LCBhbmQgZG93bnJpZ2h0IGF3ZnVsIDJuZCBoYWxmLiBSQVRJTkc6IDQgb3V0IG9mIDEwLiBOb3QgcmF0ZWQgKGxhdGVyIHJhdGVkIFBHLTEzIGZvciB2aWRlby9EVkQgcmVsZWFzZSkuKQAAAAAAAABACs0JCIABEIABIrsJVGhlIDE5NjAncyB3ZXJlIGEgdGltZSBvZiBjaGFuZ2UgYW5kIGF3YWtlbmluZyBmb3IgbW9zdCBwZW9wbGUuIFNvY2lhbCB1cGhlYXZhbCBhbmQgdW5yZXN0IHdlcmUgY29tbW9ucGxhY2UgYXMgcGVvcGxlIHNwb2tlLW91dCBhYm91dCB0aGVpciB2aWV3cy4gUmFjaWFsIHRlbnNpb25zLCBwb2xpdGljcywgdGhlIFZpZXRuYW0gV2FyLCBzZXh1YWwgcHJvbWlzY3VpdHksIGFuZCBkcnVnIHVzZSB3ZXJlIGFsbCBwYXJ0IG9mIHRoZSBkYWlseSBmYWJyaWMsIGFuZCB0aGUgZGFpbHkgbmV3cy4gVGhpcyBmaWxtIGF0dGVtcHRlZCB0byBlbmNhcHN1bGF0ZSB0aGVzZSBoaXN0b3JpY2FsIGFzcGVjdHMgaW50byBhbiBlbnRlcnRhaW5pbmcgbW92aWUsIGFuZCBsYXJnZWx5IHN1Y2NlZWRlZC48YnIgLz48YnIgLz5JbiB0aGlzIGZpbG0sIHR3byBmYW1pbGllcyBhcmUgZm9sbG93ZWQ6IG9uZSB3aGl0ZSwgb25lIGJsYWNrLiBEdXJpbmcgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGZpbG0sIHRoZSBzdG9yeSBmb2xsb3dzIGVhY2ggZmFtaWx5IG9uIGEgZXF1YWwgYmFzaXMgdGhyb3VnaCBzb2NpYWwgYW5kIGZhbWlseSBzdHJ1Z2dsZXMuIFVuZm9ydHVuYXRlbHksIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgbW92aWUgaXMgbmVhcmx5IGRlZGljYXRlZCB0byB0aGUgd2hpdGUgZmFtaWx5LiBBZG1pdHRlZGx5LCB0aGVyZSBhcmUgbW9yZSBjaGFyYWN0ZXJzIGluIHRoaXMgZmFtaWx5LCBhbmQgdGhlIHN0b3J5IGxpbmVzIGFyZSBpbnRlcm1pbmdsZWQsIGJ1dCBlcXVhbCBjb25zaWRlcmF0aW9uIGlzIG5vdCBnaXZlbiB0byB0aGUgcmFjaWFsIGFzcGVjdHMgb2YgdGhpcyBjZW50dXJ5LjxiciAvPjxiciAvPk9uIHRoZSB3aG9sZSwgdGhlIGFjdGluZyBpcyB3ZWxsIGRvbmUgYW5kIGhpc3RvcmljYWwgZm9vdGFnZSBpcyBtaXhlZCB3aXRoIGNvbG9yIGFuZCBibGFjayBhbmQgd2hpdGUgb3JpZ2luYWwgZm9vdGFnZSB0byBnaXZlIGEgZG9jdW1lbnRhcnkgZmVlbCB0byB0aGUgbW92aWUuIFRoZSBtb3ZpZSBpcyBhIHdvcmsgb2YgZmljdGlvbiwgYnV0IGNsaXBzIG9mIHdlbGwta25vd24gaGlzdG9yaWNhbCBmaWd1cmVzIGFyZSB1c2VkIHRvIHNldCB0aGUgdGltZS1saW5lLjxiciAvPjxiciAvPkkgZW5qb3llZCB0aGUgbW92aWUgYnV0IHRoZSBzaXR1YXRpb25zIHdlcmUgcHJlZGljdGFibGUgYW5kIHRoZSBzdG9yeWxpbmUgd2FzIG9uZS1zaWRlZC4pAAAAAAAAAEAKpgkIgQEQgQEilAlUaGUgJzYwcyBpcyBhbiBvY2Nhc2lvbmFsbHkgZW50ZXJ0YWluaW5nIGZpbG0sIG1vc3Qgb2YgdGhpcyBlbnRlcnRhaW5tZW50IGlzIGZyb20gbGF1Z2hpbmcgYXQgdGhlIGZpbG0uIEl0IGlzIGV4dHJlbWVseSB1bmV2ZW4sIGFuZCBpbmNsdWRlcyBtYW55IGFubm95aW5nIGVsZW1lbnRzLiBUYWtlIGZvciBpbnN0YW5jZSB0aGUgc3dpdGNoIGJldHdlZW4gYmxhY2sgJiB3aGl0ZSwgYW5kIGNvbG9yLiBJZiBkb25lIHJpZ2h0LCB0aGlzIGNvdWxkIG9mIGJlZW4gZmFpcmx5IGVmZmVjdGl2ZSwgYnV0IGJlY2F1c2UgaXQgd2FzIGRvbmUgcG9vcmx5ICwgaXQgdHVybmVkIGludG8gYSBudWlzYW5jZSBhbmQgb25seSBkZXRyYWN0ZWQgZnJvbSB0aGUgYWxyZWFkeSBiYWQgZXhwZXJpZW5jZTsgbXVjaCBvZiB0aGUgZmlsbSBoYWQgYW4gb2RkIGZlZWwgdG8gaXQuIFRoZSBhY3Rpbmcgd2Fzbid0IGV4dHJlbWVseSBiYWQgZm9yIGEgbWFkZSBmb3IgVFYgZmxpY2ssIGJ1dCB0aGVuIGFnYWluIGl0IHdhcyBkb3ducmlnaHQgZW1iYXJyYXNzaW5nIGF0IG90aGVyIHRpbWVzLiBNYW55IG9mIHRoZSBldmVudHMgd2VyZSBub3QgY29oZXJlbnQsIGFuZCBlbmRpbmcgdXAgYmVpbmcgY29uZnVzaW5nLiBIb3cgZGlkIHRoaXMgZmFtaWx5IHNvbWVob3cgZW5kIHVwIGJlaW5nIGF0IG1hbnkgb2YgdGhlIGJpZyBldmVudHMgZHVyaW5nIHRoZSAxOTYwJ3M/IFRoZSBlbmRpbmcgd2FzIG11Y2ggdG9vIHNhcHB5IGZvciBteSB0YXN0ZXM7IGJlY2F1c2UgaXQgd2FzIGhvbGx5d29vZGl6ZWQsIGV2ZXJ5dGhpbmcgaGFkIHRvIHR1cm4gb3V0IHJpZ2h0IGluIHRoZSBlbmQuIEkgd291bGQgYWR2aXNlIHlvdSB0byBub3Qgd2FzdGUgeW91ciB0aW1lIG9uIFRoZSAnNjBzIGFuZCBkbyBzb21ldGhpbmcgZWxzZSB3aXRoIHlvdXIgdGltZS4gSSdtIGdsYWQgSSB3YXRjaGVkIHRoaXMgaW4gY2xhc3MsIGFuZCBub3Qgb24gbXkgb3duIHRpbWUuIEkgdGhpbmsgSSBjYW4gc2FmZWx5IHNheSB0aGF0IHRoZSBiZXN0IHBhcnQgb2YgdGhlIG1vdmllIHdhcyB0aGUgaW5jbHVzaW9uIG9mIEJvYiBEeWxhbidzIG11c2ljLiBUaG9zZSBhcmUganVzdCBteSByYW1ibGluZyB0aG91Z2h0cyBvbiB0aGUgZmxpY2suIEkgaG9wZSB5b3UgdGFrZSBteSBhZHZpY2UsIGFuZCBzdGF5IGF3YXkgZnJvbSB0aGlzLikAAAAAAAAAQAqYBgiCARCCASKGBlRoYW5rZnVsbHkgSSB3YXRjaGVkIHRoaXMgZmlsbSBhbG9uZSwgZW5hYmxpbmcgbWUgdG8gZmFzdC1mb3J3YXJkIHRocm91Z2ggdGhlIHdvcnN0IHNjZW5lcyAoYWthIG1vc3Qgb2YgdGhlIGZpbG0sIGFjdHVhbGx5KS4gT0ssIHNvbWUgb2YgaXQgaXMgbm90IGFsbCBiYWQsIHdpdGggcGFydGlhbGx5IGdvb2QgcGhvdG9ncmFwaHkgKGV2ZW4gc29tZSBvZiB0aGUgdW5kZXIgd2F0ZXIgc2NlbmVzKSBhbmQgYXQgdGltZXMgbm90IHRvbyBiYWQgZGlyZWN0aW5nLiBCdXQgaXQgc3RpbGwgZG9lc24ndCBzYXZlIHRoZSBpbmNyZWRpYmx5IHBvb3Igc2NyaXB0IGFuZCB3YXkgd29yc2UgYWN0aW5nLiBBZGRpdGlvbmFsbHksIHdoZW4gSSBkb24ndCBmaW5kIHRoZSBtb3ZpZXMgImhvdHRpZSIgdG8gYmUgYWxsIHRoYXQsIGV2ZW4gdGhlIHdhbm5hYmUtc2V4eSBsb3ZlIG1ha2luZyBzY2VuZXMgZ2V0IGR1bGwuIFJlYWxseSBkdWxsISBBbmQgZm9yIHRoZSBkcmFtYTogWW91IGtub3cgaXQncyBhbHdheXMgYSBiYWQgc2lnbiB3aGVuIHlvdSBnZXQgdG8gZGlzbGlrZSBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgc28gbXVjaCB5b3UgcmVhbGx5IGRvbid0IGNhcmUgd2hvIGxpdmVzIGFuZCB3aG8gZGllcy48YnIgLz48YnIgLz5JZiB5b3Ugc3RpbGwgaGF2ZW4ndCBnb3R0ZW4gdGlyZWQgb2YgdGhlIHJlYWxpdHkgc2VyaWVzIFN1cnZpdm9yLCB5b3UgbWF5IGZpbmQgc29tZXRoaW5nIHRvIHlvdXIgbGlraW5nIGluIHRoaXMgbW92aWUuIElmIG5vdCwgc3RheSB3ZWxsIGNsZWFyISkAAAAAAAAAQAr0BAiDARCDASLiBFRlcm1pbnVzIFBhcmFkaXMgd2FzIGV4Y2VwdGlvbmFsLCBidXQgIk5pa2kgYXJkZWxlYW4iIGNvbWVzIHRvbyBsYXRlLiBXZSBhbHJlYWR5IGhhdmUgZW5vdWdoIG9mIHRoaXMgYW5kIHdlIHdhbnQgc29tZXRoaW5nIG5ldy48YnIgLz48YnIgLz5CaWcgZGlyZWN0b3JzIHNob3VsZCBoYXZlIG5vIHByb2JsZW1zIHNlZWluZyBiZXlvbmQgdGhlaXIgdGltZSwgbm90IGJlaGluZC4gV2h5IHBlb3BsZSBzZWUgUm9tYW5pYSBvbmx5IGFzIGEgcG9zdHJldm9sdXRpb25hcnkgY291bnRyeT88YnIgLz48YnIgLz5XZSBhcmUganVzdCBib3JuIG5vdCByZWluY2FybmF0ZWQsIGFuZCBub2JvZHkgZ2l2ZXMgYSBzKip0IGFueW1vcmUgYWJvdXQgb2xkIHRpbWVzLiBNb3N0IHBlb3BsZSBkb250IHJlbWVtYmVyIG9yIGRvbnQgd2FudCB0byByZW1lbWJlciwgYW5kIHRoZSBuZXcgZ2VuZXJhdGlvbiBvZiBtb3ZpZSBjb25zdW1lcnMgZG9udCB1bmRlcnN0YW5kIGEgYml0LiBUaGlzIHNob3VsZCBiZSB0aGUgZmlyc3QgZGF5IG9mIHJvbWFuaWFuIG1vdmllIG5vdCB0aGUgZmluYWwgc29uZyAtIHByaXZlZ2hpISBNYXliZSB5b3VuZ2VyIGRpcmVjdG9ycyBzaG91bGQgbWFrZSB0aGUgbW92ZS4pAAAAAAAAAEAKugwIhAEQhAEiqAxUYWxrIGFib3V0IHJ1YmJpc2ghIEkgY2FuJ3QgdGhpbmsgb2Ygb25lIGdvb2QgdGhpbmcgaW4gdGhpcyBtb3ZpZS4gVGhlIHNjcmVlbnBsYXkgd2FzIHBvb3IsIHRoZSBhY3Rpbmcgd2FzIHRlcnJpYmxlIGFuZCB0aGUgZWZmZWN0cywgd2VsbCB0aGVyZSB3ZXJlIG5vIGVmZmVjdHMuIEkgY2FuJ3QgYmVsaWV2ZSB0aGUgd3JpdGVyIG9mIHRoaXMgbW92aWUgZGlkIElkZW50aXR5LCBldmVyeXRoaW5nIGluIHRoaXMgbW92aWUgbWFkZSBtZSBzaWNrIHRvIHN0YXJ0IHRvIGZpbmlzaC48YnIgLz48YnIgLz5UaGUgZnJvbnQgY292ZXIgb2YgdGhlIHZpZGVvIGJveCBzaG93cyBhIHNob3dtYW4gd2l0aCBzaGFyayBsaWtlIHRlZXRoIGFuZCBzY2FyeSBleWVzLiBJIGxvb2tzIGxpa2UgYSBzY2FyeSB2aWxsYWluLCBidXQgbGlrZSB0aGUgb2xkIHNheWluZyAibmV2ZXIganVkZ2UgYSBib29rIGJ5IGl0J3MgY292ZXIiLCB0aGUgd2hvbGUgdmlsbGFpbiBsb29rZWQgbGlrZSBhIGNhcmRib2FyZCBjdXQgb3V0LiBPbmUgcGFydCBpbiB0aGUgZmlsbSBhIGdpcmwgZ2V0cyBraWxsZWQgYnkgYSBzYWxhZCB0b25ncywgdGVycmlibGUuIFRoZSBzZXR0aW5nIHdhcyBiYWQgZW5vdWdoLCBsaWtlIHRoZXkgY291bGQgb2Ygc2V0IHRoZSB3aG9sZSB0aGluZyBpbiBMYXBsYW5kIGJ1dCBubywgYSB0cm9waWNhbCBpc2xhbmQgaW5zdGVhZC48YnIgLz48YnIgLz5JIHRvb2sgdGhpcyBtb3ZpZSBhcyBhIHNwb29mLCB3aGljaCBJIHRoaW5rIHRoZXkgd2FudGVkIGl0IHRvIGJlIGJ1dCB0aGUgb25seSB0aGluZyB0aGF0IG1hZGUgbWUgbGF1Z2ggaW4gYSBiYWQgd2F5IHdhcyB0aGUgdGFja3kgZWZmZWN0cy4gWW91IGNhbiBhcmd1ZSB0aGF0IEkgaGF2ZW4ndCB3YXRjaGVkIHRoZSBmaXJzdCBvbmUsIGJ1dCBzZWVpbmcgdGhpcyBJIHdvdWxkIGJlIHNhZmUgaWYgSSB3b3VsZG4ndCBhdHRlbXB0ZWQgaXQuPGJyIC8+PGJyIC8+VGhlIGJpZ2dlc3Qgam9rZSBpbiB0aGlzIG1vdmllIGlzIHRoZSBlZmZlY3RzLCB0aGUgc25vd2JhbGxzIGxvb2tlZCBsaWtlIHRoZXkgd2VyZSBob21lIG1hZGUsIGFuZCB0aGF0IGNhcnJvdCB3YXMgYSBjb21wbGV0ZSBlbWJhcnJhc3NtZW50LiBJZiBJIHdvdWxkIG9mIGd1ZXNzIHRoZSBidWRnZXQgb2YgdGhpcyBtb3ZpZSB3b3VsZCBvZiBwcm9iYWJseSBiZSBiZXR3ZWVuIDggdG8gOSBwb3VuZHMgZmlmdHkuIFRoZSBwcm9kdWNlciBpbiBhIGxhc3QgbWludXRlIHBhbmljIG11c3Qgb2YgZ3JhYmJlZCB0aGUgYWN0b3JzIGZvciB0aGUgc3RyZWV0IGdhdmUgdGhlbSB0aGUgc2NyaXB0IHRvbGQgdGhlbSB0aGV5IGhhdmUgNiBtaW51dGVzIHRvIHByYWN0aXNlIHRoZXNlIGxpbmVzIGFuZCBzaG9vdCBvbiBhIGlzbGFuZC48YnIgLz48YnIgLz5MYXN0bHkgdGhlIGFjdGluZyBpbiB0aGUgZmlsbSB3YXMgcGFpbmZ1bCwgaXQgd2FzIGxpa2UgdGhlIGFjdG9ycyBmb3Jnb3QgdGhlaXIgb3JkaW5hcnkgbGluZXMgYW5kIG1hZGUgdGhlbSB1cCB0aGUgd2F5IHRocm91Z2guPGJyIC8+PGJyIC8+SW4gY29uY2x1c2lvbiBJIGdpdmUgdGhpcyBmaWxtOiAwIHN0YXJzIG91dCBvZiA1KQAAAAAAAABACuoICIUBEIUBItgIVEhFIEhBTkQgT0YgREVBVEggbW9zdCBkZWZpbml0ZWx5IHJhdGVzIGEgdGVuIG9uIGEgc2NhbGUgb2Ygb25lIHRvLSBkdWUsIGluIG5vIHNtYWxsIHBhcnQsIHRvIEpvaG4gV29vJ3MgbWFzdGVyZnVsIGRpcmVjdGlvbiwgY291cGxlZCB3aXRoIEthdCdzIHN1cGVyYiBjaW5lbWF0b2dyYXBoeTogc29tZSBvZiB0aGUgbGVpc3VyZWx5IHRyYWNraW5nIHNob3RzIGFsb25lIGFyZSB3b3J0aCB0aGUgcHJpY2Ugb2YgYSByZW50YWw7IHRoZXJlIGFyZSBtb21lbnRzIHdoZW4gdGhpcyBvbmUgYm9yZGVycyBvbiBiZWNvbWluZyBhbiBhcnQtaG91c2UgZmlsbS4gQm90aCBKYW1lcyBUaWVuIGFuZCBTYW1tbyBIdW5nIG1ha2UgZm9yIHRoZSBraW5kIG9mIHZpbGxhaW5zIHlvdSBjYW4ndCBoZWxwIGJ1dCBsb3ZlIHRvIGhhdGUuIFRpZW4gaXMgcGFydGljdWxhcmx5IGdvb2QgYXMgdGhlIGJhZGRlc3Qgb2YgdGhlIGJhZC4gSXQncyBhIHJvbGUgcmV2ZXJzYWwgdGhlIGxpa2VzIG9mIHdoaWNoIEkgZG9uJ3QgdGhpbmsgSSd2ZSBldmVyIHNlZW4gYmVmb3JlIChUaWVuIG5vcm1hbGx5IHBsYXllZCBhIGhlcm8gYW5kLCBpbiBmYWN0LCB3aXRoIGhpcyBtb3VzdGFjaGUsIEkgZGlkbid0IGV2ZW4gcmVjb2duaXplIGhpbSBhdCBmaXJzdCkuIFNhbW1vJ3MgZ29vZnkgImJ1Y2sgdGVldGgiIG9ubHkgbWFrZSBhbiBhbHJlYWR5IHVuc2F2b3J5IGNoYXJhY3RlciBzZWVtIGV2ZW4gbW9yZSBmbGF3ZWQ7IHRoYXQgaGUgYWxzbyBoYXBwZW5zIHRvIGJlIGEgc2tpbGxlZCBtYXJ0aWFsIGFydGlzdCBtYWtlcyBoaW0gZXZlbiBsZXNzIGxpa2FibGUtIGluIGEgdmlsbGFpbiB5b3UgbG92ZSB0byBoYXRlIGtpbmQgb2Ygd2F5LiBIaXMgY2hvcmVvZ3JhcGh5IG9mIHRoZSBmaWdodCBzY2VuZXMgdGhyb3VnaG91dCBpcyBmYW50YXN0aWMuIEphY2tpZSBDaGFuIGFwcGVhcnMgYnJpZWZseSAoZWFybHkgb24gYW5kIGxhdGUgaW4gdGhlIGdvaW5nKSBhcyBhIGJsYWNrc21pdGgsIGFuZCBJIGJlbGlldmUgSSBhY3R1YWxseSBnbGltcHNlZCBZdWVuIEJpYW8gc29tZXdoZXJlIGFsb25nIHRoZSB3YXkuIFRhbiBhcyB0aGUgbGVhZCBpcyBub3RoaW5nIGxlc3MgdGhhbiBtYWduaWZpY2VudC4pAAAAAAAAAEAKtQUIhgEQhgEiowVTcGVuZCB5b3VyIHRpbWUgYW55IG90aGVyIHdheSwgZXZlbiBob3VzZXdvcmsgaXMgYmV0dGVyIHRoYW4gdGhpcyBtb3ZpZS4gVGhlIGpva2VzIGFyZW4ndCBmdW5ueSwgdGhlIGZ1biByaHltZXMgdGhhdCBhcmUgRHIuIFNldXMgYXJlbid0IHRoZXJlLiBBIHZlcnkgbG91c3kgd2F5IHRvIHdhc3RlIGFuIGV2ZW5pbmcuIE15IGtpZHMgNC0xNiBsYXVnaGVkIGEgbGl0dGxlIGF0IHRoZSBiZWdpbm5pbmcgdGhlIHlvdW5nZXIgb25lcyBnb3QgYm9yZWQgd2l0aCBpdCBhbmQgbGVmdCB0byBwbGF5IEJhcmJpZXMgYW5kIHRoZSBvbGRlciBvbmVzIGxlZnQgdG8gcGxheSBwczIgYW5kIHN1cmYgdGhlIG5ldC4gTXkgd2lmZSBsZWZ0IGFuZCBkaWQgZGlzaGVzLiBTbyBJIGZpbmlzaGVkIGl0IGFsb25lLiBJdCB3YXMgdGhlIHdvcnN0ICJraWRzIiBtb3ZpZSBJIGhhdmUgc2Vlbi4gSWYgeW91IHdhbnQgdG8gd2F0Y2ggYSBmdW4ga2lkcyBtb3ZpZSB3YXRjaCBTaHJlayAyLCB0aGF0IG1vdmllIGlzIGZ1biBmb3Iga2lkcyBhbmQgdGhlaXIgcGFyZW50cy4gQVZPSUQgVEhJUyBNT1ZJRS4gSXQgaXNuJ3QgZnVubnksIGlzbid0IGN1dGUsIHRoZSBjYXQncyBtYWtldXAgaXMgYWJvdXQgdGhlIG9ubHkgZ29vZCB0aGluZyBpbiBpdCBhbmQgeW91IGNhbiBzZWUgdGhhdCBvbiB0aGUgZGlzYyBsYWJlbC4pAAAAAAAAAEAK9wUIhwEQhwEi5QVTb21laG93IHRoZXkgc3VtbWVkIHVwIHRoZSA2MCdzLCB0ZW4geWVhcnMgdGhhdCByYWRpY2FsbHkgY2hhbmdlZCBvdXIgY291bnRyeSwgaW4gZm91ciBob3Vycy4gQW5kIHdoYXQgYSBwYWluZnVsIGZvdXIgaG91cnMgaXQgd2FzLiBUaGV5IHRyaXZpbGl6ZWQgdGhlIG1ham9yIGV2ZW50cyBhbmQgaGFwcGVuaW5ncyBhbmQgdGhleSAiY2xhaW1lZCIgaXQgd2FzIGFib3V0IHR3byBmYW1pbGllcyB5ZXQgeW91IGJhcmVseSBzYXcgdGhlIGFmcmljYW4tYW1lcmljYW4gZmFtaWx5LiBJZiBJIHdlcmUgTkJDIEkgd291bGQgYmUgYXNoYW1lZCBhbmQgZW1iYXJyYXNzZWQgZm9yIGFpcmluZyBzdWNoIHRyYXNoLiBXaGF0IHdhcyBhbXVzaW5nIHdhcyB0aGlzIGhhcHB5LWdvLWx1Y2t5IGZhbWlseSB5b3Ugc2F3IGluIHRoZSB2ZXJ5IGJlZ2lubmluZyB3YXMgdG9ydHVyZWQgaW4gc28gbWFueSB3YXlzLCBidXQgbWFuYWdlZCB0byBhdHRlbmQgZXZlcnkgbWFqb3IgNjAncyBldmVudCB0aHJvdWdoIHRoZSBjb3VudHJ5LiBBbmQgdGhlIHNlY29uZCBmYW1pbHkgd2FzIHN1Y2ggYSBub24tZmFjdG9yLiBUaGV5IGRldm90ZWQgbWF5YmUgZml2ZSBvciBzaXggc2NlbmVzIHRvdGFsIHRvIHRoaXMgZmFtaWx5LiBUaGF0IHBvb3Igc29uLi4uIFBsZWFzZSBOQkMsIGRvIG5vdCBtYWtlIGFueSBtb3ZpZXMgYWJvdXQgYW55IG90aGVyIGVyYXMuLi4ubGVhdmUgdGhhdCB0byBQQlMgYW5kIHRoZSBIaXN0b3J5IENoYW5uZWwpAAAAAAAAAEAK8gkIiAEQiAEi4AlTb21lIHdpbGwgc2F5IHRoaXMgbW92aWUgaXMgYSBndWlsdHkgcGxlYXN1cmUuIEkgbG92ZWQgdGhpcyBmbGljayBidXQgSSBkb24ndCBmZWVsIGd1aWx0eSBhYm91dCBpdC4gWW91IGNhbiB0ZWxsIHRoZSB3aG9sZSBjYXN0IGFuZCBjcmV3IGhhZCBmdW4gbWFraW5nIHRoaXMgbW92aWUuIEJ1dCBKYWNrIEZyb3N0IDIgd29uJ3QgZ28gb3ZlciB3ZWxsIHdpdGggc29tZSBwZW9wbGUuIFJpZ2h0IGZyb20gdGhlIGJlZ2lubmluZyB5b3UgY2FuIHRlbGwgdGhpcyBtb3ZpZSB3aWxsIGJlIGNoZWVzeSBhbmQgaXQgZGVmaW5pdGVseSBoYXMgYW4gYW1hdGV1cmlzaCBsb29rIHRvIGl0LiBXZWxsLCBpZiB5b3UgZ2V0IHRoZSBwcml2aWxlZ2UgdG8gd2F0Y2ggdGhpcyBtb3ZpZSwgYWZ0ZXIgd2F0Y2hpbmcgaXQgcmVtZW1iZXIgdGhhdCBKYWNrIEZyb3N0IDI6IFJldmVuZ2Ugb2YgdGhlIE11dGFudCBLaWxsZXIgU25vd21hbiBpcyBhIHBsZWFzdXJlLCBub3QgYSBndWlsdHkgcGxlYXN1cmUuIE5vdywgYmVjYXVzZSBJIGNhbid0IGZpbGwgdXAgdGVuIGxpbmVzIGhlcmVzIHNvbWUgZ3JlYXQgc2NlbmVzOiA8YnIgLz48YnIgLz4qKlNQT0lMRVJTKiogPGJyIC8+PGJyIC8+VGhlIHRocmVlIHdvbWVuIG9uIHRoZSBiZWFjaCBoYWQgZ3JlYXQgZGVhdGhzLiBUaGUgZmlyc3Qgb25lIGhhZCBKYWNrIGluIGEgdHJlZSB0cnlpbmcgdG8gZHJvcCBpY2ljbGVzIG9uIG9uZSBvZiB0aGVtLiBIZSBrZXB0IG1pc3Npbmcgc28gaGUgZHJvcHBlZCBhbiBhbnZpbCBvbiBoZXIuIFRoZSBuZXh0IHdvbWFuIGZlbGwgb24gYSBiZWQgb2YgaWNpY2xlcy4gVGhlIGxhc3Qgb25lIHdhcyBzdGFiYmVkIGluIHRoZSBleWVzIHdpdGggdG9uZ3MuPGJyIC8+PGJyIC8+VGhlIG90aGVyIGdyZWF0IG9uZSB3YXMgd2hlcmUgdHdvIHN1cmZlcnMgc3RvbmVycyBhcmUgaGFuZ2luZyBvdXQgbmVhciBhIGZyb3plbiBwb2xlLiBPbmUgb2YgdGhlbSBnZXRzIHRoZWlyIHRvbmd1ZSBzdHVjayBvbiBpdCAob2YgY291cnNlKS4gSmFjayBGcm9zdCBwdWxscyBoaW0gYmFjayBhIHJpcHMgaGlzIHRvbmd1ZSBvZmYgd2hpbGUgc2F5aW5nICJDT1dBLVRPTkdVRS1BIERVREUhIi4gV2VsbCwgeW91IGhhdmUgdG8gc2VlIGl0IGZvciB5b3Vyc2VsZi48YnIgLz48YnIgLz5BbmQgb2YgY291cnNlLCB0aGUgc25vd2JhbGwgY2hpbGRyZW4ga2lja2VkIGFzcy48YnIgLz48YnIgLz4qKkVORCBTUE9JTEVSUyoqPGJyIC8+PGJyIC8+aW5maW5pdHkgc3RhcnMpAAAAAAAAAEAK8ggIiQEQiQEi4AhTbywgSSdtIHdvbmRlcmluZyB3aGlsZSB3YXRjaGluZyB0aGlzIGZpbG0sIGRpZCB0aGUgcHJvZHVjZXJzIG9mIHRoaXMgbW92aWUgZ2V0IHRvIHNhdmUgbW9uZXkgb24gU2FuZHJhIEJ1bGxvY2sncyB3YXJkcm9iZSBieSBkcmFnZ2luZyBvdXQgaGVyICJiZWZvcmUiIGNsb3RoZXMgZnJvbSBNaXNzIENvbmdlbmlhbGl0eT8gRGlkIE1zLiBCdWxsb2NrIGFsc28gZ2V0IHRvIHNsZWVwd2FsayB0aHJvdWdoIHRoZSByb2xlIGJ5IGNoYW5uZWxpbmcgdGhlICJiZWZvcmUiIEdyYWNpZSBIYXJ0PyBBcyBtYW55IHJldmlld2VycyBoYXZlIG5vdGVkIGJlZm9yZSwgdGhlIGZpbG0gaXMgdmVyeSBmb3JtdWxhaWMuIEFkZCB0byB0aGF0IHRoZSBkZWphIHZ1IHZpZXdlciBleHBlcmllbmNlcyB3aXRoIHRoZSBjaGFyYWN0ZXIgb2YgQ2Fzc2llIE1heXdldGhlciBhcyBhIHNvbWV3aGF0IGRhcmtlciBHcmFjaWUgSGFydCB3aXRoIG1vcmUgYmFjayBzdG9yeSBhbmQgaXQgcmFwaWRseSBiZWNvbWUgYSBzbm9vemUgZmVzdC48YnIgLz48YnIgLz5UaGUgdHdvIGJhZCBib3kgc2VyaWFsIGtpbGxlcnMgaGF2ZSBiZWVuIGRvbmUgYmVmb3JlIChhbmQgYmV0dGVyKSBpbiBvdGhlciBmaWxtcy4gQXMgaGFzIHRoZSAiZ29vZCBndXkgcGFydG5lciB0cnlpbmcgdG8gcHJvdGVjdCBoaXMgcGFydG5lciBkZXNwaXRlIHRoZSBldmlkZW5jZSIgY2hhcmFjdGVyIGJlZW4gc2VlbiBiZWZvcmUuIEluIGZhY3Qgbm9uZSBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgZmlsbSBldmVyIGdldCBiZXlvbmQgdHdvIGRpbWVuc2lvbnMgb3IgdHJ5IHRvIGJlIGFueXRoaW5nIGJ1dCB0cml0ZSBzdGVyZW90eXBlcy48YnIgLz48YnIgLz5PbmUgbGFzdCBwZWV2ZSAtIHVzaW5nIHRoZSB0ZXJtIHNlcmlhbCBraWxsZXIgaXMgZmFsc2UgYWR2ZXJ0aXNpbmcuIE11cmRlcmluZyBvbmUgcGVyc29uIC0gZXZlbiBpZiBpdCdzIGEgcHJlbWVkaXRhdGVkIG11cmRlciAtIGRvZXMgbm90IG1ha2UgeW91IGEgc2VyaWFsIGtpbGxlci4gWW91IG1heSBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gYmVjb21lIGEgc2VyaWFsIGtpbGxlciBidXQgeW91IGFyZSBub3QgYSBzZXJpYWwga2lsbGVyIG9yIGV2ZW4gYSBzcHJlZSBraWxsZXIuKQAAAAAAAABACvUECIoBEIoBIuMEU28gbXVjaCBmb3IgSlVER0UgQU5EIEpVUlksIHdoaWNoIGxpdmVzIHVwIHRvIGl0cyBub25zZW5zZSB0aXRsZS4gV2hhdCBnb29kIGlzIHRoZXJlPyBUaGUgbGlnaHRpbmcgaXMgdGVycmlibHkgZm9nZ3khIEFub3RoZXIgaG9ycm9yIG1vdmllIHlvdSBhc2s/IFdlbGwsIHRoYXQncyBwZXJmZWN0bHkgZXhwbGFpbmFibGUuIERhdmlkIEtlaXRoIGFjdHVhbGx5IGRvZXMgcHJldHR5IGdvb2QgYXQgZGlzZ3Vpc2luZyBjbG93bnMsIGNoZWZzLCBhbmQgb3RoZXIgc2hlbmFuaWdhbnMgd2hpbGUgYmVpbmcgdGhlIGtpbGxlciB3aG8gZXNjYXBlZCBkZWF0aCByb3cuIEJ1dCBvdmVyYWxsLCBkZXNwaXRlIHNvbWUgbmV3IHR3aXN0cywgaXQncyByZWFzb25hYmx5IHN0dXBpZC4gVW5hcGl4IGhhcyBiZWVuIHB1dHRpbmcgb3V0IHNvbWUgbHVkaWNyb3VzIHByb2R1Y3Rpb25zIHJlY2VudGx5LCBhbmQgdGhpcyBvbmUgb25seSBtZWFucyBzbyBtdWNoLiBXZSwgdGhlIGp1cnksIGZpbmQgdGhpcyBmaWxtIGd1aWx0eSBmb3IgaXRzIGluZGVjZW50IGV4cG9zdXJlIHRvIG1hbnkgb2YgdXMgc2l0dGluZyBhcm91bmQgYmVsaWV2aW5nIGl0J3MgYSB0b3RhbCB3YXN0ZSBvZiBvdXIgdGltZSEpAAAAAAAAAEAKqAUIiwEQiwEilgVTbWFsbHZpbGxlIGVwaXNvZGUgSnVzdGljZSBpcyB0aGUgYmVzdCBlcGlzb2RlIG9mIFNtYWxsdmlsbGUgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgSXQncyBteSBmYXZvcml0ZSBlcGlzb2RlIG9mIFNtYWxsdmlsbGUhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISAhICEgISkAAAAAAAAAQAr9CgiMARCMASLrClNpbmNlIEkgYW0gcmVxdWlyZWQgdG8gd3JpdGUgbWluaW11bSBvZiAxMCBsaW5lcywgYW5kIHRoaXMgZ2FyYmFnZSBkZXNlcnZlcyBub3Qgb25seSBhIHNpbmdsZSBvbmUsIEknbGwgc3RhcnQgd2l0aCB0aGUgZm9sbG93aW5nOiAxLiBJIHZvdGVkIEFXRlVMIGZvciB0aGlzIGRyZWFkZnVsIHNvIGNhbGxlZCAibW92aWUiLjxiciAvPjxiciAvPjIuIExldCBtZSBleHBsYWluIHdoeSB0aGVzZSB0dXJrZXlzIE1yLiBEYXZpZCBWYXJvZCBwcm9kdWNlcyBhcmUgc2hvdCBtYWlubHkgaW4gbXkgYmVhdXRpZnVsIGhvbWVsYW5kLCBCdWxnYXJpYSAoanVzdCBpbiBCVFcsIGZvciB0aGUgaWxsaXRlcmF0ZSBwZW9wbGUgYXJvdW5kIC0gdGhpcyBjb3VudHJ5IGlzIElOIEVVUk9QRSwgYmFzZWQgbm9ydGggdG8gR3JlZWNlIGFuZCBoYXMgYWJzb2x1dGVseSBub3RoaW5nIHRvIGRvIHdpdGggTWV4aWNvIGFuZCBVcnVndWF5KSBTb21lIHllYXJzIGFnbywgTlUgSW1hZ2UgaGFzIGludmFkZWQgb3VyIGNvdW50cnkgYW5kIHN0YXJ0ZWQgbWFraW5nIGNyYXBweSBtb3N0bHkgZGlyZWN0LXRvLXZpZGVvIHJlbGVhc2VzLiBXaHkgaGVyZT8gQmVjYXVzZSBoZXJlIHRoZXkgcGF5IGRlcmlzaXZlbHkgbG93IGZlZXMgdG8gdGhlIEJ1bGdhcmlhbiBjcmV3IGFuZCB0byB0aGUgQnVsZ2FyaWFuIGFjdG9ycyAobW9zdCBvZiB0aGVtIGRpc3Rpbmd1aXNoZWQgb25lcykgd2hpY2ggYXJlLCBpbiBtYW55IHdheXMsIGJldHRlciB0aGFuIG1vc3Qgb2YgdGhlaXIgQW1lcmljYW4gY29sbGVhZ3Vlcy4gUGVyc29uYWxseSBJIGFtIGFzaGFtZWQgb2YgdGhhdCBmYWN0LiBUaGUgcmVhc29uIGlzLCBvZiBjb3Vyc2UsIHRoZSBncmVlZGluZXNzIG9mIHRoZSBBbWVyaWNhbnMgaW52b2x2ZWQgYW5kIHRoZWlyIHdpc2ggdG8gZ2V0IG1vc3QsIGlmIG5vdCBhbGwgb2YgdGhlIHByb2ZpdC4gQWN0dWFsbHkgaXQgd291bGQndCBiZSBzbyBiYWQgaWYgb25seSB0aGUgcHJvZHVjdGlvbiB3YXNuJ3Qgc28gZmlsdGh5IGFuZCBwYWxlLiBUaGVyZSBoYXNuJ3QgYmVlbiBhIGdvb2QgcGljdHVyZSBzaG90IGhlcmUgZm9yIHllYXJzLiBBdCBwcmVzZW50IE5VIGltYWdlIGlzIGJlaW5nIHN1ZWQgaGVyZSBvdmVyIHRoZSB2ZXJ5IHF1ZXN0aW9uYWJseSBwdXJjaGFzaW5nIG9mIG91ciBuYXRpb25hbCBjaW5lbWEgcHJvZHVjdGlvbiBjZW50cmUgY2FsbGVkIEJveWFuYSBGaWxtcy4gTm8gZG91YnQgYWJvdXQgaXQgdGhlcmUgaGFzIGJlZW4gY29ycnVwdGlvbiwgdGhlcmUgaGFzIGJlZW4gZGVjZWl0LCB0aGVyZSBoYXMgYmVlbiBhIGxpZXMgaW4gdGhpcyByZWNlbnQgcHVyY2hhc2UuIFRoZSBCdWxnYXJpYW4gY2luZW1hIGlzIGRlYWQuIExvbmcgbGl2ZSB0aGUgQnVsZ2FyaWFuIGNpbmVtYSEpAAAAAAAAAEAKhgcIjQEQjQEi9AZTaWdoLiBJJ20gYmFmZmxlZCB3aGVuIEkgc2VlIGEgc2hvcnQgbGlrZSB0aGlzIGdldCBhdHRlbnRpb24gYW5kIGFzc2lnbm1lbnRzIGFuZCB3aGF0bm90LiBJIHNhdyB0aGlzIGZpbG0gYXQgYSBmZXN0aXZhbCBiZWZvcmUgdGhlIGZpbG1tYWtlciBnb3QgYW55IGF0dGVudGlvbiBhbmQgZm9yZ290IGFib3V0IGl0IGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuIEl0IHdhcyBtaWxkbHkgYW5ub3lpbmcgdG8gc2VlIGl0IHN3aXBpbmcgdGhlIEdyaW5jaCBXaG8gU3RvbGUgQ2hyaXN0bWFzIGhlYXJ0IGdhZyBhbG9uZyB3aXRoIHRoZSBuYXJyYXRpb24sIHRoZSBzZXQgZGVzaWduIHNlZW4gbWFueSB0aW1lcyBiZWZvcmUsIHRoZSB3aG9sZSB3ZWFrIFRpbSBCdXJ0b24taXNoIHN0eWxlLCBhbmQgdGhlIHN0b3J5IHRoYXQgZ29lcyBub3doZXJlLiBBbmQgd2UgZ290IHRoZSAiam9rZSIgYWJvdXQgc2hvb3RpbmcgdGhlIGNyb3dzIHdpdGggdGhlIDQ1IHRoZSBmaXJzdCB0aW1lLCBhbHJpZ2h0PzxiciAvPjxiciAvPkJ1dCBJIGd1ZXNzIHdoYXQncyByZWFsbHkgdW5hY2NlcHRhYmxlIGlzIHRoYXQgaXQgZXZlbiBzd2lwZXMgaXRzIGJhc2ljIGNvbmNlcHQgZnJvbSBhIGNvbWljIGJvb2sgY2lyY2EgMTk5OSBjYWxsZWQgTEVOT1JFLCBUSEUgQ1VURSBMSVRUTEUgREVBRCBHSVJMIGJ5IFJvbWFuIERpcmdlISBBcyBhbnkgcXVpY2sgaW50ZXJuZXQgc2VhcmNoIHdpbGwgcmV2ZWFsLiBJIG1lYW4sIHdoYXQgaXMgdGhpcz8gVGhpcyBpcyB3aGF0IHRoZXkgYmFzZSBhIEhvbGx5d29vZCBjb250cmFjdCBvbiBhbmQgb3BlbnMgZG9vcnMgaW4gQ2FuYWRhIGZvciBhIGZpbG1tYWtlcj8gIkdpdmUgeW91ciBoZWFkIGEgc2hha2UiIGFzIERvbiBDaGVycnkgbWlnaHQgc2F5LikAAAAAAAAAQAqPBwiOARCOASL9BlNoYW1lIFNoYW1lIFNoYW1lIG9uIFVBL0RXIGZvciB3aGF0IHlvdSBkbyEgPGJyIC8+PGJyIC8+SSB3YXMgYXBwYWxsZWQuIDxiciAvPjxiciAvPkRvIE5PVCB0YWtlIGtpZHMgdG8gc2VlIHRoaXMgbW92aWUuIFRoZSBodW1vciBpcyB0b3RhbGx5IGluYXBwcm9wcmlhdGUgZm9yIGNoaWxkcmVuIC0gcGx1cyB0aGV5J2xsIGJlIGJvcmVkIGFuZCBkaXNhcHBvaW50ZWQuIENlcnRhaW5seSAqd2UgYWxsKiBoYXZlIHJlYWQgVGhlbydzIHdvbmRlcmZ1bCBjaGlsZHJlbiBib29rIGFuZCBjZXJ0YWlubHkgd2UgaGF2ZSBleHBlY3RhdGlvbnMuLi5idXQgdGhpcyBpcyBwdXJlIHRyYXNoLiBEci4gU2V1c3Mgd291bGQgYmUgYXNoYW1lZCBhbmQgY2VydGFpbmx5IHdvdWxkJ3ZlIG5ldmVyIGdpdmVuIGhpcyAidGh1bWJzIHVwIiBhdCBzdWNoIGEgZGFzdGFyZGx5IGF0dGVtcHQgdG8gY2FwaXRhbGl6ZSBvbiBhIGNsYXNzaWMuPGJyIC8+PGJyIC8+V2hhdCBhIHBpdHkuIDxiciAvPjxiciAvPlNwZW5kIHlvdXIgbW9uZXkgb24gdGhlIGJvb2suIElmIHlvdSBvd24gYSBjb3B5LCB0aGVuIGJ1eSB0aGUgYm9vayBhbmQgZG9uYXRlIGl0IHRvIGEgVG95cyBmb3IgVG90cyBwcm9ncmFtLiBUaGlzIG1vdmllIGlzIE5PVCB3b3J0aCBhICJmcmVlIiB0aWNrZXQgdmlld2luZy48YnIgLz48YnIgLz5TdGljayB3aXRoIHRoZSBib29rLiBUaGUgdHYgY2FydG9vbiB2ZXJzaW9uIHdvcmtzIHdlbGwgaWYgeW91IHdhbnQgYSB2aXN1YWwgcG9ydHJheWFsIC0gc2F2ZSB5b3VyIG1vbmV5Li4uc2VyaW91c2x5LiBTQVZFIHlvdXIgbW9uZXkgLSBpdCB3aWxsIGJlIG9uIGNhYmxlIGJ5IHNhaW50IHBhdHR5J3MgZGF5LjxiciAvPjxiciAvPlNoYW1lIHNoYW1lIHNoYW1lIG9uIHdoYXQgdGhleSBkbyEhKQAAAAAAAABACogFCI8BEI8BIvYEU2VyaW91c2x5LCBJIGRvbsK0dCByZWFsbHkgZ2V0IHdoeSBwZW9wbGUgaGVyZSBhcmUgYmFzaGluZyBpdC4gSSBtZWFuLDxiciAvPjxiciAvPnRoZSBpZGVhIG9mIGEga2lsbGVyIHNub3dtYW4gd3JlYWtpbmcgaGF2b2Mgb24gYSB0cm9waWNhbCBpc2xhbmQgcGFyYWRpc2UgaXMgcHJldHR5IGFic3VyZC4gVGhlIGdvb2QgbmV3cyBpcywgdGhlIHByb2R1Y2VycyByZWFsaXplZCBpdCBhbmQgbWFkZSBpdCBhIGNvbWVkeSBpbiB0aGUgdmVpbiBvZiBBcm15IG9mIERhcmtuZXNzLiA8YnIgLz48YnIgLz5Fc3BlY2lhbGx5IGluIHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgZmlsbSwgd2hlbiB0aGUgbGl0dGxlIGtpbGxlciBzbm93YmFsbHMgYXR0YWNrLCBJIGxhdWdoZWQgbXkgYXNzIG9mZi4gRm9yIGV4YW1wbGUsIHRoZSBwdXQgb25lIG9mIHRoZSBsaXR0bGUgY3JlZXBzIGludG8gYSBibGVuZGVyIChhIGxhIEdyZW1saW5zIDEpIGFuZCBtaXggaXQuIEFmdGVyIHRoYXQsIGl0IG1vcnBocyBiYWNrIGludG8gYSBzbm93YmFsbCBhbmQgc3F1ZWFscyB3aXRoIGEgaGlnaCBwaXRjaGVkIHZvaWNlICJUaGF0IHdhcyBmdW4hIi48YnIgLz48YnIgLz5Cb3R0b20gbGluZSAtIGluY3JlZGlibGUgbW92aWUsIHJlbnQgaXQuKQAAAAAAAABACs8HCJABEJABIr0HUmVudGVkIHRoaXMgdG9uaXRlIGZyb20gbXkgbG9jYWwgdmlkZW8gc3RvcmUuIEl0IHdhcyB0aXRsZWQgIkJsYWNrIEhvcml6b24uIiBJIGd1ZXNzIHNvbWVvbmUgZmVsdCB0aGlzIHdhcyBnb29kIGVub3VnaCBmb3IgYSAyMDA0IHJlLXJlbGVhc2UuLi48YnIgLz48YnIgLz5NaWNoZWFsIER1ZGlrb2ZmIGlzIHVuZm9ydHVuZXRseSBub3QgYSBuaW5qYSBpbiB0aGlzIG1vdmllLCBvbmUgb2YgdGhlIG1ham9yIGZsYXdzIG9mIHRoaXMgZmlsbSByaWdodCBvZmYgdGhlIGJhdC4gQW5vdGhlciBtYWpvciBmbGF3IHdvdWxkIGJlIHRoYXQgSWNlLXQncyBhY3Rpb24gc2NlbmVzIGFyZSBzdG9sZW4gZnJvbSBvdGhlciBtb3ZpZXMsIHBhcnRpY3VsYXJseSB0aGUgZmlyc3Qgc2NlbmUgb2YgaGlzIHJlc2N1ZSwgd2hpY2ggaXMgZGlyZWN0bHkgZnJvbSB0aGUgV2VzbGV5IFNuaXBlcyBtb3ZpZSAiVGhlIEFydCBvZiBXYXIsIiB3aXRoIEljZS1UIGVkaXRlZCBpbi4gSSBob3BlIHRoZXkgcGFpZCBmb3IgdGhhdCBmb290YWdlLjxiciAvPjxiciAvPlRoZSBwbG90IGlzIGF3ZnVsLCB0aGUgc3BlY2lhbCBlZmZlY3RzIGhhZCBsaXR0bGUgZWZmb3J0IHB1dCBpbnRvIHRoZW0gKGxvdmUgdGhvc2Ugd2lyZXMgaG9sZGluZyB0aGVtIGluIHNwYWNlKSwgdGhlIGFjdGluZyBpcyB3b29kZW4gKGFsc28gbG92ZSB0aG9zZSBOZXcgWW9yay9SdXNzaWFuIGFjY2VudHMpLiBJY2UtVCBiZWluZyBpbiB0aGUgbW92aWUgaXMgcG9pbnRsZXNzLiBUaGVzZSBndXlzIGFsc28gZm9yZ290IHRoZSBmYWN0IHRoYXQgdGhlcmUgaXMgbm8gZ3Jhdml0eSBpbiBzcGFjZSwgYnV0IEkgZ3Vlc3MgdGhleSB3ZXJlbid0IHdvcnJpZWQgYWJvdXQgaXQuPGJyIC8+PGJyIC8+TWljaGVhbCBEdWRpa29mZiBzaG91bGQgZ28gYmFjayB0byBkb2luZyB3aGF0IGhlJ3MgImdvb2QiIGF0IGFuZCBtYWtlIEFtZXJpY2FuIE5pbmphIDYuKQAAAAAAAABACrMFCJEBEJEBIqEFUmVkIFNrZWx0b24gd2FzIHN0aWxsIGFub3RoZXIgbWFqb3Igc3RhciB3aG8gbWFkZSB0aGUgdHJhbnNpdGlvbiBmcm9tIG1vdmllcyB0byB0ZWxldmlzaW9uIHdpdGggZWFzZS48YnIgLz48YnIgLz5IaXMgc2hvd3MgY2VydGFpbmx5IGJyb3VnaHQgYSBsYXVnaHRlciB0byB0aGUgQW1lcmljYW4gaG91c2Vob2xkcyBvZiB5ZWFycyBiYWNrLjxiciAvPjxiciAvPkhlIHdvdWxkIGJlZ2luIHRoZSBzaG93IHdpdGggYW4gb3BlbmluZyBtb25vbG9ndWUuIEFmdGVyd2FyZHMsIHdlIHdvdWxkIGhhdmUgYSB2YXJpZXR5IG9mIGNoYXJhY3RlcnMuIFJlbWVtYmVyIEdlcnRydWRlIGFuZCBIZWF0aGNsaWZmIGluIHRoZSBtb25vbG9ndWU/IEhvdyBjYW4gd2UgZXZlciBmb3JnZXQgU2FuIEZlcm5hbmRvIFJlZD8gSSByZW1lbWJlciBvbmUgZXBpc29kZSB3aGVyZSBhcyBhIGtpbmcgUmVkIGludHJvZHVjZWQgaGlzIHF1ZWVuIGJ5IHJlZmVycmluZyB0byBoZXIgYXMgeW91ciBmYXRuZXNzLjxiciAvPjxiciAvPkdvIGtub3cgdGhhdCBSZWQgd291bGQgdXNlIGhpcyBjb21lZGljIHRhbGVudHMgdG8gcmVhbGx5IGhpZGUgZnJvbSBoaXMgdHJhZ2ljIGxpZmUuIEhlIGxvc3QgYSBzb24gdG8gbGV1a2VtaWEgYXQgYWdlIDExIG9yIHNvLiBIaXMgd2lmZSwgR2VvcmdpYSwgZGllZCBieSBzdWljaWRlLikAAAAAAAAAQAqWEgiSARCSASKEElF1aXRlIHdoYXQgdGhlIHByb2R1Y2VycyBvZiB0aGlzIGFwcGFsbGluZyBhZGFwdGF0aW9uIHdlcmUgdHJ5aW5nIHRvIGRvIGlzIGltcG9zc2libGUgdG8gZmF0aG9tLjxiciAvPjxiciAvPkEgZ3JvdXAgb2YgdG9wIHF1YWxpdHkgYWN0b3JzLCBpbiB0aGUgbWFpbiB3ZWxsIGNhc3QgKHdpdGggYSBjb3VwbGUgb2Ygbm90YWJsZSBleGNlcHRpb25zKSwgd2hvIGdpdmUgcHJldHR5IGdvb2QgcGVyZm9ybWFuY2VzLiBQZW5lbG9wZSBLZWl0aCBpcyBwZXJmZWN0IGFzIEF1bnQgTG91aXNlIGFuZCBlcXVhbGx5IGdvb2QgaXMgSm9hbm5hIEx1bWxleSBhcyBEaWFuYS4gQWxsIGRvIHdlbGwgd2l0aCB0aGUgc2NyaXB0cyB0aGV5IHdlcmUgZ2l2ZW4uPGJyIC8+PGJyIC8+U28gbXVjaCBmb3IgdGhlIGdvb2QuIFRoZSBhdmVyYWdlIHdvdWxkIGluY2x1ZGUgdGhlIHNldHMuIE5hbmNoZXJyb3cgaXMgbm90aGluZyBsaWtlIHRoZSBob3VzZSBkZXNjcmliZWQgaW4gdGhlIGJvb2ssIGFsdGhvdWdoIGJpemFycmVseSB0aGUgaG91c2UgdGhleSB1c2UgZm9yIHRoZSBEb3dlciBIb3VzZSBsb29rcyByZW1hcmthYmx5IGxpa2UgaXQuIEl0IGlzIGNsZWFyIHRoZW4gdGhhdCB0aGUgRG93ZXIgSG91c2UgaXMgZmFyIHRvbyBiaWcuIEluIHRoZSBsYXRlciBwYXJ0cywgdGhlIHdyaXRlcnMgZGVjaWRlZCB0byBicmluZyB0aGUgZW50aXJlIHN0b3J5IGJhY2sgdG8gdGhlIFVLLCBwcmVzdW1hYmx5IHRvIHNhdmUgbW9uZXksIGFsdGhvdWdoIHdpdGggYSBsaXR0bGUgaW1hZ2luYXRpb24gSSBoYXZlIG5vIGRvdWJ0IHRoZXkgY291bGQgaGF2ZSByZWNyZWF0ZWQgQ2V5bG9uLjxiciAvPjxiciAvPk5vdyB0byB0aGUgYmFkLiBUaGUgc2NyZWVucGxheS4gVGhpcyBpcyBzdWNoIGFuIGFwcGFsbGluZ2x5IGJhZCBhZGFwdGF0aW9uIGlzIGhhcmQgdG8gZmluZCB3b3JkcyB0byBjb25kZW1uIGl0LiBFZHdhcmQgZG9lcyBub3QgZGllIGluIHRoZSBiYXR0bGUgb2YgQnJpdGFpbiBidXQgc3Vydml2ZXMsIGJsaW5kZWQuIEhlIG1ha2VzIGEgYnJpZWYgYXBwZWFyYW5jZSB0aGVuIGNvbW1pdHMgc3VpY2lkZSAtIHdoeT8/IExvdmVkYXkgaGFzIGNoYW5nZWQgZnJvbSB0aGUgeW91bmcgd29tYW4gdG90YWxseSBpbiBsb3ZlIHdpdGggR3VzIHRvIGEgc2Vuc2libGUgZmFybWVyJ3Mgd2lmZSB3aG8gY2FuIGdpdmUgdXAgdGhlIGxvdmUgaGVyIGxpZmUgd2l0aCBiYXJlbHkgYSB0ZWFyIChsZXNzIGVtb3Rpb25hbCB0aGFuIEJyaWVmIEVuY291bnRlcikuIEd1cywgYSBtYW4gYmVzb3R0ZWQgYW5kIHBhc3Npb25hdGVseSBpbiBsb3ZlLCBpcyBwcmVwYXJlZCB0byBnaXZlIHVwIGhpcyBsb3ZlIHdpdGhvdXQgY29tcGxhaW50LiBXYWx0ZXIgKE11ZGdlIGluIHRoZSBib29rKSB0dXJucyBmcm9tIGEgc2hhbGxvdyB1bmZhaXRoZnVsIGh1c2JhbmQgdG8gYSBkZXZvdGVkIGZhbWlseSBtYW4uIEplc3MgaXMgbWFkZSBpbnRvIGEgcHN5Y2hvbG9naWNhbGx5IGRpc3R1cmJlZCB5b3VuZyB3b21hbiB3aG8gd29uJ3Qgc3BlYWsuIEF1bnQgQmlkZHkgc3RpbGwgaGFzIGEgZHJpbmsgcHJvYmxlbSBidXQgbm93IHdpdGhvdXQgYW55IGp1c3RpZmljYXRpb24uIFRoZSBEb3dlciBIb3VzZSBpcyBvY2N1cGllZCBieSB0aGUgYXJteSBmb3Igbm8gb2J2aW91cyByZWFzb24gb3RoZXIgdGhhbiBhIHZlcnkgc2hvcnQgc2NlbmUgd2l0aCBKZXNzIHdobyBoYXMgYSBmZWFyIG9mIGFybWVkIHNvbGRpZXJzLiBXaGlsc3QgTWlzcyBNb3J0aW1lcidzIGJyZWFzdHMgYXJlIHV0dGVybHkgZGVsaWdodGZ1bCwgSSBjb3VsZCBub3Qgc2VlIGhvdyB0aGVpciBkaXNwbGF5IG9uIHNldmVyYWwgb2NjYXNpb25zIG1vdmVkIHRoZSBwbG90IGZvcndhcmQuIFRoZSBkZWxpZ2h0ZnVsbHkgbmFtZWQgTmV0dGxlYmVkIGJlY29tZXMgdGhlIG11bmRhbmUgRG9ic29uLiBUaGUgd29yZCBsaW1pdCBwcmV2ZW50cyBtZSBmcm9tIGNvbnRpbnVpbmcgdGhlIGxpc3QuPGJyIC8+PGJyIC8+VGhlcmUgaXMgYSBzZXF1ZWwgKHdoaWNoIEkgbG9zdCBhbGwgaW50ZXJlc3QgaW4gd2F0Y2hpbmcgYWZ0ZXIgdGhpcyBub25zZW5zZSkgYW5kIEkgd29uZGVyIGlmIHRoZSBjaGFuZ2VzIHdlcmUgbWFkZSB0byBjcmVhdGUgdGhlIGZvbGxvdyBvbiBzdG9yeS4gSXQgaXMgZGlmZmljdWx0IHRvIGltYWdlIHRoYXQgUm9zYW11bmRlIFBpbGNoZXIgd291bGQgaGF2ZSBhcHByb3ZlZCB0aGlzIGdyb3Rlc3F1ZSBwZXJ2ZXJzaW9uIG9mIGhlciBib29rOyBwcmVzdW1hYmx5IHNoZSBsb3N0IGhlciBjb250cm9sIHdoZW4gdGhlIHJpZ2h0cyB3ZXJlIHB1cmNoYXNlZC4pAAAAAAAAAEAK1wYIkwEQkwEixQZQcmV0ZW50aW91cyBjbGFwdHJhcCwgdXBkYXRpbmcgSGVybWFuIE1lbHZpbGxlICghKSwgYWJvdXQgYSB5b3VuZyBtYW4ncyB2YWd1ZWx5IGluY2VzdHVvdXMgcmVsYXRpb25zaGlwIHdpdGggaGlzIGFyaXN0b2NyYXRpYyBtb3RoZXIgZ2V0dGluZyB0cmFuc2ZlcnJlZCB0byBoaXMgbG9uZy1sb3N0IHNpc3RlciB3aG8gaGFzIGJlZW4gcmFpc2VkIGJ5IGd5cHNpZXMuIE9yIHNvbWV0aGluZyBsaWtlIHRoYXQgwpYgbm90IHRoYXQgYW55b25lIHJlYWxseSBjYXJlcyB0byB1bnJhdmVsIGl0cyBtdWx0aS1sYXllcmVkIHBsb3QgZGVja2VkIG91dCB3aXRoIHBvcm5vZ3JhcGhpYyBzZXggc2NlbmVzLCBwc2V1ZG8tc3ltYm9saWMgaW1hZ2VyeSAodGhlIHNpYmxpbmdzIHN3aW1taW5nIGluIGEgcml2ZXIgb2YgYmxvb2QpIGFuZCBvdGhlciBiaXphcnJlIHRvdWNoZXMgKGEgZ3lwc3kgY2hpbGQgcmVwZWF0ZWRseSBpbnN1bHRzIHBhc3NlcnMtYnkgaW4gdGhlIHN0cmVldCB1bnRpbCBzaGUgaXMgYW5vbnltb3VzbHkgYmVhdGVuIHRvIGRlYXRoLCB0aGUgZGVhZmVuaW5nIG11c2ljIG9mIGEgcm9jayBncm91cCB1dGlsaXplZCBpbiB0aGUgZGVtb2xpdGlvbiBvZiBvbGQgYnVpbGRpbmdzKS4gQ29uc2lkZXJpbmcgdGhlIHNvdXJjZSBtYXRlcmlhbCBhbmQgdGhlIHByZXNlbmNlIG9mIENhdGhlcmluZSBEZW5ldXZlICh3aG8gYXQgbGVhc3QgZ2V0cyB0byBiYXRoZSBpbiB0aGUgbnVkZSksIEkgd2FzIGV4cGVjdGluZyBhIGxvdCBtb3JlIGZyb20gdGhpcyBvbmU7IGFwcGFyZW50bHksIHRoZXJlJ3MgYW4gZXZlbiBsb25nZXIgVFYgdmVyc2lvbiBvZiBQT0xBIFggb3V0IHRoZXJlwoUpAAAAAAAAAEAKxQUIlAEQlAEiswVQb3NzaWJseSB0aGUgd29yc3QgZmlsbSB3aXRoaW4gdGhlIGdlbnJlIGluIGV4aXN0ZW5jZS4gSXQgd2FzIGFubm91bmNlZCBhcyBhIGNvbWVkeSwgYnV0IGlzIHNpbXBseSB0cmFnaWNhbGx5IHBhdGhldGljLiBJIGRvbid0IHRoaW5rIGFueW9uZSBjb3VsZCBoYXZlIGFjaGlldmVkIGFueXRoaW5nIG1vcmUgdGVycmlibGUgYW5kIGlycml0YXRpbmcgaWYgdGhleSB3ZXJlIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQgdG8uIEl0IGlzIHRvaWxldCBodW1vdXIgYXQgaXRzIHZlcnkgcG9vcmVzdCwgSSB3b3VsZCBhdm9pZCBldmVuIHdhdGNoaW5nIHRoZSB0cmFpbGVyLiBJIG9ubHkgd2VudCB0byBzZWUgaXQgYmVjYXVzZSBpdCB3YXMgYW5ub3VuY2VkIHRoYXQgaWYgeW91IGxpa2UgTW9udHkgUHl0aG9uLCB5b3UgYXJlIGJvdW5kIHRvIGxvdmUgdGhpcy4gV2hvZXZlciB3cm90ZSB0aGF0IHdhcyBlaXRoZXIgYmlhc2VkIG9yIHNlcmlvdXNseSBkZXJhbmdlZC4gSSBhbSBzdGlsbCBiZXdpbGRlcmVkIGhvdyBvbmUgY2FuIGhvbmVzdGx5IGJlbGlldmUgc3VjaCBhIHN0YXRlbWVudC4gUmFyZWx5IGRvIEkgbGVhdmUgdGhlIGNpbmVtYSwgcmVhbGx5IGl0IHRha2VzIGEgbG90IG9mIGVmZm9ydCBmb3IgYSBmaWxtIHRvIGhhdmUgdGhhdCBlZmZlY3Qgb24gbWU6IHRoaXMgb25lIGRpZCBpdCBpbiBqdXN0IDMwIG1pbnV0ZXMuKQAAAAAAAABACscDCJUBEJUBIrUDUG9vcmx5IGFjdGVkLCBwb29ybHkgd3JpdHRlbiBhbmQgcG9vcmx5IGRpcmVjdGVkLiBTcGVjaWFsIGVmZmVjdHMgYXJlIGNoZWFwLiBCZXN0IHBlcmZvcm1hbmNlIGlzIGJ5IFl2ZXR0ZSBOYXBpciwgYnV0IHRoYXQncyBub3Qgc2F5aW5nIG11Y2guIFN0b3J5IGlzIGEgY29uZnVzaW5nIG1lc3MgYWJvdXQgY29ycG9yYXRlIGdyZWVkIGxlYWRpbmcgdG8gc2Fib3RhZ2Ugb2YgYSBzcGFjZSBzdGF0aW9uIGFuZCBhbiBhdHRlbXB0IHRvIHJlc2N1ZSB0aG9zZSBzdHJhbmRlZCBhYm9hcmQuPGJyIC8+PGJyIC8+IFRoZXJlIGlzIGxpdHRsZSBzdXNwZW5zZSBhbmQgZXZlbiBsZXNzIGFjdGlvbi4gVGhlcmUncyBvbmUgY2FyIGNoYXNlIHRoYXQncyBub3QgYmFkLCBidXQgdGhlIHJlc3Qgb2YgdGhlIG1vdmllIGlzIHNpbXBseSBhIHdhc3RlIG9mIGV2ZXJ5b25lJ3MgdGltZS4pAAAAAAAAAEAKzQkIlgEQlgEiuwlQb2xhIFggaXMgYSBiZWF1dGlmdWwgYWRhcHRpb24gb2YgSGVybWFuIE1lbHZpbGxlJ3MgJ1BpZXJyZTsgb3IsIHRoZSBBbWJpZ3VpdGllcycuIFRoZSBjb21tZW50cyBvbiBoZXJlIHN1cnByaXNlIG1lLCBpdCBtYWtlcyBtZSB3b25kZXIgd2hhdCBoYXMgbGVkIHRvIHRoZSBvdmVyd2hlbG1pbmdseSBuZWdhdGl2ZSByZWFjdGlvbi4gPGJyIC8+PGJyIC8+VGhlIHNob2NrIHZhbHVlIGlzIHRoZSBsZWFzdCBhcHBlYWxpbmcgdGhpbmcgYWJvdXQgdGhpcyBmaWxtIC0gYSBtaW5vciBkZXRhaWwgdGhhdCBoYXMgYmVlbiBibG93biBvdXQgb2YgcHJvcG9ydGlvbi4gVGhlIHN0b3J5IGlzIG9mIFBpZXJyZSdzIGRvd25mYWxsIC0gYW5kIHRoZSBzdWJzZXF1ZW50IGRlc3RydWN0aW9uIG9mIHRob3NlIGFyb3VuZCBoaW0gLSB3aGljaCBpcyBvdmVydGx5IGRlbW9uc3RyYXRlZCBpbiBoaXMgZmVhdHVyZXMsIGRlbWVhbm91ciBhbmQgaWRpb2xlY3QuIFRoZSBkaWFsb2d1ZSBhbmQgc291bmR0cmFjayBzZXQgdGhpcyBmaWxtIGFwYXJ0IGZyb20gYW55IG90aGVyIEkgaGF2ZSBzZWVuLCBhbmQgdHVybiBhIGZ1bmRhbWVudGFsbHkgdHJhZGl0aW9uYWwgc3RvcnlsaW5lIHdpdGggY29udHJvdmVyc2lhbCB0d2lzdHMgaW50byBhbiB1bmZvcmdldHRhYmx5IGVtb3Rpb25hbCBlcGljLjxiciAvPjxiciAvPkkgY2FuJ3Qgc3RyZXNzIGVub3VnaCB0aGUgaW1wb3J0YW5jZSBvZiBkaXNyZWdhcmRpbmcgZXZlcnl0aGluZyB5b3UgaGF2ZSBoZWFyZCBhYm91dCB0aGlzIGZpbG0gYW5kIHdhdGNoaW5nLCBhcyBJIGRpZCwgd2l0aCBhbiBvcGVuIG1pbmQuIFlvdSB3aWxsLCBJIGhvcGUsIGJlIHJld2FyZGVkIGluIHRoZSBzYW1lIHdheSB0aGF0IEkgd2FzLiBJIGZlbHQgb24gZWRnZSBhbmQgbmVydm91cyBmcm9tIGFyb3VuZCB0aGUgaGFsZi1ob3VyIG1hcmssIGhvd2V2ZXIgdGhlIGZpbG0gaXMgZmFyIGZyb20gc2NhcnkgaW4gYW55IHRyYWRpdGlvbmFsIHNlbnNlLiBJdCB3aWxsIGxlYXZlIHlvdSB3aXRoIDEsMDAwIHRob3VnaHRzLCBlYWNoIG9mIHRoZW0gYXQgb25jZSB0cm91Ymxlc29tZSBhbmQgdGhyaWxsaW5nLiBJIGtub3cgSSdtIGd1c2hpbmcgaGVyZSwgYnV0IEkgZmVlbCB0aGUgbmVlZCB0byBtYWtlIHVwIGZvciB0aGUgbmVnYXRpdmUgcGVyY2VwdGlvbiBvZiB0aGlzIGZpbG0uIEl0J3MgdGhlIGJlc3QgSSd2ZSBzZWVuIGFsbCB5ZWFyLikAAAAAAAAAQArXCAiXARCXASLFCFBsZWFzZSwgSWYgeW91J3JlIHRoaW5raW5nIGFib3V0IHJlbnRpbmcgdGhpcyBtb3ZpZSwgZG9uJ3QuIElmIHlvdSdyZSB0aGlua2luZyBvZiB3YXRjaGluZyBhIGNvdXBsZSBvZiBkb3dubG9hZGVkIGNsaXBzLCBkb24ndC4gSWYgSSBoYWQgbXkgd2F5LCBub2JvZHkgd291bGQgZXZlbiBoYXZlIHRvIHJlYWQgdGhpcyBzdW1tYXJ5LjxiciAvPjxiciAvPlRoZSBhY3RpbmcsIGRlc3BpdGUgYmVpbmcgb25lIGZvIHRoZSBoaWdoIHBvaW50cyBvZiB0aGUgbW92aWUgd2FzIHN0aWxsIHBhdGhldGljLiBUaGUgZGlyZWN0b3Igd2FzIHByb2JhbHkgYSBzYWRpc3QuIFRoZSB3aXR0eSBvbmUgbGluZXJzIHdlcmUgc29tZXRoaW5nIHlvdSdkIGV4cGVjdCBmcm9tIGEgcm9vbSBvZiBoaWdobHkgcGFpZCBhbnRpLXNvY2lhbCA3IHllYXIgb2xkcyB0aGF0IGVhdCBwYWludC1jaGlwcyBmb3IgYnJlYWtmYXN0LjxiciAvPjxiciAvPlRoZSBwcm9ibGVtIHdpdGggdGhpcyBtb3ZpZSwgaXMgdGhhdCBpdCB0cmllcyB0byBiZSBhIG1vdmllIGxpa2UgIkV2aWwgRGVhZCAyIihkbyBub3QgdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMgYXNzb2NpYXRlIHRoZXNlIDIgbW92aWVzKSBpbiB0aGF0IGl0J3Mgc28gYmFkIGl0J3MgZnVubnkuIEJ1dCBpdCBhbHNvIHRyaWVzIHRvIGJlIGZ1bm55IGF0IHRoZSBzYW1lIHRpbWUsIGFuZCBmYWlscyBzbyBvdmVyd2hlbG1pbmdseSB0byBkbyBzbywgdGhhdCB5b3VyIHNlbnNlIG9mIGh1bW9yIGlzIGxlZnQgdG9vIGNyaXBwbGVkIHRvIGRvIGFueXRoaW5nIGJ1dCBzZXQgb2ZmIHlvdXIgZ2FnIHJlZmxleCBpbiBhbiBhdHRtZXB0IHRvIHNhdmUgaXRzZWxmLjxiciAvPjxiciAvPkkgY291bGQgZ28gb24gZm9yIG11Y2ggbXVjaCBtb3JlLCBkZXRhaWxpbmcganVzdCBob3cgYXdmdWwgaXQgcmVhbGx5IHdhcywgYnV0IEkgdGhpbmsgaXQgd291bGQgc3RyaXAgbWUgb2YgbXkgd2lsbCB0byBsaXZlIGp1c3QgdG8gY29udGludWUgdG8gdGhpbmsgYWJvdXQgaXQuIElmIHlvdSBuZWVkIG1lLCBJJ2xsIGJlIG9mZiB0cnlpbmcgdG8gYm9pbCBteXNlbGYgc28gdGhhdCBJIG1pZ2h0IGZlZWwgY2xlYW4gYWdhaW4uLi4pAAAAAAAAAEAKmgcImAEQmAEiiAdQZXRlciBPJ1Rvb2xlIGlzIGEgdHJlYXQgdG8gd2F0Y2ggaW4gcm9sZXMgd2hlcmUgdGhlIGxpbmVzIGhlIHNwZWFrcyBhcmUgZ29vZCBhbmQgb2ZmZXIgYSBjaGFuY2UgZm9yIGhpbSB0byBzd2FnZ2VyIGluIGRydW5rZW4gc3R1cG9yLiBUaGUgbG92ZWx5IFN1c2FubmFoIFlvcmsgcHJvdmlkZXMgYSBnb29kIGZvaWwgZm9yIE8nVG9vbGUncyBkcmFtYXRpYyBwcmVzZW5jZS48YnIgLz48YnIgLz5UaGUgZmlsbSBhbGx1ZGVzIHRvIGluY2VzdC0td2l0aG91dCBhIHNpbmdsZSBleHBsaWNpdCBzY2VuZS0tYnV0IGl0IGlzIGFibGUgdG8gZW50ZXJ0YWluIHRoZSB2aWV3ZXIgaW4gaXRzIHJhdWNvdXMgc29jaWFsIGNvbW1lbnRhcnkuIFRob3VnaCB0aGlzIGlzIG5vdCBtYWpvciBmaWxtIGJ5IGFueSByZWNrb25pbmcsIGl0IHdpbGwgYmUgcmVtZW1iZXJlZCBmb3IgaXRzIGVudGVydGFpbmluZyBwZXJmb3JtYW5jZXMuIDxiciAvPjxiciAvPkV2ZW4gWW9yaywgc2lnbmluZyB0aGUgcGFwZXJzIGF0IHRoZSBlbmQsIGlzIGEgdHJlYXQgdG8gd2F0Y2gsIGV4dWRpbmcgdHJhZ2VkeSBzaWxlbnRseS4gVGhlIHBvc3NpYmxlIHdlYWtuZXNzIGhlcmUgaXMgVGhvbXBzb24ncyBsYWlkLWJhY2sgZGlyZWN0aW9uLiBCdXQgdGhlIGZpbG0gZmxvYXRzIGJlY2F1c2Ugb2YgdGhlIGFjdG9ycyBhbmQgdGhlIHNjcmlwdC48YnIgLz48YnIgLz5JIHNhdyB0aGUgZmlsbSB0d2ljZSBvdmVyIGEgcGVyaW9kIG9mIDIwIHllYXJzLS1vbiBib3RoIG9jY2FzaW9ucyB3aXRoIHRoZSBuYW1lICJCcm90aGVybHkgbG92ZSIuICJDb3VudHJ5IGRhbmNlIiBpcyBhIHJhdGhlciBmYXJjaWNhbCBhbmQgaW5hcHByb3ByaWF0ZSB0aXRsZSBmb3IgdGhpcyBtb3ZpZSwgd2hlcmV2ZXIgaXQgd2FzIHJlbGVhc2VkIGFzIHN1Y2guKQAAAAAAAABACoUCCJkBEJkBIvMBUGVvcGxlLCBwbGVhc2UgZG9uJ3QgYm90aGVyIHRvIHdhdGNoIHRoaXMgbW92aWUhIFRoaXMgbW92aWUgaXMgYmFkISBJdCdzIHRvdGFsbHkgd2FzdGUgb2YgdGltZS4gSSBkb24ndCBzZWUgYW55IHBvaW50IGhlcmUuIEl0J3MgYSBTdHVwaWQgZmlsbSB3aXRoIGxvdXN5IHBsb3QgYW5kIHRoZSBhY3RpbmcgaXMgcG9vci4gSSByYXRoZXIgZ2V0IG15c2VsZiBiZWF0ZW4gdGhhbiB3YXRjaCB0aGlzIG1vdmllIGV2ZXIgYWdhaW4uKQAAAAAAAABACrsCCJoBEJoBIqkCT25lIG9mIERpc25leSdzIGJlc3QgZmlsbXMgdGhhdCBJIGNhbiBlbmpveSB3YXRjaGluZyBvZnRlbi4geW91IG1heSBlYXNpbHkgZ3Vlc3MgdGhlIG91dGNvbWUsIGJ1dCB3aG8gY2FyZXM/IGl0cyBqdXN0IHBsYWluIGZ1biBlc2NhcGUgZm9yIDEgaG91ciBmb3J0eS10d28gbWludXRlcy4gYW5kIGFmdGVyIGFsbCB3YXNuJ3QgbW92aWVzIG1lYW50IHRvIGdldCBhd2F5IGZyb20gcmVhbGl0eSBmb3IganVzdCBhIHNob3J0IHRpbWUgYW55d2F5PyBUaGUgY2FzdCBzcGFya2xlcyB3aXRoIGRlbGlnaHQuIC1tYWdpY3RyYWluKQAAAAAAAABACoQKCJsBEJsBIvIJT25jZSBiaWcgYWN0aW9uIHN0YXIgd2hvIGZlbGwgb2ZmIHRoZSBmYWNlIG9mIHRoZSBlYXJ0aCBlbmRzIHVwIGluIGEgc21hbGwgdG93biB3aXRoIGEgcHJvYmxlbSB3aXRoIGRydWcgZGVhbGVycyBhbmQgYSBkZWFkIGJvZHkgb2YgYSBmZWRlcmFsIGFnZW50LiBSZXVuaXRpbmcgd2l0aCBzb21lIGZvcm1lciBjby1zdGFycyB0byBjbGVhbiB1cCB0aGUgdG93bi48YnIgLz48YnIgLz5Mb3cga2V5LCBvZnRlbiB0byB0aGUgcG9pbnQgb2YgYmxhbmRuZXNzLCAiYWN0aW9uIiBjb21lZHkgbW9zdGx5IGp1c3QgZG9lc24ndCB3b3JrLiBQYXJ0IG9mIHRoZSBwcm9ibGVtIGlzIHRoZSBjYXN0aW5nIENocmlzIEtsaWVuIGFzIGEgZm9ybWVyIGFjdGlvbiBoZXJvLiBoZSdzIG5vdCBiYWQsIGJ1dCBoZSdzIHJlYWxseSBub3QgYmVsaWV2YWJsZSBhcyBzb21lIG9uZSB3aG8gd2FzIHRha2VuIHRvIGJlIGEgdG91Z2ggZ3V5LiBBcyBJIHNhaWQgaGUncyBub3QgYmFkLCBoZSdzIGp1c3QganVzdCBtaXNjYXN0IGZvciB3aGF0IGhpcyBiYWNrIHN0b3J5IGlzLiBUaGUgcmVhbCBwcm9ibGVtIGhlcmUgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBzY3JpcHQsIHdoaWNoIHJlYWxseSBpc24ndCBmdW5ueSBhbmQgc2VlbXMgYXJ0aWZpY2lhbCBhdCB0aW1lcywgYW5kIHRoZSBkaXJlY3Rpb24gd2hpY2ggaXMgcGVkZXN0cmlhbiB0byB0aGUgcG9ydCBvZiBkdWxsbmVzcy4gVGhlcmUgaXMgbm8gbGlmZSBpbiB0aGUgd2F5IHRoaW5ncyBhcmUgc2V0IHVwLiBJdHMgYXMgaWYgdGhlIGRpcmVjdG9yIGhhZCBhIGxpc3Qgb2Ygc2hvdHMgYW5kIHdlbnQgYnkgdGhhdCBsaXN0LiBJdCBtYWtlcyBmb3IgYW4gdW4tZW5nYWdpbmcgZmlsbS4gQW5kIHlldCB0aGUgZmlsbSBvY2Nhc2lvbmFsbHkgc3ByaW5ncyB0byBsaWZlLCBzdWNoIGFzIHRoZSBpbiB0aGUgZmluYWwgc2hvdyBkb3duIHRoYXQgZW5kcyB0aGUgZmlsbS4gVGhhdCBzZXF1ZW5jZSB3b3JrcywgYnV0IGJlY2F1c2UgdGhlIGVhcmxpZXIgcGFydHMgb2YgdGhlIGZpbG0gZmxvdW5kZXJlZCBpdHMgZHJhaW5lZCBvZiBtdWNoIG9mIGl0cyBwb3dlci48YnIgLz48YnIgLz5JIGNhbid0IHJlYWxseSByZWNvbW1lbmQgdGhlIGZpbG0uIEl0cyB3b3J0aCBhIHNob3QgaWYgeW91J3JlIGEgZmFuIG9mIHRoZSBhY3RvcnMgb3IgYXJlIGEgaHVnZSBmYW4gb2YgaW5kZXBlbmRlbnQgY2luZW1hIGluIGFsbCBpdHMgZm9ybXMsIGJ1dCBvdGhlcndpc2UgdGhpcyBpcyBqdXN0IGEgZGlzYXBwb2ludG1lbnQuKQAAAAAAAABACt8ZCJwBEJwBIs0ZT2theSwgeW91IGhhdmU6PGJyIC8+PGJyIC8+UGVuZWxvcGUgS2VpdGggYXMgTWlzcyBIZXJyaW5nYm9uZS1Ud2VlZCwgQi5CLkUuIChCYWNrYm9uZSBvZiBFbmdsYW5kLikgU2hlJ3Mga2lsbGVkIG9mZiBpbiB0aGUgZmlyc3Qgc2NlbmUgLSB0aGF0J3MgcmlnaHQsIGZvbGtzOyB0aGlzIHNob3cgaGFzIG5vIGJhY2tib25lITxiciAvPjxiciAvPlBldGVyIE8nVG9vbGUgYXMgT2wnIENvbG9uZWwgQ3JpY2tldCBmcm9tIFRoZSBGaXJzdCBXYXIgYW5kIG5vdyB0aGUgZW1ibGF6ZXJlZCBMb3JkIG9mIHRoZSBNYW5vci48YnIgLz48YnIgLz5Kb2FubmEgTHVtbGV5IGFzIHRoZSBlbnN3ZWF0ZXJlZCBMYWR5IG9mIHRoZSBNYW5vciwgMjAgeWVhcnMgeW91bmdlciB0aGFuIHRoZSBjb2xvbmVsIGFuZCAyMCB5ZWFycyBwYXN0IGhlciBvd24gcHJpbWUgYnV0IHN0aWxsIGdsYW1vdXJvdXMgKEJyaXQgc3BlbGxpbmcsIG5vdCBtaW5lKSBlbm91Z2ggdG8gaGF2ZSBhIHRveS1ib3kgb24gdGhlIHNpZGUuIEl0J3MgYWxyaWdodCwgdGhleSBoYXZlIENvbC4gQ3JpY2tldCdzIGZ1bGwga25vd2xlZGdlIGFuZCBjb25zZW50ICh0aGV5IGd1eSBldmVuIGNvbWVzICdyb3VuZCBmb3IgQ2hyaXN0bWFzISkgU3RpbGwsIHNoZSdzIGNvbnNpZGVyYXRlIG9mIHRoZSBjb2xvbmVsIGVub3VnaCB0byBoYXZlIHNhaWQgdG95LWJveSBoZXIgb3duIGFnZSAod2hhdCBhIGdhbCEpPGJyIC8+PGJyIC8+RGF2aWQgTWNDYWxsdW0gYXMgc2FpZCB0b3ktYm95LCBlcXVhbGx5IGFzIHBvaW50bGVzc2x5IGdsYW1vdXJvdXMgYXMgaGlzIHNxdWVlemUuIFBpbGNoZXIgY291bGRuJ3QgY29tZSB1cCB3aXRoIGFueSBjb3ZlciBmb3IgaGltIHdpdGhpbiB0aGUgc3RvcnksIHNvIHNoZSBnYXZlIGhpbSBhIGh1c2gtaHVzaCBqb2IgYXQgdGhlIENpcmN1cy48YnIgLz48YnIgLz5hbmQgZmluYWxseTo8YnIgLz48YnIgLz5TdXNhbiBIYW1wc2hpcmUgYXMgTWlzcyBQb2xvbmlhIFRlYWN1cHMsIFZlbmVyYWJsZSBIZWFkbWlzdHJlc3Mgb2YgdGhlIFZlbmVyYWJsZSBHaXJscycgQm9hcmRpbmctU2Nob29sLCBzZXJ2aW5nIHRlYSBpbiBoZXIgb2ZmaWNlIHdpdGggYSBkYXNoIG9mIGRlZXAsIHBvaWduYW50IGFkdmljZSBmb3IgbGlmZSBpbiB0aGUgb3V0c2lkZSB3b3JsZCBqdXN0IGJlZm9yZSBncmFkdWF0aW9uLiBIZXIgYmVzdCBiaXQgb2YgYWR2aWNlOiAiSSd2ZSBvbmx5IGJlZW4gdG8gTmFuY2hlcnJvdyAodGhlIGxvY2FsIFN0YXRlbHkgSG9tZSBvZiBFbmdsYW5kKSBvbmNlLiBJIHRob3VnaHQgaXQgd2FzIHZlcnkgYmVhdXRpZnVsIGJ1dCwgc29tZWhvdywgbm90IHBhcnQgb2YgdGhlIHJlYWwgd29ybGQuIiBXZWxsLCB3ZSBjYW4ndCBzYXkgdGhleSBkaWRuJ3Qgd2FybiB1cy48YnIgLz48YnIgLz5BaCwgU3VzYW4gLSB0aW1lIHdhcywgeW91ciBjaGFyYWN0ZXIgd291bGQgaGF2ZSBiZWVuIHJ1bm5pbmcgdGhlIHdob2xlIHNob3cuIFRoZXkgZG9uJ3Qgd3JpdGUgJ2VtIGxpa2UgdGhhdCBhbnkgbW9yZS4gT3VyIGxvc3MsIG5vdCB5b3Vycy48YnIgLz48YnIgLz5TbyAtIHdpdGggYSBjYXN0IGFuZCBzZXR0aW5nIGxpa2UgdGhpcywgeW91IGhhdmUgdGhlIHJlLW1ha2luZ3Mgb2YgIkJyaWRlc2hlYWQgUmV2aXNpdGVkLCIgcmlnaHQ/PGJyIC8+PGJyIC8+V3JvbmchIFRoZXkgdG9vayB0aGVzZSAxLWRpbWVuc2lvbmFsIHN1cHBvcnRpbmcgcm9sZXMgYmVjYXVzZSB0aGV5IHBhaWQgc28gd2VsbC4gQWZ0ZXIgYWxsLCBhY3RpbmcgaXMgb25lIG9mIHRoZSBvbGRlc3QgdGVtcC1qb2JzIHRoZXJlIGlzIChZT1UgbmFtZSBhbm90aGVyISk8YnIgLz48YnIgLz5GaXJzdCB3YXJuaW5nIHNpZ246IGxvdHMgYW5kIGxvdHMgb2YgYmFja2xpZ2h0aW5nLiBUaGV5IGdldCBhcm91bmQgaXQgYnkgc2hvb3Rpbmcgb3V0ZG9vcnMgLSAiaGV5LCBpdCdzIGp1c3QgdGhlIHN1bmxpZ2h0ISI8YnIgLz48YnIgLz5TZWNvbmQgd2FybmluZyBzaWduOiBMZWFkaW5nIExhZHkgY3JpZXMgYSBsb3QuIFdoZW4gbm90IGNyeWluZywgaGVyIGV5ZXMgYXJlIG1vaXN0LiBUaGF0J3MgdGhlIGxhdyBvZiByb21hbmNlIG5vdmVsczogTGVhZGluZyBMYWR5IGlzICJkZXd5LWV5ZWQuIjxiciAvPjxiciAvPkhlbmNlZm9ydGgsIExlYWRpbmcgTGFkeSBzaGFsbCBiZSBrbm93biBhcyBMLkwuPGJyIC8+PGJyIC8+VGhpcmQgd2FybmluZyBzaWduOiBMLkwuIGFjdHVhbGx5IGhhcyBzdGFycyBpbiBoZXIgZXllcyB3aGVuIHNoZSdzIGluIGxvdmUuIFN0aWxsLCBJJ2xsIGdpdmUgRW1pbHkgTW9ydGltZXIgYW4gYXdhcmQganVzdCBmb3IgaGF2aW5nIHRvIGFjdCB3aXRoIHRoYXQgc3BvdGxpZ2h0IGluIGhlciBleWVzIChJIHdvbmRlciAuIGRpZCB0aGV5IHVzZSBjb250YWN0cz8pPGJyIC8+PGJyIC8+QW5kIGxhc3RseSwgZm91cnRoIHdhcm5pbmcgc2lnbjogbm8gb24tc2NyZWVuIGZlbWFsZSBjaGFyYWN0ZXIgaXMgIk1ycy4iIFNoZSdzIGVpdGhlciAiTWlzcyIgb3IgIkxhZHkuIjxiciAvPjxiciAvPldoZW4gYWxsIHdhcyBzYWlkIGFuZCBkb25lLCBJIHN0aWxsIGNvdWxkbid0IHRlbGwgeW91IHdobyB3YXMgcHVyc3Vpbmcgd2hvbSBhbmQgd2h5LiBJIGNvdWxkbid0IGV2ZW4gdGVsbCB5b3Ugd2hhdCB3YXMgc2FpZCBhbmQgZG9uZS48YnIgLz48YnIgLz5UbyBzdW0gdXA6IHRoZXkgYWxsIGxpdmUgdGhyb3VnaCBXb3JsZCBXYXIgSUkgd2l0aG91dCBhbnl0aGluZyBoYXBwZW5pbmcgdG8gdGhlbSBhdCBhbGwuPGJyIC8+PGJyIC8+T0ssIGF0IHRoZSBlbmQsIEwuTC4gZmluZHMgc2hlJ3MgbG9zdCBoZXIgcGFyZW50cyB0byB0aGUgSmFwYW5lc2UgcHJpc29uIGNhbXBzIGFuZCBiYWJ5IHNpcyBjb21lcyBob21lIGNhdGF0b25pYy4gTWVhbndoaWxlICh0aGVyZSdzIGFsd2F5cyBhICJtZWFud2hpbGUsIikgc29tZSB5b3VuZyBndXkgTC5MLiBoYWQgYSBjcnVzaCBvbiAod2hlbiwgSSBkb24ndCBrbm93KSBjb21lcyBob21lIGZyb20gc29tZSB3YXJ0aW1lIHRvdWdoIHNwb3QgYW5kIGlzIGZvdW5kIGxpdmluZyBvbiB0aGUgc3RyZWV0IGJ5IExhZHkgb2YgdGhlIE1hbm9yIChtdXN0IGJlIHNvbWUgc3RyZWV0IGlmIFNIRSdzIGdvaW5nIHRvIGZpbmQgaGltIHRoZXJlLikgQm90aCB3YXIgY2FzdWFsdGllcyBhcmUgd2hpc2tlZCBhd2F5IHRvIHJlY292ZXIgYXQgTmFuY2hlcnJvdyAoU09NRUJPRFkgaGFzIHRvIGJlICJ3aGlza2VkIGF3YXkiIFNPTUVXSEVSRSBpbiB0aGVzZSByb21hbmNlIHN0b3JpZXMhKTxiciAvPjxiciAvPkdyZWF0IGRyYW1hLikAAAAAAAAAQArJCQidARCdASK3CU9rYXksIEknbGwgc2F5IGl0LiBUaGlzIG1vdmllIG1hZGUgbWUgbGF1Z2ggc28gaGFyZCB0aGF0IGl0IGh1cnQuIFRoaXMgc3RhdGVtZW50IG1heSBvZmZlbmQgc29tZSBvZiB5b3Ugd2hvIG1heSB0aGluayB0aGF0IHRoaXMgbW92aWUgaXMgbm90aGluZyBtb3JlIHRoYW4gYSB3YXN0ZSBvZiBmaWxtLiBCdXQgdGhlIHRoaW5nIHRoYXQgbW9zdCBwZW9wbGUgZG9uJ3QgZ2V0IGlzIHRoYXQgdGhpcyBtb3ZpZSB3YXMgaW50ZW5kZWQgdG8gYmUgYmFkIGFuZCBjaGVlenkuIEkgbWVhbiwgZGlkIHBlb3BsZSBhY3R1YWxseSB0aGluayB0aGF0IGEgbW92aWUgYWJvdXQgYSBraWxsZXIgc25vd21hbiB3YXMgaW50ZW5kZWQgdG8gYmUgYSBtYXN0ZXJwaWVjZT8gSnVzdCBsb29rIGF0IHRoZSAic2NhcnkiIGhvbG9ncmFtIG9uIHRoZSBqYWNrZXQgb2YgdGhlIG1vdmllIGFuZCB5b3UnbGwgZmluZCB5b3VyIGFuc3dlci4gSW5zdGVhZCwgbGlrZSB0aGUgb3JpZ2luYWwgSmFjayBGcm9zdCAod2hpY2ggSSB0aG91Z2h0IHdhcyBqdXN0IGFzIGZ1bm55KSwgdGhpcyBtb3ZpZSB0dXJuZWQgb3V0IHRvIGJlIGEgc2lkZS1zcGxpdHRpbmcgam91cm5leSBpbnRvIHRoZSBkZXB0aHMgb2YgY29ybnkgZGlhbG9ndWUsIGJhZCBvbmUgbGluZXJzIGFuZCBob3JyaWJsZSBzcGVjaWFsIGVmZmVjdHMuIEFuZCBpdCdzIGFsbCBtYWRlIHRvIGRlbGl2ZXIgbGF1Z2h0ZXIgdG8gdXMgdmlld2Vycy4gSXQgY2VydGFpbmx5IHdvcmtlZCBmb3IgbWUuPGJyIC8+PGJyIC8+Rm9yIGV4YW1wbGU6IEFubmUgVGlsZXIgKHRvIGhlciB0cm91YmxlZCBodXNiYW5kKTogV2hhdCBtYWtlcyB5b3UgZnJvd24gc28gaGVhdmlseSBkYXJsaW5nPzxiciAvPjxiciAvPklmIHRoYXQgY2h1bmsgb2YgZGlhbG9ndWUgZG9lc24ndCBtYWtlIHlvdSBsYXVnaCwgdGhlbiB5b3UgaGF2ZSBzZXJpb3VzIGlzc3Vlcy4gV2hvIGluIHRoZWlyIHJpZ2h0IG1pbmQgd291bGQgdXR0ZXIgdGhvc2Ugd29yZHMgaW4gcmVhbCBsaWZlPyBPZiBjb3Vyc2UsIG5vIG9uZSBiZWNhdXNlIGl0IHdhcyBtZWFudCB0byBzb3VuZCByaWRpY3Vsb3VzISBKdXN0IHRha2Ugb25lIHZpZXdpbmcgb2YgdGhpcyBtb3ZpZSB3aXRoIGFuIG9wZW4gbWluZCBhbmQgbG93IGV4cGVjdGF0aW9ucywgYW5kIGhvcGVmdWxseSB5b3UnbGwgc2VlIHdoYXQncyBzbyBkYW1uIGZ1bm55IGFib3V0IEphY2sgRnJvc3QgMi4pAAAAAAAAAEAKtQUIngEQngEiowVPa2F5ICwgc28gdGhpcyB3YXNudCB3aGF0IEkgd2FzIGV4cGVjdGluZy4gSSByZW50ZWQgdGhpcyBmaWxtIGp1c3QgdG8gc2VlIGhvdyBpdCB3b3VsZCBiZSBzaW5jZSBJIHdhbnQgdG8gc2VlIHRoZSBmaXJzdCBvbmUgYW55d2F5LiBCdXQgLCB0aGlzIGZpbG0gaGFkIEItbW92aWUgYWxsIG92ZXIgaXQuIEJ1dCB3aGVuIEkgd2F0Y2hlZCBpdCBJIHJlYWxpemVkIHRoYXQgaXQgd2FzIHZlcnkgZnVubnkuIEZvciB0aGUgZmlyc3QgMzAgbWludXRlcyBJdCB3YXMganVzdCBob3cgdGhlIHNub3dtYW4gd2FzIGtpaWxpbmcgcGVvcGxlIGFuZCBvbmUgbWFuIGxvc2luZyBoaXMgc2FuaXR5LiBCdXQgLCB0aG9zZSBmaXJzdCBmZXcgbWludXRlcyBoYWQgc29tZSBmdW5ueSBvbmUgbGluZXJzIGluIGl0LiBXaGVuIEhlIHRocm93cyB1cCB0aGUgZmlyc3Qgb2YgaGlzIGxpdHRsZSBtaW5pb25zIEkga25ldyB0aGlzIHdvdWxkIGJlIHZlcnkgdmVyeSBmdW5ueS4gVGhleSBhbGwgYWN0IGxpa2UgdGhlIGdyZW1saW5zIGluIHRoZSBuaW50ZWVuIGVpZ2h0eSBmb3VyIGhpdCBncmVtbGlucyB0aGF0IGl0IG1hZGUgaXQgbG9vayBsaWtlIGl0IHdhcyBzcG9vZmluZyBpdCBhbmQgbWFkZSBtZSBmb3JnZXQgaXQgd2FzIGEgQi1tb3ZpZS4gU28gaWYgeW91IGxpa2UgdG8gbGF1Z2ggcmVudCB0aGlzIG9uZS4pAAAAAAAAAEAKgxEInwEQnwEi8RBPaCBteS4uLiBiYWQgY2xvdGhpbmcsIHdvcnNlIHN5bnRoIG11c2ljIGFuZCB0aGUgd29yc3Q6IERhdmlkIEhhc3NlbGhvZmYuIFRoZSA4MCdzIGFyZSBiYWNrIHdpdGggdmVuZ2VhbmNlIGluIFdpdGNoZXJ5LCBhbiBBbWVyaWNhbi1JdGFsaWFuIGNvLXByb2R1Y3Rpb24sIGhlbG1lZCBieSBpbmZhbW91cyBKb2UgJ0QnQW1hdG8gb24gdGhlIHByb2R1Y3Rpb24gc2lkZSBhbmQgc2hvcnQtY2FyZWVyZWQgZGlyZWN0b3IgKHRoYW5rIGhlYXZlbnMgZm9yIHNtYWxsIG1pcmFjbGVzKSBGYWJyaXppbyBMYXVyZW50aSBkaXJlY3RpbmcgLiBNYXJrZXRlZCBhcyBhIGtpbmQgb2Ygc2VxdWVsIHRvIFNhbSBSYWltaSdzIEV2aWwgRGVhZCBzZXJpZXMgaW4gSXRhbHkgKHRoYXQgd2FzIGR1YmJlZCAiTGEgQ2FzYSIgaW4gdGhlcmUpLCBXaXRjaGVyeSBkZWxpdmVycyBzb21lIG1vZGVzdCBnb3JlIGdyb2NlcmllcyBhbmQgYmFkIGFjdGluZy48YnIgLz48YnIgLz5BIG1peCBvZiBnaG9zdCBzdG9yeSwgcG9zc2Vzc2lvbnMgYW5kIHdpdGNoY3JhZnQsIHRoZSBmaWxtIGJvdW5jZXMgY2x1ZWxlc3MgZnJvbSBzY2VuZSB0byBhbm90aGVyIHdpdGhvdXQgbGV0dGluZyBzb21lIHNlcmlvdXNseSB3b29kZW4gYWN0b3JzIGFuZCBoaWxhcmlvdXMgZGF5IGFuZCBuaWdodCBtaXgtdXBzIHNsb3cgaXQncyBwcm9ncmVzcyB0byBleHBlY3RhYmxlIGVuZGluZywgdG9wcGVkIHdpdGggc29tZSBzZXJpb3VzIFdURiBzdXJwcmlzZSBjbGltYXguIChJIGp1c3QgbG92ZSB0aGUgbG9vayBvbiBoZXIgZmFjZS4uLikgU3VycHJpc2luZ2x5IExhdXJlbnRpIG1hbmFnZXMgdG8gZ2F0aGVyIHNvbWUgc3VzcGVuc2UgYW5kIGFpciBvZiBtYWxpY2UgaW4gZmV3IC0gdmVyeSBmZXcgLSBzY2VuZXM7IHVubHVja2lseSBmb3IgaGltLCB0aGVzZSBmZXcgZ2xpbXBzZXMgb2YgbWlsZCBtb3ZpZSBtYWdpYyBnbyBkb3duIHF1aWNrbHkgYW5kIGVmZmVjdGl2ZWx5LjxiciAvPjxiciAvPlRoZSBwbHVzIHNpZGVzIGFyZSBleHBlcmllbmNlZCwgd2hlbiB0aGUgZ29yZSBoaXRzIHRoZSBmYW4uIFRoaXMgZGVwYXJ0bWVudCBpcyBxdWl0ZSBlZmZlY3RpdmUgYW5kIGVudGVydGFpbmluZyBpbiB0aGF0IGNsYXNzaWMgbGF0ZXggYW5kIHJlZCBwYWludCBzdHlsZSBvZiB0aGUgODAncyBJdGFsby1nb3JlLCB3aGVuIHRoaW5ncyB3ZXJlIG1hZGUgMTAwJSBoYW5kLW1hZGUgYW5kIGFzIHNob2NraW5nbHkgYW5kIHZpdmlkIGFzIG1vZGVzdCBidWRnZXRzIGNvdWxkIGFsbG93LiBJIGNvdWxkIG9ubHkgd2F0Y2ggd2l0aCBzYWRpc3RpYyBnbGVlIGFuZCBmZXcgbGF1Z2h0ZXJzIGFsbCB0aGUgb3Zlci10aGUtdG9wIHdheXMgdGhhdCBvYm5veGlvdXMgY2hhcmFjdGVycyAoYW5kIGFjdG9ycykgZ290IG1hbmdsZWQgYW5kIG1pc3VzZWQsIG9uZSBieSBvbmUuIEkgb25seSBmZWx0IHNvcnJ5IGZvciBMaW5kYSBCbGFpciwgd2hvIGFwcGFyZW50bHkgaGF2ZW4ndCBiZWVuIGxldCB0byB0cnkgYW55IG90aGVyIHRoYW4gdGhhdCBnb29kIG9sZCBwb3NzZXNzZWQgZ2lybCAvIHdvbWFuIHJvbGUgZXZlciBpbiBoaXMgY2FyZWVyLCBvciBzbyBpdCBsb29rcyBsaWtlIHdoZW4gY2hlY2tpbmcgb3V0IGhpcyBmaWxtb2dyYXBoeS48YnIgLz48YnIgLz5XZWxsLCBmb2xrcyAtIG5vdCBtdWNoIG1vcmUgdG8gdGVsbCwgYW5kIGV2ZW4gbGVzcyB0byB0ZWxsIGhvbWUgYWJvdXQuIERvbid0IGV4cGVjdCB0b28gbXVjaCB3aGVuIHNwZW5kaW5nIHNvbWUgcmFpbnkgYWZ0ZXJub29uIHdpdGggdGhpcywgYW5kIHByb2JhYmx5IHlvdSdsbCBleHBlcmllbmNlIGF0IGxlYXN0IHNvbWUgbWlsZCBmdW4uIEl0IGFsc28gaGVscHMgaWYgeW91ciByb3R0ZW4gbGl0dGxlIGhlYXJ0IHBvdW5kcyBpbiB0aGUgYmVhdCBvZiA4MCdzIGV1cm8gZ29yZSBob3Jyb3IuIEFuZCBzcGVha2luZyBvZiBoZWFydHMgLSBldmVyeSBtb3ZpZSB0aGF0IGhhcyBEYXZpZCBIYXNzZWxob2ZmIGdldHRpbmcgc2tld2VyZWQgYnkgYSBzaXplYWJsZSBtZXRhbCBvYmplY3QgYW5kIGJsZWVkaW5nIGhlYXZpbHkgYXJvdW5kIHRoZSByb29tIGFuZCBjb3JyaWRvcnMsIE1VU1QgaGF2ZSBpdCdzIG9uZSBvbiB0aGUgcmlnaHQgcGxhY2UuPGJyIC8+PGJyIC8+VGhpcyBpcyBteSB0cnV0aCAtIHdoYXQgaXMgeW91cnM/KQAAAAAAAABACu8DCKABEKABIt0DT2ggR29kLHdoYXQgYW4gaWRpb3RpYyBtb3ZpZSFJbmNyZWRpYmx5IGNoZWFwIHdpdGggZmFrZSBzcGVjaWFsIGVmZmVjdHModGhlIGNyZWF0dXJlIGlzIHBsYXllZCBieSBvbmUgZ3V5IGluIGxhbWUgY29zdHVtZSlhbmQgc3R1cGlkIHBsb3QuQWxsIGRpYWxvZ3VlcyBhcmUgdW5iZWxpZXZhYmx5IGJhZCBhbmQgdGhlc2UgYWN0b3JzKEhBIUhBIUhBISkuLi50aGV5J3JlIHNpbXBseSBsdWRpY3JvdXMuRm9yIGV4YW1wbGUgSSBoYXZlIG5ldmVyIHNlZW4gc28gYW5ub3lpbmcgY2hhcmFjdGVycyBsaWtlIGluIHRoaXMganVuayh0aGVzZSBkdW1iIGtpZHMgb3IgcHJlZ25hbnQgd29tYW4gd2l0aCBoaXMgaHVzYmFuZCBhbmQgbWFueSBtb3JlKS5BbGwgaW4gYWxsLHRoaXMgaXMgYSBncmVhdCBlbnRlcnRhaW5tZW50IGlmIHlvdSdyZSBkcnVuay5Bdm9pZCBpdCBsaWtlIHRoZSBwbGFndWUuQW0gSSBkcnVuaz9JIGRvbid0IHRoaW5rIHNvLi4uKQAAAAAAAABACrsHCKEBEKEBIqkHT2YgYWxsIHRoZSBmaWxtcyBJIGhhdmUgc2VlbiwgdGhpcyBvbmUsIFRoZSBSYWdlLCBoYXMgZ290IHRvIGJlIG9uZSBvZiB0aGUgd29yc3QgeWV0LiBUaGUgZGlyZWN0aW9uLCBMT0dJQywgY29udGludWl0eSwgY2hhbmdlcyBpbiBwbG90LXNjcmlwdCBhbmQgZGlhbG9nIG1hZGUgbWUgY3J5IG91dCBpbiBwYWluLiAiSG93IGNvdWxkIEFOWU9ORSBjb21lIHVwIHdpdGggc29tZXRoaW5nIHNvIGNyYXBweSI/IEdhcnkgQnVzZXkgaXMga25vdyBmb3IgaGlzICJCIiBtb3ZpZXMsIGJ1dCB0aGlzIGlzIGEgc3VyZSAiVyIgbW92aWUuIChXPXdhc3RlKS48YnIgLz48YnIgLz5UYWtlIGZvciBleGFtcGxlOiBhYm91dCB0d28gZG96ZW4gRkJJICYgbG9jYWwgbGF3IG9mZmljZXJzIHN1cnJvdW5kIGEgdHJhaWxlciBob3VzZSB3aXRoIGEgamVlcCB3YWdvbmVlci4gSW5zaWRlIHRoZSBqZWVwIGlzIE1BIGFuZCBpcyAiY29uZnVzZWQiIGFzIHRvIHdoeSBhbGwgdGhlIGNvcHMgYXJlIGFib3V0LiBXaXRoaW4gc2Vjb25kcyBhIGh1Z2UgZ3VuIGJhdHRsZSBlbnN1ZXMsIE1BIGJlaW5nIGtpbGxlZCBzdHJhaWdodCBvZmYuIFRoZSBjb3BzIGJsYXN0IGF3YXkgYXQgdGhlIGplZXAgd2l0aCBnYXJ5IGFuZCBjb21wYW55IGJsYXN0aW5nIGF3YXkgYXQgdGhlbS4gVGhlIGNvcHMgZmFsbCBsaWtlIGRvbWlub2VzIGFuZCB0aGUgamVlcCB3aXRoIEdhcnkgZHJpdmVzIGFyb3VuZCBpbiBjaXJjbGVzIGFuZCBhcmUgbm90IGhpdCBieSBvbmUgc2luZ2xlIGJ1bGxldC9wZWxsZXQuIE1BIGlzIGtpbGxlZCBhbmQgZ2FyeSBzZWVtcyB0byBub3QgdG8gaGF2ZSBub3RpY2VkLWRhbW4gdGhhdCBndXkgaXMgdG91Z2guIFRydWx5IGEgbWlyYWNsZSwgbm90IHNpbmNlIHRoZSBzaXgtc2hvb3RlciBoZWxkIDMwMCBidWxsZXRzIGhhcyB0aGVyZSBiZWVuIHN1Y2ggYSBtaXJhY2xlLikAAAAAAAAAQAqKBgiiARCiASL4BU9LLCBzbyB0aGlzIGZpbG0gaXMgd2VsbCBhY3RlZC4gSXQgaGFzIGdvb2QgZGlyZWN0aW9uIGJ1dCB0aGUgc2ltcGxlIGZhY3QgaXMgdGhhdCBpdCB1bmRlcm1pbmVzIHdoYXQgYWxsIGdheSBhbmQgbGVzYmlhbiBwZW9wbGUgaGF2ZSBiZWVuIGZpZ2h0aW5nIGZvciBhbGwgdGhlc2UgeWVhcnMuIFRoZSBzdHJhaWdodCBtYW4gImRlY2lkaW5nIHRvIGJlIGdheSIgYW5kIHRoZSBnYXkgbWFuICJEZWNpZGluZyB0byBiZSBzdHJhaWdodCIgSSBkaWQgZW5qb3kgaXQgdXAgdW50aWwgdGhlIGxhc3QgMjAgbWludXRlcywgYWZ0ZXIgdGhhdCBpIGdvdCByZWFsbHkgb2ZmZW5kZWQuIEFzIHdoYXQgdXN1YWxseSBoYXBwZW5zIGluIHRoZXNlIGZpbG1zIHRoZSBzdHJhaWdodCBhY3RvcnMgcGxheSB0aGUgbWFpbiBwYXJ0cyBhbmQgdGhlIG91dCBnYXkgYWN0b3JzIHBsYXkgdGhlIHNlY29uZGFyeSBzdHJhaWdodCByb2xlcy4gVGhlIGxlYWRzIGFyZSBwbGF5ZWQgYnkgaGFuZHNvbWUgbWVuIGJ1dCBkb24ndCBsZXQgdGhhdCBkaXN0cmFjdCB5b3UgZnJvbSB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgYSBhIGZpbG0gdGhhdCBsZWF2ZXMgeW91IGZlZWxpbmcgdW5mdWxmaWxsZWQuIEFsbCB0aGUgcm9tYW5jZSBhbmQgcmVsYXRpb25zaGlwcyB5b3UgaG9wZSB3b3VsZCBoYXBwZW4gZG8gbm90LiBVbmxlc3MgeW91IGFyZSBhIHByaWVzdCB0aGF0IGlzIGluIHdoaWNoIGNhc2UgZ29kIGJsZXNzIHN0cmFpZ2h0IHdvbWFuIHdobyBjdXJlIG91ciBob21vcy4pAAAAAAAAAEAKgAQIowEQowEi7gNOb3Qgb25seSB3YXMgdGhpcyBtb3ZpZSBiZXR0ZXIgdGhhbiBhbGwgdGhlIGZpbmFsIHNlYXNvbiBvZiBIOkxPVFMuIEJ1dCBpdCB3YXMgYmV0dGVyIHRoYW4gYW55IG1vdmllIG1hZGUgZm9yIFRWIEkgaGF2ZSBldmVyIHNlZW4hPGJyIC8+PGJyIC8+TG9va2luZyBhdCB0aGUgIlRvcCAyNTAiIEkgc2VlIHRoYXQgb25seSBvbmUgc21hbGwgc2NyZWVuIG1vdmllIGhhcyBtYWRlIGl0OiBIb3cgdGhlIEdyaW5jaCBTdG9sZSBDaHJpc3RtYXMuIEkgdGhpbmsgaXQgaXMgdGltZSB0byBpbmNyZWFzZSB0aGF0IGdyb3VwIHRvIDIuPGJyIC8+PGJyIC8+SSB3aWxsIGFkbWl0IHRoYXQgdGhlIG9yaWdpbmFsIHNlcmllcyBoYWQgc2V2ZXJhbCBzaG93cyB0aGF0IHdlcmUgYmV0dGVyIHRoYW4gdGhpcywgYnV0IEkgZGlkbid0IG1pbmQuIEkganVzdCBMT1ZFRCBiZWluZyBhYmxlIHRvIGVudGVyIHRoZSB3b3JsZCBvZiB0aGUgQmFsdGltb3JlIEhvbWljaWRlIFNxdWFkIGFnYWluISkAAAAAAAAAQAr1BQikARCkASLjBU5vIHNwb2lsZXJzIGhlcmUgYnV0IEkgaGF2ZSBiZWVuIGEgZmFuIHNpbmNlIFdha2luZyB0aGUgRGVhZCBzdGFydGVkIGJ1dCB0aGUgbGFzdCBzZXJpZXMsIG9mIHdoaWNoIG9ubHkgMyBoYXZlIGJlZW4gb24gc28gZmFyIGlzIGF3ZnVsLiBUaGUgc3RvcmllcyBiZWFyIG5vIHJlc2VtYmxhbmNlIHRvIHRoZSBvcmlnaW5hbCBpZGVhIG9mIHRoZSBzZXJpZXMuIEkgZm91bmQgdGhlc2UgMyBpbiB0aGUgbGFzdCBzZXJpZXMgamF3IGRyb3BwaW5nbHkgbHVkaWNyb3VzLiBBcyBhIEJCQyBsaWNlbmNlIHBheWVyLCBhZnRlciB0aGUgc2hvdyBJIHJhbmcgQkJDIGNvbXBsYWludHMgdG8gcGFzcyBvbiBteSBkaXNhcHBvaW50bWVudC4gSSdtIGFtYXplZCB0aGF0IGFjdG9ycyBvZiB0aGUgY2FsaWJyZSBvZiBUcmV2b3IgRXZlIGFuZCBTdWUgSm9obnN0b25lIGRpZG4ndCBvYmplY3QgdG8gdGhlIHN0b3J5IGxpbmVzLiBUaGVzZSBhY3RvcnMgaGF2ZSBiZWVuIHdpdGggdGhlc2UgY2hhcmFjdGVycyBmb3IgOCBzZWFzb25zLCBzdXJseSB0aGV5IGNhbiBzZWUgaXQncyBsb3N0IGFsbCBkaXJlY3Rpb24uIEl0J3MgYSBnb29kIGpvYiBpdCBpcyB0aGUgbGFzdCBzZXJpZXMgb3IgdGhlIG5leHQgc2VyaWVzIG1heSBzdGFydCB3aXRoIHRoZSB0ZWFtIGludmVzdGlnYXRpbmcgdGhlIGRlYXRoIG9mIEZhdGhlciBDaHJpc3RtYXMhPGJyIC8+PGJyIC8+UGF1bCBCZW50bGV5LCBXZXN0IFlvcmtzaGlyZSwgRW5nbGFuZC4pAAAAAAAAAEAK/gQIpQEQpQEi7ARObyByZWRlZW1pbmcgZmVhdHVyZXMsIHRoaXMgZmlsbSBpcyBydWJiaXNoLiBJdHMgam9rZXMgZG9uJ3QgYmVnaW4gdG8gYmUgZnVubnkuIFRoZSBodW1vdXIgZm9yIGNoaWxkcmVuIGlzIHBhdGhldGljLCBhbmQgdGhlIGF0dGVtcHRzIHRvIGFwcGVhbCB0byBhZHVsdHMganVzdCBhZGQgYSB0YWNreSBzbXV0dGlzaG5lc3MgdG8gdGhlIHdob2xlIG1pc2VyYWJsZSBwYWNrYWdlLiBTaXR0aW5nIHRocm91Z2ggaXQgd2l0aCBteSBjaGlsZHJlbiBqdXN0IG1hZGUgbWUgdW5jb21mb3J0YWJsZSBhYm91dCB3aGF0IG1pZ2h0IGJlIGNvbWluZyBuZXh0LiBJIGNvdWxkbid0IGVuam95IHRoZSBmaWxtIGF0IGFsbC4gQWx0aG91Z2ggbXkgY2hpbGQgZm9yIHdob20gdGhlIERWRCB3YXMgYm91Z2h0IGVuam95ZWQgdGhlIGZhY3QgdGhhdCBzaGUgb3duZWQgYSBuZXcgRFZELCBuZWl0aGVyIHNoZSBub3IgaGVyIHNpc3RlcnMgZXhwcmVzc2VkIG11Y2ggaW50ZXJlc3QgaW4gc2VlaW5nIGl0IGFnYWluLCB1bmxpa2Ugd2l0aCBNb25zdGVycyBpbmMsIEZpbmRpbmcgTmVtbywgSnVuZ2xlIEJvb2ssIExpb24gS2luZywgZXRjLiB3aGljaCBhbGwgZ2V0IGZyZXF1ZW50IHJlcXVlc3RzIGZvciByZXBsYXlzLikAAAAAAAAAQAqiAgimARCmASKQAk15IHdpZmUgYW5kIEkgc2F3IGV2ZXJ5IGVwaXNvZGUgaW4gdGhpcyBzZXJpZXMgYW5kIGxvdmVkIGl0LiBIb3dldmVyLCB0aGUgc2VyaWVzIHdhcyBjdXQgc2hvcnQgd2l0aG91dCBhIGZpbmFsIGVwaXNvZGUgYnkgdGhlIHByb2R1Y2VycyBvZiB0aGUgc2hvdy4gSXQgZW5kZWQgd2l0aCBhIHR5cGljYWwgZW5kLXRoZS1zZWFzb24gY2xpZmYgaGFuZ2VyIGxlYXZpbmcgaXQncyBmYW5zIGZlZWxpbmcgY2hlYXRlZC4gQSB3YXN0ZSBvZiBncmVhdCB3cml0aW5nIGFuZCBhY3RpbmcuKQAAAAAAAABACvsDCKcBEKcBIukDTXkgZmF2b3VyaXRlIHBvbGljZSBzZXJpZXMgb2YgYWxsIHRpbWUgdHVybnMgdG8gYSBUVi1maWxtLiBEb2VzIGl0IHdvcms/IFllcy4gR2VlIHJ1bnMgZm9yIG1heW9yIGFuZCBnZXRzIHNob3QuIFRoZSBIb21pY2lkZSAiaGFsbCBvZiBmYW1lIiB0dXJucyB1cC4gUGVtYmxldG9uIGFuZCBuZWFybHkgYWxsIG9mIHRoZSBjb3BzIHdobyBldmVyIHBsYXllZCBpbiB0aGlzIHNlcmllcy4gQSBsb3Qgb2YgZmxhc2hiYWNrcyBoZWxwcyB5b3Ugd2hvIGhhc27CtHQgc2VlbiB0aGUgVFYtc2VyaWVzIGJ1dCBpdCBhbXVzZXMgdGhlIGZhbnMgdG9vLiBUaGUgbGFzdCBmaXZlIG1pbnV0ZXMgc29sdmVzIGFub3RoZXIgbXVyZGVyIGFuZCBhdCB0aGUgdmVyeSBlbmQgZXZlbiB0d28gb2YgdGhlIGRlYWQgY29wcyB0dXJuIHVwLiBBbmQgYSBzaG9ydCBhcHBlYXJhbmNlIGZyb20gbXkgZmF2b3VyaXRlIGNvcm9uZXIgSnVsaWFuYSBDb3guIFRoaXMgaXMgYSBnb29kIGZpbG0uKQAAAAAAAABACsYJCKgBEKgBIrQJTW9zdCBtb3ZpZXMgSSBjYW4gc2l0IHRocm91Z2ggZWFzaWx5LCBldmVuIGlmIEkgZG8gbm90IHBhcnRpY3VsYXJseSBsaWtlIHRoZSBtb3ZpZS4gSSBhbSB0aGUgdHlwZSBvZiBwZXJzb24gd2hvIHJlY29nbml6ZXMgZ3JlYXQgZmlsbXMgZXZlbiBpZiBJIGRvIG5vdCBsaWtlIHRoZSBnZW5yZS4gVGhpcyBpcyB0aGUgZmlyc3QgbW92aWUgSSBjb3VsZCBub3Qgc3RhbmQgdG8gd2F0Y2guIENhdCBpbiB0aGUgSGF0IGlzIHRoZSB3b3JzdCBtb3ZpZSBJIGhhdmUgZXZlciBzZWVuLS1hbmQgSSd2ZSBzZWVuIGEgbG90IG9mIG1vdmllcy4gVGhlIGFjdGluZyBpcyBva2F5IChNeWVycyBpcyBnb29kIGFzIHRoZSBjYXQsIGl0J3MganVzdCB0aGF0IGhlIGlzIFJFQUxMWSBhbm5veWluZykuIFRoZSBzaWxseSBzb25ncyB0aGUgY2F0IHNpbmdzIHdlcmUgYm9yaW5nIGFuZCBtb25vdG9ub3VzLCBldmVuIGZvciB0aGUgY2hpbGRyZW4gaW4gdGhlIGF1ZGllbmNlLiBUaGUgcGxvdCBkcmFncyBvbiBhbmQgb24sIGFuZCB2aWV3ZXJzIG11c3Qgc3VmZmVyIHRocm91Z2ggcG9vciBkaWFsb2d1ZS4gVGhlICJ3aXR0eSIgcGFyZW50YWwgcmVtYXJrcyBhcmUgZGlzZ3VzdGluZywgbm90IGZ1bm55IChJIHJlbWVtYmVyIHNvbWUgYXdmdWwgY29tbWVudCBhYm91dCBhIGdhcmRlbiBob2UgYmVpbmcgY29tcGFyZWQgdG8sIHdlbGwsIGEgdHlwZSBvZiBwZXJzb24gcGVvcGxlIGNhbGwgYSAiaG8iKS4gRXZlbiB0aG91Z2ggdGhlIG1vdmllIGlzIHJlYWxseSBzaG9ydCwgaXQgc2VlbWVkIHRvIGxhc3QgRk9SRVZFUi4gRG8gbm90IHdhc3RlIHlvdXIgdGltZS4gSSBrbm93IHNtYWxsIGtpZHMgd2hvIGhhdGVkIHRoaXMgbW92aWUuIElmIGNoaWxkcmVuIGNhbid0IHN0YW5kIGl0LCBJIGRvIG5vdCBrbm93IGhvdyBhbnkgYWR1bHRzIGNhbi4gSSB3b3VsZCBsaWtlIHRvIGZ1bWUgbW9yZSBhYm91dCB0aGlzIGZpbG0gYnV0IEkgZG8gbm90IGV2ZW4gZmVlbCBsaWtlIHdhc3RpbmcgYW55bW9yZSB0aW1lIHdyaXRpbmcgdGhpcyByZXZpZXcgYWJvdXQgaXQuIEkgSEFURUQgSVQhIFNvLCBpbiBzdW1tYXJ5LCBkbyBub3Qgc3BlbmQgOTAgbWludXRlcyBvZiB5b3VyIGxpZmUgd2F0Y2hpbmcgdGhpcyEgU2VlIGEgR09PRCBtb3ZpZSE8YnIgLz48YnIgLz4xLzEwIHN0YXJzLS10aGUgbG93ZXN0IHJldmlldyBJIGhhdmUgZXZlciBnaXZlbiBhIG1vdmllLikAAAAAAAAAQAqCBQipARCpASLwBE1lYW4gc3Bpcml0ZWQsIGFuZCBkb3duIHJpZ2h0IGRlZ3JhZGluZyBhZGFwdGF0aW9uIHRvIHRoZSBjbGFzc2ljIGNoaWxkcmVuJ3MgdGFsZSBub3Qgb25seSBsYWNrcyB0aGUgY2hhcm0gb2YgaXRzIGZvcmVmYXRoZXIgYnV0IGxhY2tzIGFueSB0YWxlbnQgd2hhdCBzbyBldmVyLiBNaWtlIE15ZXJzIHNob3VsZCBub3Qgb25seSBiZSBhc2hhbWVkIG9mIGhpbXNlbGYgZm9yIGhpcyBob3JyaWJsZSBwZXJmb3JtYW5jZSB0aGF0IGlzIGEgY2xlYXIgcmlwIG9mZiBvZiB3aGF0IEppbSBDYXJyZXkgZGlkIGJ1dCBoZSBzaG91bGQgZ2l2ZSB1cCBhY3RpbmcgYWxsIHRvZ2V0aGVyLiBIZSBpcyBzbyBhbm5veWluZyB0aGF0IHlvdSB3b3VsZCB3YW50IHRvIGJlYXQgdGhlIGNyYXAgb3V0IG9mIGhpbSBpZiB5b3Ugd2VyZSBhYmxlIHRvIGp1bXAgcmlnaHQgaW4gdGhlIGZpbG0uIFRoZSBzZXRzIGFyZSB1Z2x5IGFuZCB0aGUgY2luZW1hdG9ncmFwaHkgaXMgdmVyeSBwb29yLiBJIGhhdmUgc2VlbiBhIGxvdCBvZiBiYWQgZmlsbSB0aGlzIHllYXIsIGJ1dCB0aGlzIG5vdCBvbmx5IHRha2VzIHRoZSBjYWtlIGJ1dCBpdCBpcyB3aXRoIG91dCBhIGRvdWJ0IG9uZSB0aGUgd29yc2UgZmlsbXMgZXZlciBtYWRlLikAAAAAAAAAQArDBAiqARCqASKxBE1heWJlIGl0IGlzIHVuZmFpciBmb3IgbWUgdG8gcmV2aWV3IHRoaXMgbW92aWUgYmVjYXVzZSBJIHdhbGtlZCBvdXQgd2VsbCBiZWZvcmUgdGhlIGVuZC4gVGhhdCdzIG9kZCwgYmVjYXVzZSBJIHVzdWFsbHkgbGlrZSBTaGFrZXNwZWFyZSBvbiB0aGUgc2NyZWVuIGFuZCBJIGVuam95ZWQgTWlkc3VtbWVycyBOaWdodCdzIERyZWFtIG9uY2UsIG1hbnkgeWVhcnMgYWdvLCB3aGVuIEkgc2F3IGl0IG9uIHRoZSBzdGFnZS48YnIgLz48YnIgLz4gSSB0aGluayB0aGF0IHR3byB0aGluZ3MgZGlkIG1lIGluOiB0aGF0IHNxdWVha3kgdHdlcnAgd2l0aCB0aGUgU2hha2VzcGVhcmlhbiBuYW1lLCBDYWxpc3RhIEZsb2NraGFydCwgYW5kIE1pY2hlbGxlIEZlaWZmZXIgc2l0dGluZyBpbiBhIGdpYW50IGNsYW1zaGVsbC4gV2VsbCwgSSBzdXBwb3NlIHlvdSBjb3VsZCBzYXkgaXQgc3VwcG9zZWQgdG8gYmUgYSBjb21lZHkgLS0gYnV0IHdoZW4gdGhlIHNjZW5lcnkgaXMgZnVubnkgYW5kIHRoZSBhY3RvcnMgYXJlbid0LCBJJ2Qgc2F5IHdlIGhhdmUgYSBiYWQgbW92aWUgb24gb3VyIGhhbmRzLi4uLikAAAAAAAAAQAqCEwirARCrASLwEk1hcmlvIFJhY29jZXZpYyBmcm9tIEV1cm9wZSBpcyB0aGUgb25seSB1c2VyIHdobyBoYXMgcG9zdGVkIGEgY29tbWVudCBzbyBmYXIgYW5kIGNvdmVycyB0aGUgbWFqb3IgcG9pbnRzIHRvIHRoZSBmaWxtLllldCBhZ2FpbiBhbm90aGVyIGRpZmZpY3VsdCBmaWxtIHRvIHB1cmNoYXNlIGluIHRoZSBVSy5JIGhhZCB0byBnbyB0aHJvdWdoICJNaWRuaWdodCBWaWRlbyIgd2hvIGhhdmUgYSBTd2VkaXNoIGJyYW5jaC5JIHdlbnQgdG8gdGhlIHBvc3Qgb2ZmaWNlIGFuZCBib3VnaHQgYnkgbWFpbCBvcmRlciB0aGlzIGFuZCBhIHNpbWlsYXIgdGl0bGUgYXQgb25seSBTS1IzMCBhIHRpdGxlLjxiciAvPjxiciAvPlRoaXMgZmlsbSBnb2VzIHVuZGVyIG1hbnkgImEuay5hJ3MiIGRlcGVuZGluZyBvbiB3aGVuIGFuZCB3aGVyZSBpdCBpcyBtYXJrZXRlZC5JIGhhZCBwcmV2aW91c2x5IHB1cmNoYXNlZCAiVGhlIEJsb29kc3Vja2VyIGxlYWRzIHRoZSBEYW5jZSIgKHdoaWNoIHlvdSB3aWxsIGZpbmQgaWYgeW91IHNlYXJjaCBvbiBJbWRiIHVuZGVyICJwZW9wbGUiIGFuZCBpbnB1dCAiS3Jpc3RhIE5lbGwiKS5UaGUgYWN0b3Igd2hvIHBsYXlzIHRoZSBDb3VudCBvbiBoaXMgcHJpdmF0ZSBpc2xhbmQgaW4gdGhlIGxhdHRlciBmaWxtIGhhZCBoaXMgd29yZHMgZHViYmVkIGZyb20gSXRhbGlhbiBpbnRvIEVuZ2xpc2ggYnkgYW4gYWN0b3Igd2l0aCBhbiB1bm1pc3Rha2FibHkgbW91cm5mdWwgYW5kIHJhdGhlciB0aXJlZCBzb3VuZGluZyB2b2ljZS5JIHNtaWxlZCB3aGVuIEkgaGVhcmQgdGhpcyBzYW1lIHZvaWNlIGR1YmJpbmcgb24gdGhlIEVuZ2xpc2ggc291bmR0cmFjayBhcyB0aGUgcG9saWNlIGluc3BlY3RvciB3aG8gaXMgaW52ZXN0aWdhdGluZyB0aGUgbXVyZGVyIG9mIHRoZSBwcm9zdGl0dXRlIGtpbGxlZCBpbiB0aGUgY29wc2UgaW4gdGhlIHN1YmplY3QgZmlsbS5NeSBjaG9pY2Ugb2YgY291cnNlIHdhcyB0byBzZWUgYW5vdGhlciBvdXRpbmcgYnkgdGhlIGRlbGljaW91cyBLcmlzdGEgTmVsbC48YnIgLz48YnIgLz5UaGVyZSBhcmUgcXVpdGUgYSBmZXcgcmF0aGVyIGluY29uc2VxdWVudGlhbCBzdWIgcGxvdHMgaW4gdGhlIG1vdmllIGludm9sdmluZyBibGFja21haWwvZXh0b3J0aW9uLCBzbGVhenkgYWZmYWlycyB3aXRoIGdpcmxmcmllbmRzJyBtb3RoZXJzLCBhIG1vdG9yIGN5Y2xlIGNoYXNlIHJlc3VsdGluZyBpbiBhIGdhbmdsYW5kIGhpdCwgYSBnYW5ncmFwZSBieSBhICJjbGllbnQncyIgbW90b3JjeWNsZSBmcmllbmRzLCBzbGVhenkgcGhvdG9ncmFwaHksIGNyb3NzIGRyZXNzaW5nIGJ5IHRyYW5zdmVzdGl0ZXMgZXRjLiB3aGljaCBnaXZlIGEgZmxhdm91ciB0byB0aGlzIGZpbG0gc3VtbWFyaXNlZCBpbiBhIHdvcmQgLSBTTEVBWkUsIChidXQgYXJ0aXN0aWMgc2xlYXplKS5UaGUgYWZvcmVtZW50aW9uZWQgY29udHJpYnV0b3IgbGlrZWQgdGhpcyBmaWxtIGJ1dCB0aGUgbG93bHkgcmF0aW5nIHN1Z2dlc3RzIG90aGVyIEltZGIgZmFucyBkaWQgbm90IGFsYmVpdCB3aXRob3V0IGV4cGxhaW5pbmcgdGhlaXIgIndoZXJlcyBhbmQgd2h5Zm9yZXMiLlBlcnNvbmFsbHkgSSB0aG91Z2h0IHRoZXJlIHdlcmUgdG9vIG1hbnkgc3VicGxvdHMgYW5kIG5vdCBlbm91Z2ggcHV0IGludG8gdGhlIG1haW4gc3RvcnkgYW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlc2Ugc3Vib3JkaW5hdGUgY2hhcmFjdGVycyB0byB0aGUgY2VudHJhbCBwbG90IGFuZCB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlaXIgc2NyZWVuIGNoYXJhY3RlcnMuQWxzbyBhIHByb2Zlc3Npb25hbCBmaWxtIGVkaXRvciB3YXMgc29yZWx5IG5lZWRlZCBhcyBzb21lIG9mIHRoZSBzY2VuZXMgYXBwZWFyZWQgdG8gbGFzdCBmYXIgdG9vIGxvbmcsIGhhdmluZyBtYWRlIHRoZWlyIHBvaW50LCBzbyB0aGF0IHRoZSBmaWxtIGFwcGVhcmVkIHRvIGRyYWcgaW4gcGxhY2VzOyBlLmcuIHRoZSBzY2VuZSBvZiB0aGUgZGFuY2luZyB0cmFuc3Zlc3RpdGUuS3Jpc3RhIE5lbGwgYXBwZWFycyBpbiBvbmUgZnJ1aXR5IHNjZW5lIHdpdGggYSBjbGllbnQgYnV0IHRoaXMgdG9vIGlzIGJ1dCBhIHZpZ25ldHRlIGFuZCBJIHdhcyBsZWZ0IHdhbnRpbmcgbW9yZSBmcm9tIGhlciwgdGhlIGRpcmVjdG9yIGFuZCB0aGUgc2NyZWVucGxheS48YnIgLz48YnIgLz5JIGxvdmUgdGhlIHBvbGl0aWNhbCBpbmNvcnJlY3RuZXNzIHNob3duIGluIG9sZGVyIGZpbG1zICh0aGlzIGlzIDMwIHllYXJzIGZyb20gaXRzIG1ha2luZykgZS5nLiBzbW9raW5nIGluIG9mZmljZXMgYW5kIHRoZSB3YXkgc29tZSBjaGFyYWN0ZXJzIHJlYWN0IHRvIGVhY2ggb3RoZXIgaW4gdGhlIG9mZmljZSFJIHdvdWxkIHN1Z2dlc3QgNC8xMCBhcyBhIG1vcmUgcmVhbGlzdGljIHJhdGluZyBhbmQgSSBoYXZlIGF3YXJkZWQgaXQgYXMgc3VjaC4pAAAAAAAAAEAK6AQIrAEQrAEi1gRNYXJnYXJldCBNaXRjaGVsbCBzcGlucyBpbiBoZXIgZ3JhdmUgZXZlcnkgdGltZSBzb21lYm9keSB3YXRjaGVzIHRoaXMgbWVzcyEgRmluZSBjb3N0dW1pbmcgYW5kIHNldHMgY2FuJ3QgZXZlbiBiZWdpbiB0byBvdmVyd2hlbG0gbGFja2x1c3RlciBwZXJmb3JtYW5jZXMgYnkgSm9hbm5lIFdoYWxsZXkgKGFzIHRoZSB0aXRsZSBjaGFyYWN0ZXIpIGFuZCB0aGUgZXZlci1ibGFuZCBUaW1vdGh5IERhbHRvbiAoYXMgUmhldHQpLiBFdmVuIHdvcnNlIHRoYW4gdGhlIGFjdGluZy0tYW5kIHBlcmhhcHMgcGFydGlhbGx5IGV4cGxhaW5pbmcgaXQtLWlzIHRoZSBzY3JpcHQsIHdoaWNoIGlzIGFzdG91bmRpbmdseSBjbGljaGVkIGFuZCBwcmVkaWN0YWJsZS4gQWRkIHRvIHRoYXQgaGVsbGlzaGx5IGJhZCBzY3JpcHQgYSBzY29yZSB0aGF0J2xsIGhhdmUgeW91IGNyaW5naW5nLCBhbmQgeW91J3ZlIGdvdCBhIGRpc2FzdGVyIEkgd291bGRuJ3Qgd2lzaCBvbiBhbnkgdmlld2VyLiBTQ0FSTEVUVCBpcyBqdXN0IGFtYXppbmdseSBsb3VzeSwgYW5kIEkgY2FuJ3QgaW1hZ2luZSBob3cgaXQgZXZlciBnb3QgbWFkZSwgbXVjaCBsZXNzIG1hZGUgaXQgdG8gdmlkZW8uKQAAAAAAAABACsMBCK0BEK0BIrEBTG92ZSBpdCwgbG92ZSBpdCwgbG92ZSBpdCEgVGhpcyBpcyBhbm90aGVyIGFic29sdXRlbHkgc3VwZXJiIHBlcmZvcm1hbmNlIGZyb20gdGhlIERpdmluZSBNaXNzIE0uIEZyb20gdGhlIGJlZ2lubmluZyB0byB0aGUgZW5kLCB0aGlzIGlzIG9uZSBiaWcgdHJlYXQhIERvbid0IHJlbnQgaXQtIGJ1eSBpdCBub3chKQAAAAAAAABACp0FCK4BEK4BIosFTGluZGEgTG92ZWxhY2Ugd2FzIHRoZSB2aWN0aW0gb2YgYSBzYWRpc3RpYyB3b21hbiBoYXRlciwgQ2h1Y2sgVHJheW5vci4gSSBkb24ndCB1bmRlcnN0YW5kIGhvdyBoYXZpbmcgc2V4IHdpdGggYSBkb2cgKHdoaWNoIGlzIGFuaW1hbCBhYnVzZSwgYXMgd2VsbCkgY2FuIGJlIGZvdW5kIHRvIGJlIGVudGVydGFpbmluZyBvciBmdW5ueS4gTGluZGEgTG92ZWxhY2Ugd2FzIGEgdmlydHVhbCBwcmlzb25lciB3aG8gd2FzIGNvZXJjZWQgaW50byBtYWtpbmcgdGhlc2UgZmlsbXMuIEkga25vdyBzb21lIHBlb3BsZSB3aWxsIGNyaXRpY2l6ZSB0aGlzIGNvbW1lbnQgYnV0IEkgZmVlbCBzdHJvbmdseSB0aGF0IHRoZXNlIHR5cGVzIG9mIGZpbG1zIGZ1ZWwgdGhlIGZpcmUgb2YgaGF0cmVkIGFuZCBmdXJ0aGVyIG1pc29neW5pc3RpYyBmZWVsaW5ncyB0b3dhcmRzIHdvbWVuLiBUaGlzIHNvY2lldHkgY29udGludWVzIHRvIHBvcnRyYXkgd29tZW4gYXMgc2V4dWFsIG9iamVjdHMgYXMgb3Bwb3NlZCB0byBodW1hbiBiZWluZ3MuIFdlIGNhbGwgb3Vyc2VsdmVzICJjaXZpbGl6ZWQiIGhvd2V2ZXIgSSBmZWVsIHdlIGhhdmUgYSBsb25nIHdheSB0byBnbyBiZWZvcmUgd2UgY2FuIGV2ZXIgc2NyYXRjaCB0aGUgc3VyZmFjZSBvZiBiZWluZyBjaXZpbGl6ZWQuKQAAAAAAAABACpQJCK8BEK8BIoIJTGljZW5jZSBmZWVzIHRvIHdhdGNoIHRoaXMgdHJhc2gsIEFuZCBwYXkgZm9yIGl0IHdpdGggaGFyZC1lYXJuZWQgY2FzaD8gSHVtb3VybGVzcywgbm8gaGludCBvZiBsYXVnaHRlciwgR29kIGtub3dzIGhvdyBpdCB3b24gYSBCQUZUQSEgPGJyIC8+PGJyIC8+V2UndmUgbm93IGJlZW4gc3ViamVjdGVkIHRvICJFYXN0ZW5kZXJzIiBmb3IgdHdlbnR5IHllYXJzLiBXaGVuLCBvaCB3aGVuIGlzIHRoZSBHcmVhdCBCcml0aXNoIHB1YmxpYyBnb2luZyB0byBzZWUgdGhpcyBhd2Z1bCBzb2FwIGZvciB3aGF0IGl0IGlzPyBDcmFzcyBQYXAhIFRoaXMgcHJvZ3JhbW1lIG5vIG1vcmUgZGVwaWN0cyByZWFsaXR5IGluIHRoZSBFYXN0IEVuZCBvZiBMb25kb24gdGhhbiBldmVyeWRheSBsaWZlIGluIEJlaXJ1dCwgYW5kIG5ldmVyIGhhcyBkb25lLjxiciAvPjxiciAvPlRoZSBFYXN0ZW5kZXJzIEkga25vdyAodGhlIHJlYWwgb25lcykgYXJlIGtpbmQsIGNvdXJhZ2VvdXMsIGhhcmR3b3JraW5nIGFuZCBsb3lhbC4gQW5kIG9uZSBvZiB0aGVpciBncmVhdGVzdCBhdHRyaWJ1dGVzIGlzIGh1bW91ci4gSXQgd2FzIHRoZSBFYXN0ZW5kZXJzIHdobyB3ZW50IHRocm91Z2ggdGhlIHdvcnN0IG9mIHRoZSBMb25kb24gYmxpdHogYW5kIHN0aWxsIHN0dWNrIHR3byBmaW5nZXJzIHVwIHRvIEhpdGxlci4gQW5kIHdoYXQgZG8gd2Ugc2VlIG9uIG91ciBzY3JlZW5zIGZvciBmaXZlIGRheXMgb2YgdGhlIHdlZWsgKGluY2x1ZGluZyBhbiBvbW5pYnVzKT8gTm90aGluZyBidXQgYSBidW5jaCBvZiBtb2FuaW5nLCB3YWlsaW5nLCAiZGVhZCBmcm9tIHRoZSBuZWNrIHVwIiB3aW1wcywgd2hvIHNlZW0gdG8gZG8gbGl0dGxlIGVsc2UgdGhhbiBzaXQgaW4gYSBwdWIgYWxsIGRheSBzbmlwaW5nIGF0IGVhY2ggb3RoZXIuIFdoYXQgYSBncmVhdCBhZHZlcnQgZm9yIEJyaXRhaW4gdGhhdCBpcyEhIERvIHRoZSB3cml0ZXJzIGFjdHVhbGx5IGJlbGlldmUgdGhpcyBnYXJiYWdlIHRoZXkncmUgcHVtcGluZyBvdXQ/IE9idmlvdXNseSB0aGUgd29vbGx5LW1pbmRlZCBzZWN0aW9uIG9mIHRoZSBwdWJsaWMgZG9lcywgYnV0IHRoZW4gSSd2ZSBoZWFyZCB0aGF0IGFwcGFyZW50bHkgYW55b25lIGNhbiBiZSBicmFpbndhc2hlZCBpbnRvIGJlbGlldmluZyBhbnl0aGluZy4pAAAAAAAAAEAK7AsIsAEQsAEi2gtMZXMgVmlzaXRldXJzLCB0aGUgZmlyc3QgbW92aWUgYWJvdXQgdGhlIG1lZGlldmFsIHRpbWUgdHJhdmVsZXJzIHdhcyBhY3R1YWxseSBmdW5ueS4gSSBsaWtlIEplYW4gUmVubyBhcyBhbiBhY3RvciwgYnV0IHRoZXJlIHdhcyBtb3JlLiBUaGVyZSB3ZXJlIHVuZXhwZWN0ZWQgdHdpc3RzLCBmdW5ueSBzaXR1YXRpb25zIGFuZCBvZiBjb3Vyc2UgcGxhaW4gYWJzdXJkbmVzcywgdGhhdCB3b3VsZCByZW1pbmQgeW91IGEgbGl0dGxlIGJpdCBvZiBMb3VpcyBkZSBGdW5lcy48YnIgLz48YnIgLz5Ob3cgdGhpcyBzZXF1ZWwgaGFzIHRoZSBzYW1lIGNoYXJhY3RlcnMsIHRoZSBzYW1lIGFjdG9ycyBpbiBncmVhdCBwYXJ0IGFuZCB0aGUgc2FtZSB0aW1lIHRyYXZlbGluZy4gVGhlIHBsb3QgY2hhbmdlcyBhIGxpdHRsZSwgc2luY2UgdGhlIGNoYXJhY3RlcnMgbm93IGFyZSBzdXBwb3NlZCB0byBiZSBleHBlcmllbmNlZCB0aW1lIHRyYXZlbGVycy4gU28gdGhleSBqdW1wIHVwIGFuZCBkb3duIGluIGhpc3RvcnksIHdpdGhvdXQgcGF5aW5nIGFueSBhdHRlbnRpb24gdG8gdGhlIGZhY3QgdGhhdCBpdCBrZWVwcyBnZXR0aW5nIGFic3VyZGVyIGFzIHlvdSBhZHZhbmNlIGluIHRoZSBtb3ZpZS4gVGhlIGR1a2UsIEplYW4gUmVubywgdHJpZXMgdG8ga2VlcCB0aGUgd2hvbGUgdGhpbmcgdG9nZXRoZXIgd2l0aCBoaXMgcGxheWluZywgYnV0IGhpcyBjaGFyYWN0ZXIgaGFzIGJlZW4gZW1wdGllZCwgc28gdGhlcmUncyBub3QgYSBsb3QgaGUgY2FuIGRvIHRvIHNhdmUgdGhlIGZpbG0uPGJyIC8+PGJyIC8+Tm93IHRoZSBkdWtlJ3Mgc2xhdmUvaGVscGVyLCBoZSBoYXMgcmVhbGx5IGFsbCB0aGUgYXR0ZW50aW9uLiBUaGUgbW92aWUgaXMgbWVyZWx5IGFib3V0IGhpbSBhbmQgaGlzIGJlaW5nIGNsdW1zeSAvIGFubm95aW5nIC8gc3R1cGlkIG9yIHdoYXRldmVyIGhlIHdhcyBzdXBwb3NlZCB0byBiZS4gRmFjdCBpczsgdGhpcyBjaGFyYWN0ZXIgdHJpZXMgdG8gcHJvZHVjZSB0aGUgbGF1Z2h0ZXIgZnJvbSB0aGUgYXVkaWVuY2UsIGJ1dCBoZSBkb2VzIG5vdCBzdWNjZWVkLiBJdCBpcyBhcyBpZiBzb21lb25lIHdhcyB0ZWxsaW5nIHlvdSBhIHJlYWxseSB2ZXJ5IHZlcnkgYmFkIGpva2UsIHlvdSBhbHJlYWR5IGtub3csIGJ1dCBoZSBpbnNpc3RzIG9uIHRlbGxpbmcgdGhhdCBqb2tlIHRpbGwgdGhlIGVuZCwgYWRkaW5nIGRldGFpbHMsIHRvIG1ha2UgeW91ciBzdWZmZXJpbmcgYSBsaXR0bGUgbG9uZ2VyLjxiciAvPjxiciAvPklmIHlvdSBsaWtlZCBMZXMgVmlzaXRldXJzLCBkbyBub3Qgc3BvaWwgdGhlIHRhc3RlIGluIHlvdXIgbW91dGggd2l0aCB0aGUgc2VxdWVsLiBJZiB5b3UgZGlkbid0IGxpa2UgTGVzIFZpc2l0ZXVycywgeW91IHdvdWxkIG5ldmVyIGNvbnNpZGVyIHNlZWluZyB0aGUgc2VxdWVsLiBJZiB5b3UgbGlrZWQgdGhpcyBzZXF1ZWwuLi4gd2VsbCwgSSBzdXBwb3NlIHlvdSBzdGlsbCBuZWVkIHRvIHNlZSBhIGxvdCBvZiBtb3ZpZXMuKQAAAAAAAABACrEHCLEBELEBIp8HTGVvcyBDYXJheCBpcyBicmlsbGlhbnQgYW5kIGlzIG9uZSBvZiB0aGUgYmVzdCBmaWxtIGFuZCBjYW1lcmEgZ3V5cyBpbiB0aGUgYnVzaW5lc3Mgc28gaXQgc2hvdWxkIGNvbWUgYXMgbm8gc3VycHJpc2UgdGhhdCBQb2xhIFggaXMgYW4gYWxtb3N0IHBlcmZlY3QgZmlsbWluZyBvZiB0aGUgbW9zdCBndXQgd3JlbmNoaW5nIHN0b3J5IGV2ZXIuIFNlcmlvdXNseS4gSWYgSSBjb3VsZCBoYXZlIGZpZ3VyZWQgb3V0IHNvbWUgd2F5IHRvIGNsaW1iIGluc2lkZSBteSB2aWRlbyBtb25pdG9yLCBJIHdvdWxkIGhhdmUgdGhyYXNoZWQgUGllcnJlIHRvIHdpdGhpbiBhbiBpbmNoIG9mIGhpcyBsaWZlLiBObyBvbmUgaGFzIHRoZSByaWdodCB0byBiZSB0aGF0IHNlbGYgYWJzb3JiZWQgYW5kIHRoYXQgc3R1cGlkLCBib3RoIGF0IHRoZSBzYW1lIHRpbWUsIGV4Y2VwdCBtYXliZSBIZWF0aGNsaWZmIGluIEVtaWx5IEJyb250ZSdzIFd1dGhlcmluZyBIZWlnaHRzLiBBZnRlciBzcGVuZGluZyAxMzQgbWludXRlcyB3aXRoIFBpZXJyZSwgSSBuZWVkIGEgbGFyZ2UgZ2xhc3Mgb2YgYnJhbmR5LiBOZXZlciBoYXZlIEkgYmVlbiBzbyBhbmdyeSBhdCBhIG1haW4gY2hhcmFjdGVyLiBPaywgaGF2aW5nIHNhaWQgdGhhdCwgUG9sYSBYIGlzIGEgc3R1bm5pbmcgbW92aWUgd2l0aCBvbmUgb2YgdGhlIGZldyB0b3RhbGx5IGhvbmVzdCBzZXggc2NlbmVzIEkndmUgZXZlciBzZWVuIGluIGFueSBmaWxtLi4uLndoaWNoIG1lYW5zIGFub3RoZXIgcGllY2Ugb2YgYnJpbGxpYW50IGZpbG1tYWtpbmcuLi4uYW5kIEknbSB0YWxraW5nIGdyYXBoaWMgaGVyZSwgYnkgdGhlIHdheS4gUG9sYSBYIHdpbGwgYmVhdCB0aGUgaGVsbCBvdXQgb2YgeW91LCB0aG91Z2gsIHNvIG1ha2Ugc3VyZSB5b3UncmUgdXAgZm9yIGl0IGlmIHlvdSBkZWNpZGUgdG8gd2F0Y2ggaXQuKQAAAAAAAABACoYJCLIBELIBIvQISnVzdCBhYm91dCBldmVyeXRoaW5nIGluIHRoaXMgbW92aWUgaXMgd3JvbmcsIHdyb25nLCB3cm9uZy4gVGFrZSBNaWtlIE15ZXJzLCBmb3IgZXhhbXBsZS4gSGUncyByZWFjaGVkIHRoZSBwb2ludCB3aGVyZSB5b3UgcmVhbGl6ZSB0aGF0IGhpcyBzaHRpY2sgaGFzbid0IGNoYW5nZWQgc2luY2UgaGlzIFNOTCBkYXlzLCBvdmVyIHRlbiB5ZWFycyBhZ28uIEhlJ3MgZG9pbmcgdGhlIHNhbWUgY3V0ZXN5IHN0cmVhbS1vZi1jb25zY2lvdXNuZXNzIGpva2VzIGFuZCB0aGUgc2FtZSB2b2ljZXMuIEhpcyBDYXQgaXMgcGFpbmZ1bGx5IHVuZnVubnkuIEhlIHRyaWVzIHdheSB0byBoYXJkLiBIZSdzIHNvbWUgd2VpcmQgVHlwZSBBIGNvbWVkaWFuLCBub3QgdGhlIGNvb2wgY2F0IGhlJ3Mgc3VwcG9zZWQgdG8gYmUuIFRoZSByZXN0IG9mIHRoZSBtb3ZpZSBpcyBqdXN0IGFzIGJhZC4gVGhlIHNldHMgYXJlIHVuYmVsaWV2YWJseSB1Z2x5IC0tLSBhbmQgY2xlYXJseSBhIHdhc3RlIG9mIG1pbGxpb25zIG9mIGRvbGxhcnMuIChDYXJkYm9hcmQgY3V0LW91dHMgZm9yIHRoZSBiYWNrZ3JvdW5kIGJ1aWxkaW5ncyB3b3VsZCBoYXZlIG1hZGUgbW9yZSBzZW5zZSB0aGFuIGNvbnN0cnVjdGluZyBhbiBlbnRpcmUgbmVpZ2hib3Job29kIGFuZCBtYWluIHN0cmVldC4pIEFsZWMgQmFsd2luIHRyaWVzIHRvIGRvIGEgZnVubnkgR3JlYXQgU2FudGluaSBpbXByZXNzaW9uLCBidXQgaGUgZW5kcyB1cCBsb29raW5nIGFuZCBzb3VuZGluZyBpbmNvaGVyZW50LiBUaGVyZSdzIGV2ZW4gYW4gaW5uYXByb3ByaWF0ZSBjaGVlc2VjYWtlIG1vbWVudCB3aXRoIGZhdXggY2VsZWJyaXR5IFBhcmlzIEhpbHRvbiAtLS0gdGhhdCBzdGlja3MgaW4gdGhlIG1pbmQgc2ltcGx5IGJlY2F1c2UgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSBhIERyLiBTZXVzcyBzdG9yeS4gQXZvaWQgdGhpcyBtb3ZpZSBhdCBhbGwgY29zdHMsIGZvbGtzLiBJdCdzIG5vdCBldmVuIGFuIGludGVyZXN0aW5nIHRyYWluIHdyZWNrLiAoSSBob3BlIHRoZXknbGwgbWFrZSBIb3J0b24gSGVhcnMgYSBXaG8gd2l0aCBSb2JpbiBXaWxsaWFtcy4gVGhlbiB3ZSdsbCBoYXZlIHRoZSBiYWQtU2V1c3MgbW92aWUtc3RhcnJpbmctc3Bhc2l0Yy0gY29tZWRpYW4gdHJpbG9neS4pKQAAAAAAAABACpwGCLMBELMBIooGSmFjayBGcm9zdCByZXR1cm5zIHdpdGggYW4gYXJteSBvZiBTdHlyb2ZvYW0gYmFsbHMgdGhhdCBjYW4gb25seSBiZSBmb2lsZWQgYnkgYmVpbmcgc2hvdCB3aXRoIHN1cGVyLXNvYWtlcnMgbG9hZGVkIHdpdGggbWFyZ2FyaXRhcy4gSG93J3MgdGhhdCBmb3IgYSBwbG90PyBUaGUgZmlsbSBoaW5nZXMgb24gc3VjaCBhIHJpZGljdWxvdXMgcHJlbWlzZSB0aGF0IGl0IGJhcmVseSByYWlzZXMgYW4gZXllYnJvdyB3aGVuIGNoYXJhY3RlcnMgYXJlIGtpbGxlZCB3aXRoIEJCUSB0b25ncyBhbmQgYXJlIGltcGFsZWQgYnkgY2Fycm90cy4gWW91IG1pZ2h0IGV2ZW4gc2F5IHRoZSB3aG9sZSBtb3ZpZSBpcyBza2F0aW5nIG9uIHRoaW4gaWNlIChiYS1ib29tLXRpc2gpLjxiciAvPjxiciAvPkFkbWl0dGVkbHksIHRoZXJlIGFyZSBzb21lIGZhbnRhc3RpYyBvbmUtbGluZXJzIGluY2x1ZGluZyBhIHJlbWFyayBhYm91dCB0aGUgTXVyZGVyb3VzIENvY29udXQgU2hhcmsuPGJyIC8+PGJyIC8+RmFpciBlbm91Z2ggdGltZXMgYXJlIGhhcmQsIGJ1dCB0aGF0IGRvZXMgbm90IGV4Y3VzZSB0aGUgd2lsbGluZ25lc3Mgb2YgdGhlIGFjdG9ycyB0byB0YWtlIHBhcnQgaW4gc3VjaCB1dHRlciB0cmlwZS48YnIgLz48YnIgLz5Gb3IgdGhvc2UgZmFucyBob3BpbmcgdG8gc2VlIEphY2sgRnJvc3QsIGJlIHByZXBhcmVkIHRvIGFjY2VwdCBoaW0gYXMgbWVyZWx5IGEgcGhhbGxpYyBjYXJyb3QgY3JlZXBpbmcgdXAgdGhlIGJlYWNoIHdpdGggY29ybnkgdm9pY2Utb3ZlciBjb21tZW50YXJ5LikAAAAAAAAAQAqTBQi0ARC0ASKBBUphY2sgRnJvc3QgMi4gVEhFIHdvcnN0ICJob3Jyb3IgZmlsbSIgSSBoYXZlIGV2ZXIgc2Vlbi4gV2h5PyAxKVRoZSBwcmVtaXNlIGlzIFdFTEwgYmV5b25kIHJpZGljdWxvdXMgMikgVGhlIGRhbW4gdGhpbmcgZG9lc24ndCBldmVuIGhhdmUgbGVncyB0byBtb3ZlIG9uISAzKSBJdCBlc2NhcGVzIEFGVEVSIGJlaW5nIGNvbXBsZXRlbHkgc3VibWVyZ2VkIGluIEFudGktRnJlZXplIChmaXJzdCBmaWxtKSA0KSBHZXQgdGhpcy4uLkl0IHRyYXZlbHMgYWxsIHRoZSB3YXkgYWNyb3NzIGFuIG9jZWFuIG9mIFNBTFQgV0FURVIgdG8gYSBUUk9QSUNBTCBpc2xhbmQgdG8gZ2V0IHJldmVuZ2Ugb24gdGhlIHNoZXJpZmYgdGhhdCBkaWQgaGltIGluIHRoZSBmaXJzdCBmaWxtLiA1KSAiS2lsbGVyIFNub3diYWxscyIuIEkgaGF2ZSB5ZXQgdG8gYmUgZHJ1bmsgZW5vdWdoIHRvIHNlZSAiR2luZ2VyIERlYWQgTWFuIiBzbyBhcyBvZiB0aGUgd3JpdGluZyBvZiB0aGlzLCBKYWNrIEZyb3N0IDIgaG9sZCB0aGUgZGlzdGluY3Rpb24gb2YgYmVpbmcgVEhFIHN0dXBpZGVzdCAiaG9ycm9yIiBmaWxtIGV2ZXIuIEV2ZW4gU3VycGFzc2luZyB0aGUgaW5hbmVuZXNzIG9mIGl0J3MgcHJlZGVjZXNzb3IgKGlmIHlvdSBjYW4gYmVsaWV2ZSB0aGF0ISkuKQAAAAAAAABACv4OCLUBELUBIuwOSmFjayBGcm9zdCAyLCBpcyBwcm9iYWJseSB0aGUgbW9zdCBjaGVlc2llc3QgbW92aWUgSSBoYXZlIGV2ZXIgc2VlbiBpbiBteSBsaWZlLiBUaGUgY29tcGxldGUgdGl0bGUgb2YgdGhlIGZpbG0sIGlzIEphY2sgRnJvc3QgMjogUmV2ZW5nZSBvZiB0aGUgTXV0YW50IEtpbGxlciBTbm93bWFuLiBIb3Jyb3IgbW92aWUgZmFucyB0aGF0IGhhdmUgYSB0YXN0ZSBmb3IgY2FtcHkgc3RvcnkgbGluZXMsIHdpbGwgYmUgZGVsaWdodGVkIHRvIHdhdGNoIHRoaXMuIFRoaXMgZmlsbSB3YXMgc3RyYWlnaHQgdG8gdmlkZW8sIGFuZCBmb3IgZ29vZCByZWFzb25zLiBIZXJlJ3Mgd2h5OiBUaGUgYWN0aW5nLCB3YXMgc28gYXRyb2Npb3VzLCBhbmQgc28gdGVycmlibGUsIHRoYXQgaXQgY291bGQgY2F1c2Ugb25lIHRvIGNyeS4gVGhlIG1haW4gY2hhcmFjdGVyIGhhZCBubyBwZXJzb25hbGl0eSwgYW5kIHRoZSBhY3RvcidzIGJhZCBhY3RpbmcgbWFkZSBpdCBhbGwgd29yc2UuIFRoZSBzY3JlZW5wbGF5IHdhcywgd2FzIGFsc28gYXRyb2Npb3VzLiBFYWNoIGNoYXJhY3RlciBhbHdheXMgc2F5cyBhIGNoZWVzeSBsaW5lLCBhbmQgYWRkIHRoZSBjaGVlc3kgbGluZXMgdG8gdGhlIGJhZCBjaG9yZW9ncmFwaHksIHRoZW4geW91IGhhdmUgc29tZXRoaW5nIGJhZC4gU2Vjb25kLCB0aGUgc3RvcnkgbGluZSBpc24ndCByZWFsbHkgYWxsIHRoYXQgaW1wcmVzc2l2ZSwgYnV0IHNpbmNlIHRoaXMgbW92aWUgd2FzIHN0cmFpZ2h0IHRvIHZpZGVvLCBpdCBpcyBmb3JnaXZlbi4gVGhlIGRpcmVjdG9yLCBhbmQgd3JpdGVyIGNvdWxkIGhhdmUgdHVybmVkIHRoZSBpZGVhIG9mIGEga2lsbGVyIHNub3dtYW4sIGludG8gc29tZXRoaW5nIGNvb2wsIGJ1dCB0aGV5IGRpZG4ndC4gVGhleSBzdG9yeSBoYXMgbG90cyBvZiBwbG90IGhvbGVzIGluIGl0LiBJbiB0aGUgYmVnaW5uaW5nLCBhIGN1cCBvZiBjb2ZmZWUgZ2V0cyBrbm9ja2VkIGludG8gdGhlIGZpc2ggdGFuaywgd2l0aCB0aGUgbWVsdGVkIEphY2sgRnJvc3QuIFNjaWVudGlzdHMgdHJ5IHRvIHJlc3RvcmUgaGlzIGxpZmUsIGJ1dCB0aGV5IGNvdWxkbid0LiBPbmNlIHRoZSBjdXAgb2YgY29mZmVlIGZlbGwgaW50byB0aGUgdGFuaywgSmFjayBGcm9zdCB3YXMgY29tcGxldGVseSByZXN0b3JlZC4gTm93IGhlIGlzIGltbXVuZSB0byBhbnRpLWZyZWV6ZS4gSW4gSmFjayBGcm9zdCBwYXJ0IDEsIHRoZSBtYWluIGNoYXJhY3RlcidzIEROQSBnb3QgbWl4ZWQgdXAgd2l0aCB0aGUgQW50aS1mcmVlemUgdGhhdCB3YXMgdXNlZCB0byBraWxsIEphY2sgRnJvc3QuIFNpbmNlIHRoZSBtYWluIGNoYXJhY3RlciBpcyBhbGxlcmdpYyB0byBiYW5hbmFzLCBKYWNrIEZyb3N0IGlzIHRvby4gSGVuY2UsIGhlcmUncyBteSBwb2ludC4gVGhleSBzYXkgdGhhdCBTYW0ncyBETkEgY29tYmluZWQgd2l0aCBKYWNrIEZyb3N0J3MuIEJ1dCwgb25lIG9mIHRoZSBzY2llbnRpc3RzIGhhZCBzb21lIHNhbGl2YSBvbiB0aGUgY3VwLCBzbyB3aGVuIGl0IGZlbGwgaW50byB0aGUgdGFuaywgdGhlIHNjaWVudGlzdHMgRE5BIHdvdWxkIGhhdmUgYmVlbiBjb21iaW5lZCB3aXRoIEphY2sgRnJvc3RzLiBBbm90aGVyIHRoaW5nLCB0aGUgc3BlY2lhbCBlZmZlY3RzIHdlcmVuJ3QgdmVyeSBnb29kIGVpdGhlci4gSGVyZSdzIHRoZSBnb29kIHBvaW50czogSmFjayBGcm9zdCAyIGhhcyBsb3RzIG9mIGJsb29kLCB0aGF0IGxvb2tzIHByZXR0eSByZWFsaXN0aWMuIEV2ZW4gdGhvdWdoIHRoaXMgbW92aWUgaXMgZmxhd2VkIHRvIGhlbGwsIGl0IGlzIHN0aWxsIGVudGVydGFpbmluZy4gT3ZlcmFsbCwgSmFjayBGcm9zdCAyIGlzIGFuIGVuam95YWJsZSBob3Jyb3IgbW92aWUuIFRoZSBmaXJzdCBvbmUgd2FzIGJldHRlciB0aG91Z2guIDcgb3V0IG9mIDEwLikAAAAAAAAAQAr3BQi2ARC2ASLlBUphY2sgRnJvc3QgMiB3YXMgYSBob3JyaWJsZSwgdGVycmlibGUsIHNhZGx5IHBhdGhldGljIGV4Y3VzZSBmb3IgYSBzZXF1YWwgdG8gYSBncmVhdCBtb3ZpZS4gVGhlIG9yaWdpbmFsLCB3YXMgYSBsb3cgYnVkZ2V0IGNvbWVkeSBob3Jyb3IgZmlsbSBhYm91dCBhIG11cmRlcmVkIHdobyB3YXMgdHVybmVkIGludG8gYSBzbm93bWFuIGFmdGVyIGFuIGFjY2lkZW50IHdpdGggc29tZSB0b3hpYyB3YXN0ZS4gQW5kIHRoZSBzbm93bWFuIHdlbnQgYXJvdW5kIG11cmRlcmluZyBwZW9wbGUsIGFuZCBhdm9pZGluZyBibG93IGRyeWVycyBsaWtlIHRoZSBwbGFndWUuIFRoaXMsIGhvd2V2ZXIsIHdhcyBhIGZhciBjcnkgZnJvbSB0aGUgcXVhbGl0eSBvZiB0aGUgb3JpZ2luYWwuIEl0IHNlZW1zIGxpa2UgdGhpcyBldmVuIGhhZCBhIGxvd2VyLWJ1ZGdldCBiZWNhdXNlIGZvciBzb21lIHJlYXNvbiwgYWZ0ZXIgYW4gaG91ciBpbnRvIHRoaXMgZmlsbSwgSSBzdGlsbCBoYWRuJ3Qgc2VlbiB0aGUgc25vd21hbi4gU29tZSByZXZlbmdlIGhlJ3MgZ2V0dGluZyBpZiBoZSdzIGFsd2F5cyBpbiB0aGUgZm9ybSBvZiBJY2UgY3ViZXMgd2l0aCBhIGNoZWVzeSB2b2ljZS1vdmVyIGFuZCBhIGxpdHRsZSBzaGFrZSBvZiB0aGUgY29vbGVyIGhlIHJlc3RzIGluIHRvIGdpdmUgYW5pbWF0aW9uIHRvIHRoZSBjaGFyYWN0ZXIuIERpc2FwcG9pbnRpbmcgdG8gbm8gYmVsaWVmLCBldmVuIGZvciBhIGZhbiBvZiBiYWQgY2luZW1hLikAAAAAAAAAQArMBAi3ARC3ASK6BEphY2sgRnJvc3QgMiBpcyBvdXQgb2YgdGhlIHF1ZXN0aW9uLCBJJ20gYWN0dWFsbHkgc3VycHJpc2VkIHBlb3BsZSBhcmUgYWxsb3dlZCB0byBtYWtlIHRoZXNlIHNvcnQgb2YgbW92aWVzLjxiciAvPjxiciAvPkFzIFNhbSBhbmQgaGlzIHdpZmUgdGFrZSB0byB0aGUgVHJvcGljYW5hIGZvciBhIHJlbGF4aW5nIENocmlzdG1hcywgSmFjayByZXR1cm5zIHRvIGtpbGwgb2ZmIHRoZSBmdW4gYW5kIHRha2Ugb24gYSByZXZlbmdlIHdpdGggaW5icmVlZGluZy4uLjxiciAvPjxiciAvPkRvbid0IHRha2UgYSBzd2lwIGF0IHRoaXMgZmlsbSBhdCBhbGwsIG1vc3QgcGVvcGxlIHNheSBpdHMgYSBsYXVnaCB3aXRoIHlvdXIgbWF0ZXMsIGJ1dCBmcmFua2lseSBpdHMgYSB3YXN0ZSBvZiB0aW1lLiBJZiB0aGUgcGVvcGxlIHdobyBtYWRlIHRoaXMgZmlsbSBjYW4gZ2V0IGEgam9iIGJ5IGRvaW5nIHdoYXQgdGhleSBkbywgdGhleSBjYW4gYXQgbGVhc3QgdGFrZSB0aGUgdGltZSBhbmQgZWZmb3J0IHRvIHdyaXRlIHVwIGEgYmV0dGVyIHN0b3J5LCBlc3BlY2lhbGx5IHRoZSBjaGVlc3kgY2hhcmFjdGVyIG5hbWVzLikAAAAAAAAAQAq0EQi4ARC4ASKiEUl0YHMgZnVubnkgaG93IGluc3RpbmN0IHdhcm5zIHlvdSBvZiBzb21ldGhpbmcgLiBGb3IgZXhhbXBsZSBhcyBzb29uIGFzIHRoZSBjb21wYW55IGNyZWRpdHMgcmVhZCBOdSBJbWFnZSBJIGtuZXcgaW5zdGluY3RpdmVseSBJYGQgc2VlbiBhIHJlYWxseSBjcmFwIGZpbG0gYnkgdGhlbSBzb21ld2hlcmUgYmVmb3JlIGJ1dCBjb3VsZG5gdCByZW1lbWJlciB3aGVyZSAuIE5ldmVydGhlbGVzcyBJIGp1c3Qga25ldyBKVURHRSBBTkQgSlVSWSB3YXMgZ29pbmcgdG8gYmUgY3JhcCBhbmQgaXQgd2FzIC4gTWF5YmUgSWBtIHBzeWNoaWMgPzxiciAvPjxiciAvPiEhISEgTUlMRCBTUE9JTEVSUyAhISEhPGJyIC8+PGJyIC8+VGhlIG9wZW5pbmcgaXMgcmF0aGVyIHZpb2xlbnQgd2l0aCBzZXZlcmFsIHBlb3BsZSBnZXR0aW5nIGJsb3duIGF3YXkgZm9yIG5vIG1vcmUgcmVhc29uIHRoYW4gYmVpbmcgaW4gdGhlIHdyb25nIHBsYWNlIGF0IHRoZSB3cm9uZyB0aW1lIC4gSSBkb25gdCBrbm93IGFib3V0IHlvdSBidXQgSWBtIGdldGluZyBzbGlnaHRseSBmZWQgdXAgd2l0aCBleHBsb2l0aXZlIHZpb2xlbmNlIG9uc2NyZWVuIG5vd2FkYXlzIGFsb25nIHdpdGggYmFkIGxhbmd1YWdlICwgZXNwZWNpYWxseSBpZiBpdGBzIHNwb3V0ZWQgYnkgYWN0b3JzIGFzIGJhZCBhcyB0aGUgb25lcyBpbiB0aGlzIG1vdmllIC4gQW55d2F5IHRoZSBwbG90IHJldm9sdmVzIGFyb3VuZCB0aGUgYmFkIGR1ZGUgZ2V0dGluZyBleGVjdXRlZCBhbmQgY29taW5nIGJhY2sgdG8gcmVlayByZXZlbmdlIG9uIHRoZSBtYW4gd2hvIHNob3QgaGlzIHdpZmUgLiBPaCBkaWQgSSBtZW50aW9uIHRoZSBiYWQgZHVkZSBhbmQgaGlzIHdpZmUgbXVyZGVyZWQgYSBjb3VwbGUgb2YgcGVvcGxlIG9uIHRoZWlyIHdlZGRpbmcgbmlnaHQgPyBZZWFoIGhlYHMgYSBzZXJpb3VzIGJhZGFzcyBtb2ZvIC4gSW4gZmFjdCBoZWBzIHNvIGJhZCAoIEFuZCBJIGRvbmB0IG1lYW4gdGhlIGFjdGluZyAtIElgbGwgZ2V0IHRvIHRoYXQgaW4gYSBtb21lbnQgKSB0aGF0IGhlYHMgaW1wb3NzaWJsZSB0byB0YWtlIHNlcmlvdXNseSBhbmQgdGhpcyBpcyBiZWZvcmUgaGVgcyBleGVjdXRlZCBvbmx5IHRvIHJldHVybiBhcyBFbHRvbiBKb2huICwgRWx2aXMgLCBhIEZyZW5jaCBjaGVmIGV0YyAuIEkgd29uZGVyIGlmIEtlaXRoIERhdmlkIGdvdCBwYWlkIGZvciB0aGlzID8gYmVjYXVzZSBoZSBsb29rcyBsa2UgaGVgcyBoYXZpbmcgc28gbXVjaCBmdW4gb24gc2NyZWVuIHRoYXRgcyB0aGUgb25seSByZWFzb24gaGVgcyBwbGF5aW5nIHRoZSByb2xlIC4gV2hhdCBhIHBpdHkgdGhpcyByZXZpZXdlciBkaWRuYHQgaGF2ZSBhbnkgZnVuIHdoYXRzb2V2ZXIgd2F0Y2hpbmcgSlVER0UgQU5EIEpVUlkgLiBIZXkgbWF5YmUgdGhlIHByb2R1Y2VycyBjb3VsZCBzZW5kIG1lIEtlaXRoYHMgZmVlID8gR2F3ZCBvbmx5IGtub3dzIEkgZGVzZXJ2ZSBpdC48YnIgLz48YnIgLz5JIGRpc2xpa2VkIHRoaXMgbW92aWUgYSBsb3QgYXMgaWYgeW91IGhhZG5gdCBndWVzc2VkIGFuZCBteSBtYWluIGJlZWYgaXNuYHQgd2l0aCB0aGUgc3R1cGlkIHBsb3Qgb3IgdGhlIGNoZWFwIHByb2R1Y3Rpb24gdmFsdWVzIGJ1dCB3aXRoIGl0cyBhdHRpdHVkZSB0byB2aW9sZW5jZSAuIElmIGxpa2UgbWUgeW91YHZlIGhhZCBhIHdpbmUgYm90dGxlIGNyYWNrZWQgb3ZlciB5b3VyIGhlYWQgb3IgYmVlbiBraWNrZWQgaW4gdGhlIHJpYnMgdmVyeSBoYXJkIHNldmVyYWwgdGltZXMgeW91YGxsIGtub3cgdmlvbGVuY2UgaXMgYW4gb2JzY2VuZSBwYWluZnVsIHRoaW5nICwgYnV0IEpVREdFIEFORCBKVVJZIHdpbGwgaGF2ZSB5b3UgYmVsaWV2ZSB0aGF0IGlmIHlvdWByZSB0aHJvd24gdGhyb3VnaCBhIHdpbmRvdyAsIGNyYXNoIHRocm91Z2ggc29tZSBiYW5uaXN0ZXJzIGFuZCBmYWxsIHR3ZW50eSBvZGQgZmVldCBvbnRvIGEgdGFibGUgbm90IG9ubHkgd2lsbCB5b3UgYmUgdW5odXJ0IGJ1dCB5b3VgbGwgYmUgYWJsZSB0byBvdXRydW4gYSBjb3VwbGUgb2YgcmFiaWQgZGV2aWwgZG9ncyAuIEl0IGNvdWxkIG9mIGNvdXJzZSBiZSBhcmd1ZWQgdGhhdCBhbnkgZmlsbSBzdGFycmluZyBTbHkgLCBBcm5pZSBvciBCcnVjZSBhbHNvIHN1ZmZlcnMgZnJvbSB0aGlzIHNhbWUgZGlzaG9uZXN0IHNob3dpbmcgb2YgdmlvbGVuY2UgYnV0IHdpdGggSlVER0UgQU5EIEpVUlkgaXQgeWFua2VkIG15IGNoYWluKQAAAAAAAABACqgDCLkBELkBIpYDSXQncyB2ZXJ5IHNhZCB0aGF0IEx1Y2lhbiBQaW50aWxpZSBkb2VzIG5vdCBzdG9wIG1ha2luZyBtb3ZpZXMuIFRoZXkgZ2V0IHdvcnNlIGV2ZXJ5IHRpbWUuIE5pa2kgYW5kIEZsbyAoMjAwMykgaXMgYSBkZXByZXNzaW5nIHN0YWIgYXQgdGhlIGNhbWVyYS4gSXQncyB1bmZvcnR1bmF0ZSB0aGF0IGZyb20gdGhlIG1hbnkgbW92aWVzIHRoYXQgYXJlIG1hZGUgeWVhcmx5IGluIFJvbWFuaWEgLCB0aGUgd29yc3Qgb2YgdGhlbSBnZXQgdG8gYmUgc2VudCBhYnJvYWQgKCBlLmcuIENoaWNhZ28gSW50ZXJuYXRpb25hbCBGaWxtIEZlc3RpdmFsKS4gVGhpcyBtb3ZpZSB3aXRob3V0IGEgcGxvdCAsIGFjdGluZyBvciBzY3JpcHQgaXMgYSB3YXN0ZSBvZiB0aW1lIGFuZCBtb25leS4gU2NvcmU6IDAuMDIgb3V0IG9mIDEwLikAAAAAAAAAQAq5Egi6ARC6ASKnEkl0J3MgdW5saWtlbHkgdGhhdCBhbnlvbmUgZXhjZXB0IHRob3NlIHdobyBhZG9yZSBzaWxlbnQgZmlsbXMgd2lsbCBhcHByZWNpYXRlIGFueSBvZiB0aGUgbHlyaWNhbCBjYW1lcmEtd29yayBhbmQgYnVzeSAoYnV0IHNjcmF0Y2h5KSBiYWNrZ3JvdW5kIHNjb3JlIHRoYXQgYWNjb21wYW5pZXMgdGhpcyAxOTMzIHJlbGVhc2UuIEFsdGhvdWdoIHNvdW5kIGNhbWUgaW50byBnZW5lcmFsIHVzZSBpbiAxOTI4LCB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIGZpZnR5IHdvcmRzIHNwb2tlbiB0byB0ZWxsIHRoZSBzdG9yeSBvZiBhIHdvbWFuLCB1bmhhcHBpbHkgbWFycmllZCwgd2hvIGRlc2VydHMgaGVyIGh1c2JhbmQgZm9yIGEgeW91bmdlciBtYW4gYWZ0ZXIgYSByb21hbnRpYyBpbnRlcmx1ZGUgaW4gdGhlIHdvb2RzLjxiciAvPjxiciAvPlRoZSBtb3N0IHZpdmlkbHkgcGhvdG9ncmFwaGVkIHNjZW5lIGhhcyB0aGUgamVhbG91cyBodXNiYW5kIGdpdmluZyBhIGxpZnQgdG8gdGhlIHlvdW5nIG1hbiBmb3IgYSByaWRlIGludG8gdG93biwgcHJvY2VlZGluZyB0byBkcml2ZSBub3JtYWxseSB1bnRpbCBoZSByZWFsaXplcyB0aGUgbWFuIGlzIGhpcyB3aWZlJ3MgbG92ZXIuIEluIGEgZnJlbnp5IG9mIGplYWxvdXN5LCBoZSBkcml2ZXMgYXQgdG9wIHNwZWVkIHRvd2FyZCBhIHJhaWxyb2FkIGNyb3NzaW5nIGJ1dCBjaGFuZ2VzIGhpcyBtaW5kIGF0IHRoZSBsYXN0IG1vbWVudCwgbG9zaW5nIGhpcyBuZXJ2ZS4gSXQncyBwcm9iYWJseSB0aGUgbW9zdCB0ZW5zaW9uLWZpbGxlZCBzY2VuZSBpbiB0aGUgb3RoZXJ3aXNlIGRlY2lkZWRseSBzbG93LW1vdmluZyBhbmQgb2J2aW91c2x5IGNvbnRyaXZlZCBzdG9yeS48YnIgLz48YnIgLz5IRURZIExBTUFSUiBpcyBnaXZlbiB0aGUgc29ydCBvZiBjbG9zZS11cCB0cmVhdG1lbnQgbGF2aXNoZWQgb24gTWFybGVuZSBEaWV0cmljaCBieSBoZXIgZGlzY292ZXJlciwgYnV0IGhlciBiZWF1dHkgaGFkIG5vdCB5ZXQgYmVlbiByZWZpbmVkIGJ5IHRoZSBjb3NtZXRpY2lhbnMgYXMgdGhleSB3ZXJlIHdoZW4gc2hlIHdhcyB0cmFuc3BvcnRlZCB0byBIb2xseXdvb2QuIEhlciBwZXJmb3JtYW5jZSBjb25zaXN0cyBtb3N0bHkgb2YgbG9va2luZyBzYWQgYW5kIG1vcm9zZSB3aGlsZSBtb3VybmluZyB0aGUgbG9zcyBvZiBoZXIgbWFycmlhZ2Ugd2l0aCBvbmx5IGJyaWVmIGdsaW1wc2VzIG9mIGEgc21pbGUgd2hlbiBzaGUgZmluZHMgaGVyIHRydWUgbG92ZSAoQVJJQkVSVCBNT0cpLCB0aGUgaGFuZHNvbWUgeW91bmcgc3R1ZCB3aG8gcmV0cmlldmVzIGhlciBjbG90aGVzIGFmdGVyIGEgbnVkZSBzd2ltLjxiciAvPjxiciAvPlRoZSBzd2ltbWluZyBzY2VuZSBpcyB2ZXJ5IGJyaWVmLCBkaXNjcmVldGx5IHBob3RvZ3JhcGhlZCwgYW5kIG5vdCB3b3J0aCBhbGwgdGhlIGhlYXQgaXQgYXBwYXJlbnRseSBnZW5lcmF0ZWQuIFRoZSBsb3ZlLW1ha2luZyBzY2VuZSwgbGF0ZXIgb24sIGlzIGFsc28gYXJ0ZnVsbHkgcGhvdG9ncmFwaGVkIHdpdGggdGhlIHNvcnQgb2YgbHlyaWNhbCBwaG90b2dyYXBoeSBldmlkZW50IHRocm91Z2hvdXQgbW9zdCBvZiB0aGUgZmlsbS0tYXJ0ZnVsbHkgc28uIE1vcmUgaXMgbGVmdCB0byB0aGUgaW1hZ2luYXRpb24gd2l0aCB0aGUgdXNlIG9mIHN5bWJvbGlzbS0tYW5kIHRoaXMgaXMgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCBoYXMgb3RoZXJzIHByb2NsYWltaW5nIHRoZSBmaWxtIGlzIHNvbWUga2luZCBvZiBseXJpY2FsIG1hc3RlcnBpZWNlLjxiciAvPjxiciAvPk5vdCBzby4gSXQncyBkaXNhcHBvaW50aW5nLCBwcmltaXRpdmVseSBjcnVkZSBpbiBpdHMgc291bmQgcG9ydGlvbnMgKGluY2x1ZGluZyB0aGUgbGFib3Jpb3VzIHN5bXBob25pYyBtdXNpYyBpbiB0aGUgYmFja2dyb3VuZCkgYW5kIGNlcnRhaW5seSBNaXNzIExhbWFyciBpcyBmb3J0dW5hdGUgdGhhdCBMb3VpcyBCLiBNYXllciBzYXcgdGhlIGZpbG0gYW5kIG9uIHRoZSBiYXNpcyBvZiBpdCwgZ2F2ZSBoZXIgYSBjYXJlZXIgaW4gSG9sbHl3b29kLiBIZSBtdXN0IGhhdmUgc2VlbiBzb21ldGhpbmcgaW4gaGVyIHdvcmsgdGhhdCBJIGRpZG4ndC48YnIgLz48YnIgLz5JdCdzIGFwcGFyZW50IHRoYXQgdGhpcyB3YXMgY29uY2VpdmVkIGFzIGEgc2lsZW50IGZpbG0gd2l0aCB0aGUgY2FtZXJhIGRvaW5nIGFsbCB0aGUgd29yay4gVGhlIGphcnJpbmcgIndvcmtlcnMiIHNjZW5lIGF0IHRoZSBjb25jbHVzaW9uIGdvZXMgb24gZm9yIHRvbyBsb25nIGFuZCBpcyBhIGphcnJpbmcgaW50cnVzaW9uIHdoZXJlIG5vbmUgaXMgbmVlZGVkLiBJdCBmYWlscyB0byBlbmQgdGhlIGZpbG0gb24gdGhlIHByb3BlciBub3RlLikAAAAAAAAAQAqiCAi7ARC7ASKQCEl0J3MgZGlmZmljdWx0IHRvIGV4cHJlc3MgaG93IGJhZCB0aGlzIG1vdmllIGlzLiBFdmVuIGluIHRoZSAxOTUwcyB3aGVuIGludGVsbGVjdHVhbCBzZWFyY2hpbmcgZm9yIHRoZSBtZWFuaW5nIG9mIGxpZmUgd2FzIGZhc2hpb25hYmxlIGFuZCBiZWF0bmlrIHJlamVjdGlvbiBvZiBwaHlzaWNhbCBjb21mb3J0cywgY2xlYW4gY2xvdGhlcywgaGFpcmN1dHMsIGV0Yy4gd2FzIGEgY29tbW9uIHJlYWN0aW9uIHRvIHRoZSBzbXVnIG1pZGRsZS1jbGFzcyBtb3JlcyBvZiBib3RoIHRoZSBVU0EgYW5kIHdlc3Rlcm4gRXVyb3BlLCB0aGlzIG1vdmllIHdvdWxkIGhhdmUgYmVlbiBhIHN0aW5rZXIuIFRoZSBwbG90IGlzIGEgbWlzaG1hc2ggb2Ygc2V2ZXJhbCBkZWkgZXggbWFjaGluYSAoaWYgdGhhdCdzIHRoZSBjb3JyZWN0IExhdGluIGdyYW1tYXIpOyB0aGUgYWN0aW5nIGNvbnNpc3RzIG9mIGRlYWRwYW4gc3RhcmVzIGJyb2tlbiBieSBvY2Nhc2lvbmFsIGh5c3RlcmljcyAoYnkgdGhlIG1hbGUgbGVhZCBhcyB3ZWxsIGFzIHRoZSBmZW1hbGVzKTsgdGhlIGdyYXR1aXRvdXMgdmlldyBvZiBDYXRoZXJpbmUgRGVuZXV2ZSdzIChvciBzb21lYm9keSdzKSBicmVhc3RzIGFyZSB3b3J0aHkgb2YgYSBCdWR3ZWlzZXIgY29tbWVyY2lhbDsgdGhlIHJlcGVhdGVkIGNhY2FwaG9ub3VzIG9yY2hlc3RyYSByZWhlYXJzYWwgaW4gdGhlIGFiYW5kb25lZCBidWlsZGluZyBpcyBJJ20gc3VyZSBoZWF2eSB3aXRoIG1lYW5pbmcgaW4gdGhlIGRpcmVjdG9yJ3MgbWluZCBidXQgdG8gbWUgaXMganVzdCBvbmUgbW9yZSBzdHVwaWQgc3ltYm9sIHRocm93biBpbnRvIHRoaXMgbWVhbmluZ2xlc3MgbW92aWUgLS0gSSdtIHJhbnRpbmcgYmVjYXVzZSBteSB0aW1lIGhhcyBiZWVuIHdhc3RlZCB3YXRjaGluZyB0aGlzIHNjYW0gZXhjdXNlIGZvciBhbiBhcnQgZmxpYy4gVGhlIHNjZW5lcnkgaXMgYmVhdXRpZnVsIGFuZCB0aGUgc2V4IHNjZW5lIGlzIGhvdCAtLSBidXQgdW5kZXJuZWF0aCBoaXMgY2xvdGhlcywgdGhpcyBraW5nIGhhcyBubyBzdWJzdGFuY2UuKQAAAAAAAABACuUHCLwBELwBItMHSXQncyBiZWVuIGEgbG9uZyB0aW1lIHNpbmNlIEkgbGFzdCBzYXcgYSBtb3ZpZSB0aGlzIGJhZC4uIFRoZSBhY3RpbmcgaXMgdmVyeSBhdmVyYWdlLCB0aGUgc3RvcnkgaXMgaG9ycmlibHkgYm9yaW5nLCBhbmQgSSdtIGF0IGEgbG9zcyBmb3Igd29yZHMgYXMgdG8gdGhlIGV4ZWN1dGlvbi4gSXQgd2FzIGNvbXBsZXRlbHkgdW5vcmlnaW5hbC4gTywgYW5kIHRoaXMgaXMgYXMgbXVjaCBhIGNvbWVkeSBhcyBDbGludCBFYXN0d29vZCdzIGEgcHJlZ25hbnQgU2Nod2FyemVuZWdnZXIhIDxiciAvPjxiciAvPk9uZSBvZiB0aGUgZmlyc3Qgc2NlbmVzICh0aGUgb25lIHdpdGggdGhlIHRlbGV2aXNpb24gc2hvdyAtIHdoZXJlIHRoZSBoZWxsIGFyZSB5b3U/KSBnb3QgaXQgcmlnaHQgLSB0aGUgY2FzdCB3YXMgODAlIG9mIGxldCdzIGZhY2UgaXQgLSBmb3Jnb3R0ZW4gYWN0b3JzLiBJZiB0aGV5IHdlcmUgaG9waW5nIGZvciBhIGNhcmVlciByZWxhdW5jaCwgdGhlbiBJIHRoaW5rIGl0IG1pZ2h0IG5ldmVyIGhhcHBlbiB3aXRoIHRoaXMgb24gdGhlaXIgQ1YhIFRoZSBzY3JpcHQgaGFkIHRoZSBwb3RlbnRpYWwsIGJ1dCBuZWl0aGVyIDgwJSBvZiB0aGUgYWN0b3JzIG5vciB0aGUgZGlyZWN0b3IgKHdobydzIGFuIGFjdG9yIGFuZCBjbGVhcmx5IHNob3VsZCBzdGljayB0byBiZWluZyBhbiBhY3RvcikgcHVsbGVkIGl0IG9mZi4gRnJlZCBEdXJzdCB3YXMgdGhlIG9ubHkgb25lIHdobyBzZWVtZWQgYmV0dGVyIHRoYW4gYW55IG9mIHRoZSByZXN0LjxiciAvPjxiciAvPkknbSBzb3JyeSwgYnV0IGlmIHlvdSBldmVyIGNvbnNpZGVyIHdhdGNoaW5nIHRoaXMgLSBJIGhpZ2hseSByZWNvbW1lbmQgeW91IHR1cm4gdG8gc29tZXRoaW5nIGxlc3MgdHJhdW1hdGljLCBiZWNhdXNlIG5vdCBvbmx5IGl0J3MgYSB0b3RhbCBsb3NzIG9mIHRpbWUsIGJ1dCBhbHNvIGEgd2VhayBleGFtcGxlIG9mIHdoYXQgYmFkIGNpbmVtYSBsb29rcyBsaWtlLikAAAAAAAAAQAr4GAi9ARC9ASLmGEl0IG11c3Qgc2F5IHNvbWV0aGluZyBhYm91dCB0aGUgc3RhdGUgb2Ygb3VyIG5hdGlvbiB0aGF0IHRoaXMgcHJvZ3JhbW1lIGlzIG9uZSBvZiB0aGUgbW9zdCBwb3B1bGFyIGN1cnJlbnRseSBzY3JlZW5lZC4gPGJyIC8+PGJyIC8+VGhlICdzcXVhcmUnIGlzIHBlb3BsZWQgYnkgc3VjaCBhIG1pc2VyYWJsZSwgdW50cnVzdHdvcnRoeSwgYW1vcmFsLCBzcGl0ZWZ1bCwgdW5yZWxlbnRpbmdseSBkb3VyIGdyb3VwIG9mIGNoYXJhY3RlcnMgYXMgY2FuIGJlIGltYWdpbmVkLiBFdmVyeW9uZSBpcyBzdGFiYmluZyBzb21lb25lIGluIHRoZSBiYWNrLCBldmVyeW9uZSBpcyBhdHRlbXB0aW5nIHRvIGNvbW1pdCBhZHVsdGVyeSwgZXZlcnlvbmUgaXMgdHJ5aW5nIHRvIGNoZWF0IHNvbWVvbmUuIFRoYXQsIG9yIHRoZXkgYXJlIGJlaW5nIHN0YWJiZWQsIGN1Y2tvbGRlZCBvciBzd2luZGxlZC4gTm9ib2R5IGlzIGNoZWVyZnVsLiBOb2JvZHkgbGF1Z2hzLiBOb2JvZHkgaGFzIGEgYmxpbmRpbmcgc3Ryb2tlIG9mIGx1Y2sgb3IgYSByZWFsbHkgbmljZSBkYXkuIEl0J3MgaGVsbCwgd2l0aCBjb2NrbmV5IGFjY2VudHMuPGJyIC8+PGJyIC8+SSBzdXNwZWN0IHRoaXMgcHJvZ3JhbW1lIG11c3QgYmUgc3BvbnNvcmVkIGJ5IFRoZSBTYW1hcml0YW5zLiBJdCdzIHBlcmZlY3Qgdmlld2luZyBmb3IgdGhlIGRlcHJlc3NlZC4gSXQgZG9lc24ndCBjaGVlciB0aGVtIHVwOyB3aGF0IGl0IGRvZXMgZG8gaXMgcHJlc2VudCBhIHdob2xlIGNvbW11bml0eSBvZiBzdWNoIHRlcm1pbmFsbHkgZGVzcG9uZGVudCBzYWQtYXJzZXMgdGhhdCB2aWV3ZXJzIGFyZSBtb3ZlZCB0byBiZWxpZXZlIHRoZWlyIGxvdCByZWFsbHkgY291bGQgYmUgd29yc2UgLSB0aGV5IG1pZ2h0IGJlIGxpdmluZyBpbiAnQWxiZXJ0IFNxdWFyZScuPGJyIC8+PGJyIC8+QXBhcnQgZnJvbSB0aGUgYWJvdmU7IGFzIGEgcmVwcmVzZW50YXRpb24gb2YgTG9uZG9uJ3MgZWFzdCBlbmQsIGl0IGlzIHB1cmUgaG9rdW0uIFRoZSBwcm9ncmFtbWUtbWFrZXJzIGhhdmUgZXZpZGVudGx5IG5ldmVyIGJlZW4gYWNyb3NzIHRvd24uIFRoZSBmaXJzdCB0aGluZyB5b3UgZW5jb3VudGVyIG9uIHRoZSBNaWxlIEVuZCBSb2FkIGlzIGEgY29sb3NzYWwgbW9zcXVlLiBBbmQgdGhpcyBwcmV0dHktd2VsbCBkZWZpbmVzIHRoZSByYWNpYWwgbWFqb3JpdHkgb2YgdGhlIHBvcHVsYXRpb24uIFdoaXRlIEJyaXRpc2ggTG9uZG9uZXJzIGFyZSBhIGRpc3BlcnNlZCBhbmQgcmFwaWRseSBkaW1pbmlzaGluZyBtaW5vcml0eS4gQSBsYXJnZSBhZHZlcnRpc2VtZW50IGhvYXJkaW5nIHByZXNlbnRseSBuZWFyIHRoZSBCb3cgUm9hZCBmbHlvdmVyLCBhbmQgc3BvbnNvcmVkIGJ5IFRvd2VyIEhhbWxldHMgSGVhbHRoIENhcmUgYm9hc3RzIHRoYXQgJ0VpZ2h0IG91dCBvZiB0ZW4gbWVtYmVycyBvZiB0aGUgY29tbXVuaXR5IGNhbiBub3cgc2VlIHRoZWlyIGRvY3RvciBtb3JlIHF1aWNrbHknLiBUZW4gaGVhbHRoeSwgc21pbGluZyBmYWNlcyBiZWFtIGRvd24gYXQgdGhlIG9ic2VydmVyIGluIGNvbmZpcm1hdGlvbi4gRWlnaHQgb2YgdGhlbSBhcmUgZGFyay1za2lubmVkLi4uIDxiciAvPjxiciAvPldoYXQncyBtb3JlLCBJIHVzZWQgdG8gd29yayB3aXRoIGEgYnVuY2ggb2YgQW5nbG8tU2F4b24gLSBkYXJlIEkgc2F5ICdwdWtrYScgLSBjb2NrbmV5cyBhIGZldyB5ZWFycyBhZ28uIEFuZCBJIGNhbiB0ZWxsIHlvdSB0aGF0IGEgbW9yZSBvYm5veGlvdXNseSByYWNpc3QgZXhwZXJpZW5jZSBJJ3ZlIG5ldmVyIGhhZC4gRWFjaCBkYXkgd2FzIGxpa2UgYW4gT3N3YWxkIE1vc2VsZXkgcmFsbHkuIFRoZXkgY291bGRuJ3QgcGFzcyA1IG1pbnV0ZXMgd2l0aG91dCBkZW5pZ3JhdGluZyBzb21lIG90aGVyIHJhY2Ugb3IgbmF0aW9uYWxpdHkgdGhhbiB0aGVpciBvd24sIGFuZCBpbiB0ZXJtcyB0aGF0IHdlcmUgcmVwdWxzaXZlIGFuZCBvYnNjZW5lLiAnRmFja2luJyBQYWtpcycgYW5kICdmYWNraW4nIE1hY2Vyb29ucycgd2VyZSB0aGUgc21hbGwgY2hhbmdlIG9mIGNvbnZlcnNhdGlvbi4gSW4gZmFjdCB0aGVpciBlbnRpcmUgKGFuZCBleHRyZW1lbHkgbGltaXRlZCkgc3RvY2sgb2YgYWRqZWN0aXZlcyBmaXhhdGVkIHVwb24gc2V4LW9yZ2FucyBhbmQgdGhlaXIgYXBwbGljYXRpb24uIEFsZiBHYXJuZXR0IHdhcyBhIHBhcmFnb24gb2YgbGliZXJhbCB2aXJ0dWUgaW4gY29tcGFyaXNvbi48YnIgLz48YnIgLz5BbnkgcHJvZ3JhbW1lIHRoYXQgcHVycG9ydGVkIHRvIHJlcHJlc2VudCBMb25kb24ncyBuYXRpdmUgZWFzdC1lbmQgQ2F1Y2FzaWFucyBpbiB0aGVpciB0cnVlIG5hdHVyZSB3b3VsZCBiZSBjb21wbGV0ZWx5IHVuZml0IGZvciBicm9hZGNhc3QgLSBldmVuIGFmdGVyIHRoZSA5IG8tY2xvY2sgd2F0ZXJzaGVkLiBJbWFnaW5lIGEgS3UgS2x1eCBLbGFuIHNjcmlwdCB3cml0dGVuIGJ5IFF1ZW50aW4gVGFyYW50aW5vIGFuZCB5b3UnZCBiZSBzb21ld2hlcmUgbmVhciB0aGUgbWFyay4gQnV0IHdoZW4gdGhleSB3ZXJlbid0IGJlaW5nIGludmV0ZXJhdGUgYmlnb3RzIHRoZXkgd2VyZSBhdCBsZWFzdCBleHRyZW1lbHkgY2hlZXJmdWwuPGJyIC8+PGJyIC8+SSBkb24ndCBrbm93IGhvdyBzdWNoIGEgc29hcC1vcGVyYSBjYW1lIHRvIGJlLiBUaGlzIGltYWdpbmFyeSBjYXN0YXdheSBpc2xhbmQgb2Ygd2hpdGUgbWlzZXJ5IGhhcyBhYnNvbHV0ZWx5IG5vIGJlYXJpbmcgdXBvbiByZWFsIGN1bHR1cmUgd2hhdHNvZXZlci4gQW5kIGlmIHlvdSdyZSBvZiBhIGNvbXBhcmF0aXZlbHkgc2FuZ3VpbmUgZGlzcG9zaXRpb24sIGl0IHdpbGwgcXVpY2tseSByZWR1Y2UgeW91IHRvIHRlYXJzIG9mIGdyaWVmLiBDb21wYXJhdGl2ZWx5IG9yZGluYXJ5IGFjdG9ycyBwcmV0ZW5kaW5nIHRvIGJlIGNvbXBhcmF0aXZlbHkgb3JkaW5hcnkgY2hyb25pYy1kZXByZXNzaXZlcyB3aXRoIGNvY2tuZXkgYWNjZW50cyAtIHdoYXQncyB0aGUgcG9pbnQgb2YgdGhhdD88YnIgLz48YnIgLz5EdWxsLCBkcmVhcnksIHVucmVsZW50aW5nbHkgZGlzaWxsdXNpb25hbCwgYW5kIGV0aG5pY2FsbHkgcHJlcG9zdGVyb3VzLiBUaGUgbW9zdCBwb3B1bGFyIHByb2dyYW1tZSBvZiBhbiBhcHBhcmVudGx5IGRpc2Vhc2VkIGFuZCBkeWluZyBuYXRpb24uPGJyIC8+PGJyIC8+QXZvaWQgaXQgbGlrZSB0aGUgcGxhZ3VlLikAAAAAAAAAQAqsBwi+ARC+ASKaB0l0IGlzIHBsYXlpbmcgb24gU0hPV1RJTUUgcmlnaHQgbm93IGJ1dCBpcyBnb2luZyB0byBiZSByZWxlYXNlZCBhcyBhIG1vdmllIGNhbGxlZCBUSFJFRSBvciBoYXMgYmVlbiByZWxlYXNlZCBmb3IgMjAwNi4gTWVzcyB1cHMgaW5jbHVkZSBhIHN1cHBvc2VkIG51ZGUgYm9keSBjb21lcyBvdXQgb2YgdGhlIHdhdmVzIHdpdGggaGVyIGJvdHRvbXMgb24uIFlvdSBjYW4gaGF2ZSBmdW4gZmluZGluZyB0aGUgb3RoZXJzLiBJdCB3YXMgYSBkZWNlbnQgc3RyYW5kZWQsIGh1bmdyeSwgY29sZCwgY3JhenkgcGVyc29uIHZpZGVvIGJ1dCB0aGF0IGlzIGFib3V0IGl0LiBBbmQgb2YgY291cnNlIHdoYXQgd291bGQgYSBtb3ZpZSBiZSB3aXRob3V0IHNleC4gVGhlIGxhZHkgaGFzIGEgbmljZSBib2R5IGFuZCB0aGUgbWVuIGFyZSBwcmV0dHksIGJ1dCB0aGUgc3RvcnkgaXMgdGhlIHNhbWUgYXMgU3dlcHQgQXdheSBvciBBIFNhdmFnZSBpcyBMb29zZSB0eXBlIHdpdGggc29tZSBibG9vZC4gV29uZGVyIGlmIHRoZSBtb3ZpZSBzdHVkaW9zIGtub3cgdGhleSBtYWRlIGEgYmlnIGJvb2JvbyBhbmQgYWxyZWFkeSByZWxlYXNlZCB0aGlzIHNob3cgYW5kIG5vdyBnb25uYSByZWxlYXNlIGl0IGFzIFRIUkVFLiBCaWxseSBaYW5lIHNob3VsZCBoYXZlIHdvcm4gYSB0b3AgaGFpciBwaWVjZSBvciBzaGF2ZWQgaGlzIGhlYWQgY29tcGxldGVseS4gSnVhbiBEaSBQYWNlIGlzIGF3ZXNvbWUgYW5kIHRoZXJlIGlzIGEgY291cGxlIGdvb2Qgc2V4IHNjZW5lcy4gVGhlcmUgaXMgYSB2b29kb28gd29tYW4gdGhhdCBsb3ZlcyB0aGUgY2hhcmFjdGVyIERpIFBhY2UgcGxheXMgYW5kIGluIHJlYWwgbGlmZSBoZXIgbmFtZSBpcyBEaSBQYWNlIHRvby4gTm90IGF3YXJlIG9mIGFueSBjb25uZWN0aW9uIGJ1dCBwcm9iYWJseSBraW4gb3IgbWFycmllZC4pAAAAAAAAAEAK3wcIvwEQvwEizQdJc2FiZWxsZSBIdXBwZXJ0IGlzIGEgd29uZGVyZnVsIGFjdG9yLiBUaGUgZGlyZWN0b3Igb2YgIkxhIFBpYW5pc3RlIiB1bmRlcnN0YW5kcyB0aGlzLCBwcm92aWRpbmcgdGhlIHZpZXdlciB3aXRoIGxvbmcgdGFrZXMgb2YgSHVwcGVydCdzIGZhY2UsIGFuZCB0aGVzZSBhcmUgYSBwbGVhc3VyZSB0byBzZWUuIEh1cHBlcnQgaXMgbm90IGFuIGFuaW1hdGVkIGFjdG9yLS1zaGUgcmVnaXN0ZXJzIGVtb3Rpb24gd2l0aCB0aGUgc21hbGxlc3QgbGlmdCBvZiBhbiBleWVicm93IG9yIGZsaWNrZXIgb2YgYSBzbWlsZS48YnIgLz48YnIgLz5PdGhlciB0aGFuIHRoZSBlbmpveW1lbnQgb2Ygd2F0Y2hpbmcgYW4gZXhwZXJpZW5jZWQgYWN0b3IgZXhjZWwgaW4gaGVyIHByb2Zlc3Npb24sIHRoZXJlIGlzIG5vdGhpbmcgaW4gdGhpcyBtb3ZpZSB0aGF0IG1ha2VzIG1lIHdhbnQgdG8gcmVjb21tZW5kIGl0LiAoV2VsbCwgaWYgeW91IGVuam95IHNlbGYtbXV0aWxhdGlvbiwgc2Fkby1tYXNvY2hpc20sIGFuZCBiaXphcnJlIGJlaGF2aW9yLCAiTGEgUGlhbmlzdGUiIG1pZ2h0IHdvcmsgZm9yIHlvdS4gT3RoZXIgdGhhbiB0aGVzZSBhdHRyaWJ1dGVzLCBJIGNvdWxkIG5vdCBmaW5kIGFueSByZWRlZW1pbmcgdmFsdWUgaW4gaXQuKTxiciAvPjxiciAvPkJ1cmllZCBpbiBhbGwgdGhpcyBzdHJhbmdlIG1hdGVyaWFsIHRoZXJlIGlzIGEga2VybmVsIG9mIHRydXRoLiBQZW9wbGUgd2hvIGNvbXBldGUgYXQgdGhlIHZlcnkgaGlnaGVzdCBsZXZlbC0tbXVzaWNhbGx5LCBhdGhsZXRpY2FsbHksIHdoYXRldmVyLS1iZWdpbiBhcyBzdHJhbmdlIHBlb3BsZSwgYW5kIGFyZSBzaGFwZWQgaW50byBzdHJhbmdlciBwZW9wbGUgYnkgdGhlIGNvbXBldGl0aXZlIGVudmlyb25tZW50LjxiciAvPjxiciAvPk5vdCB3b3J0aCBhIHRyaXAgdG8gYSBtb3ZpZSB0aGVhdGVyIHRvIHJlbGVhcm4gdGhpcyBsaWZlIGxlc3Nvbi4gPGJyIC8+PGJyIC8+KQAAAAAAAABACsEUCMABEMABIq8USXMgdGhlcmUgYW55IG90aGVyIHRpbWUgcGVyaW9kIHRoYXQgaGFzIGJlZW4gc28gZXhoYXVzdGl2ZWx5IGNvdmVyZWQgYnkgdGVsZXZpc2lvbiAob3IgdGhlIG1lZGlhIGluIGdlbmVyYWwpIGFzIHRoZSAxOTYwcz8gTm8uIEFuZCBkbyB3ZSByZWFsbHkgbmVlZCB5ZXQgYW5vdGhlciB0cmlwIHRocm91Z2ggdGhhdCB0dXJidWxlbnQgdGltZT8gTm90IHJlYWxseS4gQnV0IGlmIHdlIG11c3QgaGF2ZSBvbmUsIGRvZXMgaXQgaGF2ZSB0byBiZSBhcyBzaGFsbG93IGFzICJUaGUgJzYwcyI/IDxiciAvPjxiciAvPkkgbGlrZSB0byB0aGluayB0aGF0IGNvLXdyaXRlcnMgQmlsbCBDb3V0dXJpZSBhbmQgUm9iZXJ0IEdyZWVuZmllbGQgaGFkIG1vcmUgaW4gbWluZCBmb3IgdGhpcyB0d28tcGFydCBtaW5pc2VyaWVzIHRoYW4gd2hhdCB1bHRpbWF0ZWx5IHJlc3VsdGVkLCBlc3BlY2lhbGx5IGdpdmVuIENvdXR1cmllJ3MgaW52b2x2ZW1lbnQgaW4gdGhlIHN1cGVyYiBIQk8gbW92aWUgIkRlYXIgQW1lcmljYTogTGV0dGVycyBIb21lIEZyb20gVmlldG5hbSIgd2hpY2ggdXRpbGl6ZWQgbGl0dGxlIG9yaWdpbmFsIG11c2ljIGFuZCBubyBvcmlnaW5hbCBmb290YWdlLCBsZXR0aW5nIHRoZSBzaWdodHMgYW5kIHNvdW5kcyBvZiB0aGUgdGltZSBzcGVhayBmb3IgdGhlbXNlbHZlcy4gVGhpcyBwcmVzZW50YXRpb24gaW50ZXJjdXRzIGZpbGUgZm9vdGFnZSB3aXRoIHRoZSBkcmFtYXRpYyBwcm9kdWN0aW9uLCBidXQgaXQgZG9lc24ndCBkbyBhbnlvbmUgYW55IGZhdm91cnMgYnkgdHJ5aW5nIHRvIGRvIHRvbyBtdWNoIGluIHRvbyBsaXR0bGUgdGltZTsgbGlrZSBzbyBtYW55IG9mIGl0cyBpbGssIGl0J3Mgc2VlbiBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIG9uZSBmYW1pbHkuIEJ1dCB0aGUgY2hpbGRyZW4gb2YgdGhlIGZhbWlseSBzZWVtIHRvIGJlIGludm9sdmVkIHRhbmdlbnRpYWxseSB3aXRoIGFsbW9zdCBldmVyeSBtYWpvciBldmVudCBvZiB0aGUgJzYwcyAoaXQncyBhbWF6aW5nIHRoYXQgb25lIG9mIHRoZW0gZG9lc24ndCBnbyB0byB0aGUgUm9sbGluZyBTdG9uZXMgZ2lnIGF0IEFsdGFtb250KSwgbWFraW5nIGl0IHNlZW0gbGVzcyBsaWtlIGEgcGVyaW9kIGRyYW1hIGFuZCBtb3JlIGxpa2UgYSBDbGlmZiBOb3RlcyB2ZXJzaW9uIG9mIHRoZSBkZWNhZGUuPGJyIC8+PGJyIC8+VGhlIG1ha2VycyBydXNoIHRocm91Z2ggaXQgc28gbXVjaCB0aGF0IHRoZXJlJ3MgbGl0dGxlIG9yIG5vIHRpbWUgdG8gZ2l2ZSB0aGUgY2hhcmFjdGVycyBhbnkgY2hhcmFjdGVyLCB3aXRoIHRoZSBzdGljayBmaWd1cmVzIGNhbGxlZCBvdXIgcHJvdGFnb25pc3RzIG9mZiBzY3JlZW4gZm9yIGFnZXMgYXQgYSB0aW1lIC0gdGhlIGNoaWxkcmVuJ3MgZmF0aGVyIGlzIGVzcGVjaWFsbHkgY2xpY2jDqWQgLSBhbmQgdGhlbiB3aGVuIHRoZXkncmUgYmFjayBvbiBCTEFNTU8hIGl0J3Mgc29tZXRoaW5nIGVsc2UuIEdhcnJ5IFRydWRlYXUgY291bGQgdGVhY2ggdGhlIGZpbG1tYWtlcnMgYSB0aGluZyBvciB0d28gYWJvdXQgZG9pbmcgdGhpcyBraW5kIG9mIHRoaW5nIHByb3Blcmx5LiBJbiBmYWlybmVzcywgSmVycnkgTydDb25uZWxsLCBKb3JkYW5hIEJyZXdzdGVyLCBKZXJlbXkgU2lzdG8sIEp1bGlhIFN0aWxlcyBhbmQgQ2hhcmxlcyBTLiBEdXR0b24gZ2l2ZSB0aGVpciBtYXRlcmlhbCB0aGUgb2xkIGNvbGxlZ2UgdHJ5LCBidXQgdGhleSdyZSB3YXN0ZWQgKGVzcGVjaWFsbHkgdGhlIGxhdHRlciB0d28pOyBpdCdzIHVuZGVuaWFibHkgZ29vZCB0byBzZWUgRGF2aWQgQWxhbiBHcmllciBpbiBhIHJhcmUgc3RyYWlnaHQgcm9sZSBhcyBhY3RpdmlzdCBGcmVkIEhhbXB0b24sIGFuZCBSb3Nhbm5hIEFycXVldHRlIChpbiBhbiB1bmNyZWRpdGVkIGNhbWVvIGluIHBhcnQgMikgaXMgYWx3YXlzIHdlbGNvbWUuPGJyIC8+PGJyIC8+V2hhdCBpc24ndCB3ZWxjb21lIGlzIGhvdyAiVGhlICc2MHMiIGRyb3ducyB0aGUgc291bmR0cmFjayB3aXRoIHNvIG1hbnkgcGVyaW9kIHNvbmdzIHRoYXQgaXQgdWx0aW1hdGVseSByZWR1Y2VzIGl0cyBhbHJlYWR5IG1pbmltYWwgZWZmZWN0IChhbmQgdGhpcyBtYXkgd2VsbCBiZSB0aGUgb25seSB0aW1lIGFuIEFtZXJpY2FuIFRWIHByZXNlbnRhdGlvbiBhYm91dCBwb3N0LTYwcyBBbWVyaWNhIG5ldmVyIG1lbnRpb25zIHRoZSBCcml0aXNoIEludmFzaW9uIC0gbm8gQmVhdGxlcywgbm8gUm9sbGluZyBTdG9uZXMuLi4gdGhlbiBhZ2FpbiwgdGhlcmUncyBvbmx5IHNvIG11Y2ggdHVuZXMgeW91IGNhbiBzaG9laG9ybiBpbnRvIGEgc291bmR0cmFjayBhbGJ1bSwgcmlnaHQ/KS4gQ2FwcGluZyBpdHMgc3VyZmFjZS1za2ltbWluZyBhcHByb2FjaCB0byBib3RoIHRoZSB0aW1lIGFuZCB0aGUgcGxvdCB3aXRoIGFuIGFsbW9zdCBvdXQtb2YtcGxhY2UgaGFwcHkgZW5kaW5nLCAiQW1lcmljYW4gRHJlYW1zIiBhbmQgIlRoZSBXb25kZXIgWWVhcnMiIGRpZCBpdCBhbGwgbXVjaCwgbXVjaCBiZXR0ZXIuIE5vdGhpbmcgdG8gc2VlIGhlcmUgeW91IGNhbid0IHNlZSBlbHNld2hlcmUsIHBlb3BsZS4uLiBleGNlcHQgZm9yIEp1bGlhIFN0aWxlcyBkb2luZyB0aGUgdHdpc3QsIHRoYXQgaXMuKQAAAAAAAABACpsMCMEBEMEBIokMSW5hcHByb3ByaWF0ZS4gVGhlIFBHIHJhdGluZyB0aGF0IHRoaXMgbW92aWUgZ2V0cyBpcyB5ZXQgYW5vdGhlciBodWdlIG1pc3N0ZXAgYnkgdGhlIE1QQUEuIFdoYWxlIFJpZGVyIGdldHMgYSBQRy0xMyBidXQgdGhpcyBtb3ZpZSBnZXRzIGEgUEc/IFBsZWFzZS4gUGFyZW50cyBkb24ndCBiZSBmb29sZWQsIHRha2luZyBhbiBlbGVtZW50YXJ5IHNjaG9vbCBjaGlsZCB0byB0aGlzIG1vdmllIGlzIGEgaHVnZSBtaXN0YWtlLiBUaGVyZSB3ZXJlIG51bWVyb3VzIHRpbWVzIEkgZm91bmQgbXlzZWxmIGJlaW5nIHVuY29tZm9ydGFibGUgbm90IGp1c3QgYmVjYXVzZSB0aGUgaHVtb3Igd2FzIGluYXBwcm9wcmlhdGUgZm9yIGtpZHMsIGJ1dCBhbHNvIGJlY2F1c2UgaXQgd2FzIHRvdGFsbHkgb3V0IG9mIHRoZSBibHVlIGFuZCB1bm5lY2Vzc2FyeS48YnIgLz48YnIgLz5CdXQgYWxsIHRoYXQgYXNpZGUsIFRoZSBDYXQgaW4gdGhlIEhhdCBpcyBzdGlsbCBhIHRlcnJpYmxlIG1vdmllLiBUaGUgY2FzdGluZyBhbmQgb3ZlcmFsbCBsb29rIG9mIHRoZSBtb3ZpZSBhcmUgdGhlIG9ubHkgc2F2aW5nIGdyYWNlcy4gVGhlIGJlYXV0aWZ1bCBLZWxseSBQcmVzdG9uIGFuZCB0aGUgYWx3YXlzIGxpa2VhYmxlIChvciBoYXRlYWJsZSBpbiB0aGlzIGNhc2UpIEFsZWMgQmFsZHdpbiBhcmUgYm90aCBnb29kIGluIHRoZWlyIHJvbGVzIGV2ZW4gdGhvdWdoIFByZXN0b24gaXMgYWxtb3N0IHRvbyBiZWF1dGlmdWwgZm9yIGEgcm9sZSBsaWtlIHRoaXMuIFRoZSBraWRzIGFyZSBjb25kaXRpb25lZCBhY3RvcnMgYW5kIGl0IHNob3dzLCBlc3BlY2lhbGx5IHdpdGggRGFrb3RhIEZhbm5pbmcuIEZhbm5pbmcgaXMgdGhlIG9ubHkgaHVtYW4gYXNwZWN0IG9mIHRoZSBmaWxtIHRoYXQga2VwdCBtZSB3YXRjaGluZyBhbmQgbm90IHRocm93aW5nIHRoaW5ncyBhdCB0aGUgc2NyZWVuLjxiciAvPjxiciAvPkRpZCBJIG1lbnRpb24gdGhlcmUgd2FzIGFuIG92ZXJzaXplZCB0YWxraW5nIGNhdCBpbiB0aGlzIG1vdmllPyBNaWtlIE15ZXJzIGlzIGFic29sdXRlbHkgZGVwbG9yYWJsZS4gSSBkaWRuJ3QgbGlrZSBoaW0gYXMgdGhlIHZvaWNlIG9mIFNocmVrLCBhbmQgSSB0cnVseSBiZWxpZXZlIG5vdyB0aGF0IE15ZXJzIHNob3VsZCBub3QgYmUgYWxsb3dlZCBuZWFyIHRoZSByZWFsbSBvZiBjaGlsZHJlbidzIGZpbG1zIGV2ZXIgYWdhaW4uIEhpcyBwb3J0cmF5YWwgb2YgVGhlIENhdCBpcyBhIHNsaWdodGx5IHRvbmVkIGRvd24gdmVyc2lvbiBvZiBGYXQgQmFzdGFyZCBhbmQgQXVzdGluIFBvd2Vycy48YnIgLz48YnIgLz5JbiB0aGUgZW5kLCB0aGUgY2F0IHNob3VsZCBub3QgaGF2ZSBjb21lLCBoZSBzaG91bGQgaGF2ZSBzdGF5ZWQgYXdheSwgYnV0IGhlIGNhbWUsIGV2ZW4gaWYganVzdCBmb3IgYSBkYXksIGhlIHJ1aW5lZCA4MiBtaW51dGVzIG9mIG15IGxpZmUsIDgyIG1pbnV0ZXMgb2YgcGVyc29uYWwgYW5nZXIgYW5kIHN0cmlmZS48YnIgLz48YnIgLz5UaGUgQ2F0IGluIHRoZSBIYXQgbWF5IGJlIHRoZSB3b3JzdCBraWRzIG1vdmllIGV2ZXIuKQAAAAAAAABACs8SCMIBEMIBIr0SSW4gd2F0Y2hpbmcgdGhpcyBvZmYgYW5kIG9uIGZvciBhIGZldyBzZWFzb25zLCB0d28gdGhpbmdzIGNvbWUgdG8gbWluZDogT25lIC0gd29uZGVyaW5nIHdoYXQga2luZCBvZiBnaXJsIHdhbnRzIHRvIGJlIGEgIm1vZGVsIiBhbmQgdHdvIC0gcnVuIHRvIHRoZSBuZWFyZXN0IGljZSBjcmVhbSBzdG9yZSBhbmQgaGF2ZSBhIGxvdyBmYXQgc3VuZGFlLjxiciAvPjxiciAvPkkgdHJpZWQgdG8gYmUgYSBmYW4gYmVjYXVzZSBJIGxpa2VkIHRoZSBpZGVhIG9mIHRoaXMgcmVhbGl0eSBzaG93IGNvbXBldGl0aW9uLiBObyBvdGhlciAiZmFtb3VzIiBtb2RlbCB0aG91Z2h0IG9mIHRoaXMsIGFuZCBpdCBpcyB2ZXJ5IGFkbWlyYWJsZSBmb3IgVHlyYSBCYW5rcyB0byBkbyBzby4gQnV0IGFzIHRoZSBzZXJpZXMgZ29lcyBvbiBhbmQgb24gSSd2ZSBjb21lIHRvIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhpcyBpcyBhIHNvcnJ5IGxvdCBvZiBmb2xrcyB0cnlpbmcgdG8gbWFrZSBhIG1vdW50YWluIG91dCBvZiBhIG1vbGVoaWxsLiBXb21lbiBzaG91bGRuJ3Qgd2F0Y2ggdGhpcywgdGVlbnMgc2hvdWxkIHN0YXkgY2xlYXIgb2YgaXQgdW5sZXNzIHRoZXkncmUgZG9pbmcgYm9vayByZXBvcnRzIG9uIHRoZSBzdWJqZWN0LjxiciAvPjxiciAvPk1hbnkgd29tZW4gdHJ5IG91dCBmb3Igc2xvdHMgdG8gY29tcGV0ZSBmb3IgIkFtZXJpY2FzIE5leHQgVG9wIE1vZGVsIi4gVGhleSBsaXZlIHRvZ2V0aGVyLCBjYXQgZmlnaHQgdG9nZXRoZXIsIGNyeSB0b2dldGhlciwgZ2V0IHB1dCB0aHJvdWdoIHBvaW50bGVzcyBtb2RlbGluZyBzaG9vdHMgd2l0aCBwb2ludGxlc3MgbW9kZWxpbmcgcGVvcGxlIGFuZCBmYXNoaW9uYXRhcyBhbmQgZ2V0IGVsaW1pbmF0ZWQgYW5kIGFsbW9zdCBhbGwgb2YgdGhlbSBjbGFpbSwgIllvdSB3aWxsIHNlZSBtZSBhZ2FpbiIuIEhlY2ssIEknbSB0cnlpbmcgdG8gc2VlIHdoYXQgaGFwcGVuZWQgdG8gdGhlIG9uZXMgdGhhdCBESUQgd2luLCBhY3R1YWxseS48YnIgLz48YnIgLz5UaGlzIGlzIHRoZSBkcmVhbSBvZiBzb21lIGdpcmxzLCBhbmQgZ29vZCBmb3IgdGhlbS4gSW4gd2F0Y2hpbmcgdGhpcyBJIGhvcGUgdGhlIG90aGVyIGdpcmxzIHRoYXQgc2VlIHRoaXMgYW5kIHJ1biBsaWtlIEhhZGVzIHRoZSBvdGhlciB3YXkgLSBsaWtlIHRvIGNvbGxlZ2UuPGJyIC8+PGJyIC8+SSBqdXN0IGhhcHBlbmVkIHRvIHdhdGNoIG1vcmUgb2YgdGhpcyByZWNlbnQgc2Vhc29uIGJlY2F1c2Ugb2YgdGhlICJwbG95IiBvZiBmdWxsIGZpZ3VyZWQgbW9kZWxzIGpvaW5pbmcgdGhlIGdyb3VwLiBUaGF0IGV2ZW4gbWFkZSBtZSB0aGluayBtb3JlIG9mIHRoaXMgYXMgYSBzb3JyeSBsb3Qgb2YgZm9sa3MuIFRoZSAiZnVsbCBmaWd1cmVkIG1vZGVscyIgd2VyZSBubyBtb3JlIHRoYW4gYXZlcmFnZSBzaXplZCBsYWRpZXMgY29tcGV0aW5nIHdpdGggd2hhdCBJIHRoaW5rIGlzIHRoZSB0aGlubmVzdCBncm91cCBvZiBtb2RlbHMgdGhleSBldmVyIGNob3NlIC0gc28gb2YgY291cnNlIHRoYXQgd291bGQgbWFrZSB0aGVtIGxvb2sgZXZlbiBmYXR0ZXIgLSBhICJwbG95IiBmYXNoaW9uYXRhcyB1c2UgYWxsIHRoZSB0aW1lLiBCYWQsIGJhZCwgVHlyYSBhbmQgY3Jldy48YnIgLz48YnIgLz5CdXQgdG8gYmUgZmFpciwgIkFtZXJpY2FzIE5leHQgVG9wIE1vZGVsIiBpcyBub3QgYWJvdXQgImZ1bGwgZmlndXJlZCIgbW9kZWxzLCBpdCdzIGFib3V0IHByb2plY3RpbmcgYW4gaW1hZ2luZWQgaW1hZ2UgYSBiZWF1dHkgdGhhdCBjYW4gYmUgbWFzcyBtYXJrZXRlZCBhbmQgc29sZCBhcyB0aGUgdWx0aW1hdGUgaW4gYmVhdXR5IC0gYW5kIHRoaXMgc2hvdyBpcyBqdXN0IGxvb2tpbmcgZm9yIHRoZSBuZXh0IGZyZXNoIHBpZWNlIG9mIG1lYXQgdG8gYWRkIHRvIHRoZSBtaXguIEhlbmNlIHRoZSBuYW1lIG9mIHRoZSBzaG93LiBIZW5jZSB0aGUgc29ycnkgbG90IG9mIGp1ZGdlcywgcGhvdG9ncmFwaGVycywgYXNzb2NpYXRpb25zLiBIZW5jZSBUeXJhIGFuZCBoZXIgY29uc2lzdGVudCAidGhpcyB3YXMgbWUiIHBsdWdzIGV2ZXJ5IGNhbWVyYSBhbmdsZSB5b3UgY2FuIGdldC4gQnV0IHRoZW4gYWdhaW4sIHRoYXQgSVMgdGhlIG9uZSB0aGluZyBJIGxpa2UgYWJvdXQgdGhpcyBzaG93IC0gdGhlIGV4LW1vZGVsIGdpdmluZyBvdGhlcnMgd2hvIHdvdWxkbid0IGhhdmUgdGhlIGNoYW5jZSAtLSBhIGNoYW5jZSB0byBlbnRlciB0aGUgZG9vcnMuIEJ1dCBhZnRlciB0aGF0Li4uZXZlcnl0aGluZyBlbHNlIGlzIHN0YXR1cyBxdW8gZm9yIHRoYXQgaW5kdXN0cnkgd2hpY2ggaXMgd2h5IHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgb3Igd2VlayB0byB3ZWVrIGludGVyZXN0IGluIHRoZSBwcm9ncmFtLikAAAAAAAAAQAqLBgjDARDDASL5BUluIGFsbCwgaXQgdG9vayBtZSB0aHJlZSBhdHRlbXB0cyB0byBnZXQgdGhyb3VnaCB0aGlzIG1vdmllLiBBbHRob3VnaCBub3QgdG90YWwgdHJhc2gsIEkndmUgZm91bmQgYSBudW1iZXIgb2YgdGhpbmdzIHRvIGJlIG1vcmUgdXNlZnVsIHRvIGRlZGljYXRlIG15IHRpbWUgdG8sIHN1Y2ggYXMgdGFraW5nIG9mZiBteSBmaW5nZXJuYWlscyB3aXRoIHNhbmRwYXBlci48YnIgLz48YnIgLz5UaGUgYWN0b3JzIGludm9sdmVkIGhhdmUgdG8gZmVlbCBhYm91dCB0aGUgc2FtZSBhcyBwZW9wbGUgd2hvIHN0YXIgaW4gaGVycGVzIG1lZGljYXRpb24gY29tbWVyY2lhbHMgZG87IHBlb3BsZSB3b24ndCByZWFsbHkgcGF5IHRvIHNlZSBlaXRoZXIsIHRoZSBub3RvcmlldHkgeW91IGVhcm4gd29uJ3QgYmUgdGhlIGJlc3QgZm9yIHlvdSBwZXJzb25hbGx5LCBidXQgYXQgbGVhc3QgdGhlIGNvbW1lcmNpYWxzIGdldCBhaXIgdGltZS48YnIgLz48YnIgLz5UaGUgZmlyc3Qgb25lIHdhcyBiYWQsIGJ1dCB0aGlzIGdhdmUgdGhlIHdvcmQgYmFkIGEgd2hvbGUgbmV3IGRlZmluaXRpb24sIGJ1dCBpdCBkb2VzIGhhdmUgb25lIGdvb2QgZmVhdHVyZTogaWYgeW91ciBraWRzIGJ1ZyB5b3UgYWJvdXQgbGV0dGluZyB0aGVtIHdhdGNoIFItcmF0ZWQgbW92aWVzIGJlZm9yZSB5b3Ugd2FudCB0aGVtIHRvLCB0aWUgdGhlbSBkb3duIGFuZCBwb3AgdGhpcyBsaXR0bGUgZ2VtIGluLiBXYXRjaCB0aGUgd2hpbmluZyBzdG9wIGFuZCB0aGUgdGVhcnMgYmVnaW4uIDspKQAAAAAAAABACoQMCMQBEMQBIvILSW4gYWxsIHRydXRoLCB0aGlzIHJlYWxseSBpc24ndCBhICJtb3ZpZSIgc28gbXVjaCBhcyBhbiBleHRlbmRlZCBmaW5hbCBlcGlzb2RlOyBieSB0aGlzIEkgbWVhbiB0aGF0LCBoYWQgeW91IE5PVCBmb2xsb3dlZCB0aGUgVFYgc2VyaWVzIChIb21pY2lkZTogTGlmZSBPbiBUaGUgU3RyZWV0KSBJIHN1c3BlY3QgdGhhdCB5b3Ugd291bGQgaGF2ZSBhIGhhcmQgdGltZSBmb2xsb3dpbmcgdGhpcyBtYWRlLWZvci10diBtb3ZpZS4gSGF2aW5nIHNhaWQgdGhhdCwgIkhvbWljaWRlOiBUaGUgTW92aWUiIGlzIHN0aWxsIGEgZ3JlYXQgd2F0Y2guIEkgdGhpbmsgaXQgc2F5cyBhIGxvdCBhYm91dCBhIHRlbGV2aXNpb24gcHJvZHVjdGlvbiB0aGF0IEVWRVJZIHNpbmdsZSBjYXN0IG1lbWJlciB3b3VsZCByZXR1cm4sIG1hbnkgYWZ0ZXIgeWVhcnMgb2YgYWJzZW5jZSwgdG8gb25jZSBhZ2FpbiBwb3J0cmF5IHRoZWlyIGNoYXJhY3RlcnMgYW5kIGJyaW5nIGNsb3N1cmUgdG8gYW4gaW5jcmVkaWJsZSBwcm9ncmFtLiBUaGUgbW92aWUgYnJpbmdzIG91dCB0aGF0IHNlbnNlIG9mICJmYW1pbHkiLCBub3Qgb25seSBhbW9uZ3N0IHRoZSBjaGFyYWN0ZXJzLCBidXQgYW1vbmdzdCB0aGUgYWN0b3JzLCBhcyB3ZWxsLiBJdCdzIGFsbCB2ZXJ5IGJpdHRlci1zd2VldCBrbm93aW5nIHRoYXQgdGhpcyB3aWxsIGJlIHRoZSBMQVNUIHRpbWUgd2Ugd2lsbCBzZWUgdGhlbSBhbGwgdG9nZXRoZXIgYWdhaW4gdW5kZXIgdGhlIHRpdGxlIG9mIEhPTUlDSURFLiBTdG9yeS13aXNlLCBJIGZvdW5kIHRoaXMgZmlsbSBzb21ld2hhdCBsYWNraW5nLiBHaWFyZGVsbG8ncyBtYXlvcmFsIGNhbmRpZGFjeSBzZWVtcyBwYXJ0aWN1bGFybHkgY29udHJpdmVkLCBhbmQgSSBmZWx0IGhpcyBzaG9vdGluZyBjb3VsZCd2ZSBiZWVuIGRlYWx0IHdpdGggd2l0aGluIHRoZSBwYXJhbWV0ZXJzIG9mIGhpcyByZWd1bGFyIHBvc2l0aW9uLCBhcyBMZWl1dGVuYW50LiBBbHNvLCBEZXQuIEJheWxpc3MncyBleHRyZW1lIHBsb3QgdHdpc3QsIHdoaWNoIHdhcyBsZWZ0IGhhbmdpbmcgYXQgc2VyaWVzIGVuZCwgaXMgZmluYWxseSByZXNvbHZlZCwgYnV0IEksIGZvciBvbmUsIE5FVkVSIGZlbHQgdGhhdCBpdCBuZWVkZWQgdG8gYmU7IEkgZW5qb3llZCBiZWluZyBsZWZ0IHdpdGggYSBteXN0ZXJ5IChsZXQgdXMgcmVjYWxsIHRoYXQgdGhlIHZlcnkgZmlyc3QgZXBpc29kZSdzIGZpcnN0IGNhc2UgYWxzbyB3ZW50IHVuc29sdmVkIGZvciB0aGUgZW50aXJlIHNlcmllcyBydW4hKS4gQXMgYSBERVZPVEVEIGZhbiBvZiB0aGUgVFYgc2VyaWVzIEkgY2FuIGxvdmUgdGhpcyBtb3ZpZSwgYW5kIHRoZSBmYWN0IHRoYXQgaXQgZXZlbiBnb3QgbWFkZSBhZnRlciBIOkxPVFMgaGFkIGJlZW4gY2FuY2VsZWQsIGJ1dCBJIHdvdWxkIG5vdCByZWNvbW1lbmQgaXQgdG8gYW55b25lIHdobyBoYXNuJ3QgaGFkIHRoZSBzbGlnaHRlc3QgZXhwb3N1cmUgdG8gdGhlIHNlcmllcy4gTm93LCBpZiB0aGV5J2QganVzdCByZWxlYXNlIGl0IG9uIERWRC4uLikAAAAAAAAAQArxBgjFARDFASLfBkluIGEgbW92aWUgdGhhdCBmb2xsb3dzIGEgc3RydWdnbGluZyBhY3RvciwgcGxheWVkLCBldmlkZW50bHksIGJ5IGEgc3RydWdnbGluZyBhY3RvciwgdGhpcyBkb2VzIG5vIGZhdm91cnMgZm9yIENocmlzIEtsZWluLiBIZSBzdHJ1Z2dsZXMgdG8gYnJpbmcgYW55dGhpbmcgbWVtb3JhYmxlIHRvIHRoZSByb2xlIGFuZCBtZWFuZGVycyBvbiB0aHJvdWdoIHRoZSBzaGFsbG93IHNjcmlwdCBtYW5hZ2luZyB0byBkaXNwbGF5LCB3aGF0IGNvdWxkIG9ubHkgYmUgZGVzY3JpYmVkIGFzLCBhIGJsYW5kIGxlYWRpbmcgbWFuLiBUaGUgc3RvcnkgZXhpc3RzLCBidXQgdGhhdCBpcyBhbGwsIGFuZCBmYWlscyB0byBzaG93IGFueSBiYXNpYyBzdGFydCwgbWlkZGxlIGFuZCBlbmQgYW5kIHRoZSB2aWV3ZXIgaXMgbGVmdCBzaHJ1Z2dpbmcgaGlzIHNob3VsZGVycyBmZWVsaW5nIGFzIHRob3VnaCBub3RoaW5nIGluIHRoZSBwYXN0IGhvdXIgYW5kIHRocmVlIHF1YXJ0ZXJzIGhhcyByZWFsbHkgaGFwcGVuZWQuPGJyIC8+PGJyIC8+T25lIGJyaWdodCBsaWdodCBpbiB0aGUgbWlkc3Qgb2YgdGhpcyBpcyBGcmVkIER1cnN0LCB3aG8gbWFuYWdlcyB0byBzdGFuZCBvdXQgYWJvdmUgaGlzIHNlZW1pbmdseSBhdmVyYWdlbHkgdGFsZW50ZWQgY28tc3RhcnMgYW5kIGRvZXMgYSBzZW1pLWRlY2VudCBqb2Igb2YgYnJpbmdpbmcgdGhlIGJhY2t3YXJkIGNoYXJhY3RlciBvZiBMZWdkZSB0byBsaWZlLiBXaGV0aGVyIEZyZWQgY2FuIHJlLWNyZWF0ZSB0aGlzIHdoZW4gd29ya2luZyB3aXRoIGEgaGlnaGVyIGNhbGlicmUgb2YgY2FzdCByZW1haW5zIHRvIGJlIHNlZW4gYnV0IEknbCBiZSB3YXRjaGluZyBvdXQgZm9yIGhpbSBpbiBmdXR1cmUuKQAAAAAAAABACt8NCMYBEMYBIs0NSW4gMTk5MywgInRoZSB2aXNpdG9ycyIgd2FzIGFuIGVub3Jtb3VzIGhpdCBpbiBGcmFuY2UuIFNvLCB0aGUgc2VxdWVuY2Ugd2FzIGluZXZpdGFibGUgYW5kIHVuZm9ydHVuYXRlbHksIHRoaXMgc2VxdWVuY2UgcmFua3MgYW1vbmcgdGhlIHdvcnN0IG9uZXMgZXZlciBtYWRlLiA8YnIgLz48YnIgLz5UaGlzIGlzIGEgbW92aWUgdGhhdCBkb2Vzbid0IGtlZXAgaXRzIHByb21pc2VzLiBJbmRlZWQsIGl0J3Mgc3VwcG9zZWQgdG8gdGVsbCBhIHNvbGUgc3RvcnkuIEplYW4gUmVubyBtdXN0IGdvIGluIHRoZSB0d2VudGlldGggY2VudHVyeSBhbmQgdGFrZSBDaHJpc3RpYW4gQ2xhdmllciBiYWNrIGluIHRoZSBNaWRkbGUgQWdlcyBzbyB0aGF0IHRpbWUgY2FuIG5vcm1hbGx5IGZvbGxvdyBpdHMgY291cnNlLiBUaGUgcHJvYmxlbSBpcyB0aGF0IENsYXZpZXIgZmVlbHMgY29tcGxldGVseSBhdCBlYXNlIGluIHRoZSB3b3JsZCBvZiB0aGUgdHdlbnRpZXRoIGNlbnR1cnksIGFuZCBzbyBtYWtlIGhpbSBnZXQgYmFjayBpbiB0aGUgTWlkZGxlcyBBZ2VzIGlzIHJhdGhlciBoYXJkLi4uIEluc3RlYWQgb2YgdGhpcywgdGhlIG1vdmllIGdvZXMgb24gc2V2ZXJhbCBvdGhlciBzdG9yaWVzIHdpdGhvdXQgc3VjY2VlZGluZyBpbiBmb2xsb3dpbmcgdGhlIG1haW4gcGxvdC4gQXMgYSBjb25zZXF1ZW5jZSwgdGhlIG1vdmllIGJlY29tZXMgc29tZXRpbWVzIG11ZGRsZS1oZWFkZWQsIHNvbWV0aW1lcyBhIGJpdCBvZiBhIG1lc3MuPGJyIC8+PGJyIC8+QnV0IHRoZSBtb3ZpZSBhbHNvIHN1ZmZlcnMgZnJvbSB0aGUgcGVyZm9ybWFuY2Ugb2YgbmVhcmx5IGFsbCB0aGUgYWN0b3JzLiBSZW5vIGFuZCBDbGF2aWVyIGZhbGwgaW50byB0aGUgdHJhcCB0aGF0IGhvd2V2ZXIgdGhleSBjb3VsZCBhdm9pZCBpbiB0aGUgZmlyc3QgbW92aWU6IHRoZXkncmUgZ29pbmcgb3ZlciB0aGUgdG9wIGFuZCBiZWNvbWUgYW5ub3lpbmcuIFRoZW4sIHdoeSBkaWQgSmVhbi1NYXJpZSBQb2lyw6kgdGhlIGZpbG0tbWFrZXIgZW5nYWdlIE11cmllbCBSb2JpbiBpbiB0aGUgZmVtYWxlIG1haW4gcm9sZT8gSGUgbWFkZSBhIG1pc3Rha2UgYmVjYXVzZSBzaGUgc2VlbXMgaWxsLWF0LWVhc2UgYW5kIGlzIGFic29sdXRlbHkgcGl0aWZ1bC4gVGhlIG90aGVyIGFjdG9ycyBhcmVuJ3QgYmV0dGVyOiBNYXJpZS1Bbm5lIENoYXplbCBpcyBub25leGlzdGVudCBhbmQgQ2hyaXN0aWFuIEJ1amVhdSwgdW5iZWFyYWJsZS48YnIgLz48YnIgLz4gT2YgY291cnNlLCB0aGUgbW92aWUgY29udGFpbnMgYSBmZXcgZ29vZCBtb21lbnRzIHdpdGggZWZmaWNpZW50IGdhZ3MgYnV0IGl0IG9mdGVuIGZhbGxzIGludG8gdnVsZ2FyaXR5IGFuZCBlYXNpbmVzcy4gQ2VydGFpbiBzZXF1ZW5jZXMgYW5kIGRpYWxvZ3MgYXJlIGFmZmVjdGVkLiBJdCBhbHNvIGFwcGVhcnMgaG9sbG93IGJlY2F1c2UgUG9pcsOpIHRha2VzIGJhY2sgZWxlbWVudHMgdGhhdCBzZWN1cmVkIHRoZSBzdWNjZXNzIG9mIHRoZSBmaXJzdCBtb3ZpZS4gVGh1cywgYSB5b3VuZyBnaXJsIHRha2VzIFJlbm8gZm9yIGEgY2xvc2UgcmVsYXRpdmUgb2YgaGVyIGZhbWlseSBhbmQgYXNrcyBoaW0gdG8gdGFrZSBwYXJ0IGluIGhlciB3ZWRkaW5nLjxiciAvPjxiciAvPkEgbGFib3JlZCBhbmQgZGlzYXBwb2ludGluZyBmb2xsb3ctdXAuIEFueXdheSwgd2hhdCdzIHRoZSBpbnRlcmVzdCBvZiB0aGlzIG1vdmllIG90aGVyd2lzZSBjb21tZXJjaWFsPzxiciAvPjxiciAvPikAAAAAAAAAQAq1BAjHARDHASKjBEltIGEgaHVnZSBNIExpbGxhcmQgZmFuIHRoYXQncyB3aHkgSSBlbmRlZCB1cCB3YXRjaGluZyB0aGlzIG1vdmllLiBIb25lc3RseSBJIGRvdWJ0IHRoYXQgaWYgaGUgd2Fzbid0IGluIHRoZSBtb3ZpZSBpIHdvdWxkIG9mIGVuam95ZWQgaXQgYXMgbXVjaCBvciBldmVuIHdhdGNoZWQgaXQgYnV0IG9uY2UgSSBkaWQgd2F0Y2ggaXQgcmVhbGl6ZSB0aGUgc3Rvcnkgd2FzIHByZXR0eSBkZWNlbnQuIEEgYmFkIGVuZGluZyBJIG11c3Qgc2F5IGJ1dCBJIGRpZCBzZWUgaXQgY29taW5nLiBJdCdzIGEgbG93IGJ1ZGdldCBtb3ZpZSBhbmQgc29tZSBvZiB0aGUgYWN0b3JzIHdlcmVuJ3QgcmVhbGx5IGdvb2QgYnV0IGFsbCBpbiBhbGwgSSByYXRlZCB0aGlzIG1vdmllIDcvMTAuPGJyIC8+PGJyIC8+VGhlIHN1c3BlbnNlIG9mIHdvbmRlcmluZyB3aGF0IExpbGxhcmQgd2FzIGFjdHVhbGx5IHVwIHRvIHdhcyB3aGF0IHJlYWxseSBrZWVwZWQgbWUgaW50ZXJlc3RlZCBpbiB0aGlzIG1vdmllLjxiciAvPjxiciAvPkl0cyBhIGdvb2QgcmVudGFsITxiciAvPjxiciAvPjcvMTApAAAAAAAAAEAK2hwIyAEQyAEiyBxJbGwtY29uY2VpdmVkIHNlcXVlbCguLnRoZSBhYnN1cmQgaWRlYSBvZiBoYXZpbmcgdGhlIGtpbGxlciBzbm93bWFuIG9uIHRoZSByYW1wYWdlIGF0IGFuIGlzbGFuZCByZXNvcnQgd2hlcmUgdGhlcmUgaXMgbm8gc25vdyBvciBjb2xkIHdlYXRoZXIpYnJpbmdzIGJhY2sgdGhlIHNwaXJpdCBvZiB0aGUgcHN5Y2hvcGF0aCwgcmV0dXJuaW5nIHRoYW5rcyB0byBhIHNjaWVudGlmaWMgZXhwZXJpbWVudCBwcm92aWRpbmcgZm9yZWlnbiBlbGVtZW50cyB3aGljaCByZWludHJvZHVjZSBsaWZlIHRvIGhpcyBtb2xlY3VsZXMoLi5pdCdzIHRoZSBiZXN0IEkgY291bGQgZG8gdG8gZXhwbGFpbiB0aGlzIHByZXBvc3Rlcm91cyBjb25jZXB0KS48YnIgLz48YnIgLz5JIGNvdWxkIGdvIGludG8gZGVwdGggYWJvdXQgaG93IGhlIHdpbmRzIHVwIGF0IHRoZSBpc2xhbmQgaW4gb3JkZXIgdG8gc2xheSBudW1lcm91cyB0b3VyaXN0cywgYnV0IEkgc2ltcGx5IGZpbmQgbm8gcmVhc29uIHRvIGJvdGhlciBiZWNhdXNlIGl0J2QgYWxsIGJlIHNvIGV4aGF1c3RpbmcuIEFueXdheSwgdGhlIGZpbG1tYWtlcnMgdGhpbmsgaXQgd2lzZSB0byBraWxsIG9mZiB0aGUgcHJldHR5IGdpcmxzIG5vdCB0ZW4gbWludXRlcyBhZnRlciB0aGVpciBhcnJpdmFsKC4uSSBtZWFuIHNlcmlvdXNseSwgd2h5IHdvcnJ5IHdpdGggZXZlbiBpbnRyb2R1Y2luZyB0aGVtIHRvIHVzIGlmIHdlIGNhbid0IGVuam95IG91ciBleWUgY2FuZHkgbm8gbG9uZ2VyIHRoYXQgdGhpcz8hKS48YnIgLz48YnIgLz5UaGUgInNub3cgYW52aWwiIG11cmRlciBzY2VuZSB0YWtlcyB0aGUgY2FrZS4gSWNlIGljaWNsZXMgcHJvdHJ1ZGUgZnJvbSB0aGUgYmVhY2gncyBzYW5kIHNvIHRoYXQgYSB2aWN0aW0gY2FuIGZhbGwgb24gdGhlbS4gT2gsIGFuZCBhbm90aGVyIGdpcmwgaXMgc3RhYmJlZCB3aXRoIGEgcGFpciBvZiB3ZWVuaWUgdG9uZ3MuPGJyIC8+PGJyIC8+TG9vayBJIGdldCB3aGF0J3MgY29taW5nIHRvIG1lIHdoZW4gSSBzaXQgZG93biB0byB3YXRjaCBhIGtpbGxlciBzbm93bWFuIG1vdmllLi5zdWNoIGEgcmlkaWN1bG91cyBzdXBlcm5hdHVyYWwgc2xhc2hlciB3aWxsIGVpdGhlciB0aWNrbGUgeW91ciBmdW5ueWJvbmUoIk9oLCBpdCdzIHN1Y2ggYSB3b25kZXJmdWxseSBjaGVlc3kgaG9ycm9yIG1vdmllISIpb3IgaGF2ZSB5b3UgcG9uZGVyaW5nIHdoeSB0aGUgaGVsbCB5b3UncmUgd2FzdGluZyB0aW1lIHdpdGggc3VjaCBub25zZW5zZS4gSmFjayBGcm9zdCBoYXMgdGhlIHBvd2VyIHRvIGZyZWV6ZSB3YXRlciguLnRoZW4gaG93IHdlcmUgdGhleSBhYmxlIHRvIG1lbHQgaGltIGluIHRoZSBmaXJzdCBmaWxtPylhbmQgY2F1c2VzIHRoZSBpc2xhbmQgcmVzb3J0IHRvIHNub3cuIE9uZSBzZXF1ZW5jZSBoYXMgSmFjayBmcmVlemluZyBwb29sIHdhdGVyLCBlbmNhc2luZyBhIHN3aW1taW5nIG1vZGVsIHVuZGVyIHRoZSBzaGVldCwgcmVzdWx0IGJlaW5nIGhlciBkcm93bmluZyB3aXRoIG5vd2hlcmUgdG8gZXNjYXBlLk9oLCB0aGVyZSdzIGFsc28gYSByZWNyZWF0aW9uIG9mIHRoZSAidG9uZ3VlIHN0dWNrIHRvIHRoZSBpY3kgcG9sZSIgYml0IGZyb20gVGhlIENocmlzdG1hcyBTdG9yeSgiQ293YXRvbmdhIGR1ZGUhIikuPGJyIC8+PGJyIC8+SSBnb3R0YSBoYW5kIGl0IHRvIHRoZSBjYXN0LCB0aG91Z2guLnRoZXkncmUgcmVhbCB0cm9vcGVycyBmb3IgdHJ5aW5nIHRvIG1ha2UgdGhpcyB3cmV0Y2hlZCBtYXRlcmlhbCBlbnRlcnRhaW5pbmcuIENocmlzdG9waGVyIEFsbHBvcnQoLi5wZXJoYXBzIHVud2lzZWx5KXJldHVybnMgYXMgU2FtLCB0byBmYWNlIGhpcyBvbGQgbmVtZXNpcywgYXMgZG9lcyBFaWxlZW4gU2VlbGV5LCBhcyBoaXMgd2lmZS4gVGhlIGF0dGVtcHRzIGF0IHRvbmd1ZS1pbi1jaGVlayBodW1vciguLmZvciBtZSwgYXQgbGVhc3QpIGZlbGwgZmxhdCwgYnV0IHRoZSBjYXN0IHNvbGRpZXJzIG9ud2FyZCB0cnlpbmcgdG8gbWFrZSB0aGUgbW9zdCBvZiBhIHZlcnkgZGlmZmljdWx0IHNpdHVhdGlvbiwgd2l0aCBzcGlyaXRlZCBwZXJmb3JtYW5jZXMgdGhleSBkbyB0aGVpciBiZXN0IHRvIHJpc2UgYWJvdmUgdGhlIHBpdGlmdWwgcHJlbWlzZSBhbmQgd29lZnVsIGRpYWxvZ3VlLjxiciAvPjxiciAvPkEgZGV2ZWxvcG1lbnQgb2NjdXJzIHdoaWNoIGluY3JlYXNlcyB0aGUgZGFuZ2VyIHRvd2FyZHMgdGhvc2Ugc3RpbGwgYXJvdW5kIHRvIGZhY2Ugb2ZmIHdpdGggSmFjaywgaGlzIGdlbmV0aWNhbGx5IGFsdGVyZWQgd2F0ZXIgbW9sZWN1bGVzLCB0aGFua3MgdG8gdGhlIGludHJvZHVjZWQgZm9yZWlnbiBlbGVtZW50cywgYWxsb3cgaGltIHRvIHdpdGhzdGFuZCBjb29sYW50L2FudGktZnJlZXplLCBhbmQsIGV2ZW4gd29yc2UsIGhlIG5vdyBjYW4gcmVwcm9kdWNlLi50aHJvdWdoIGluZGlnZXN0aW9uLCBKYWNrIGhhY2tzIHVwIHdoYXQgYXBwZWFyIHRvIGJlIHNub3diYWxscyB3aGljaCBoYXRjaCB0byByZXZlYWwgbGl0dGxlIHNub3diYWxscyB3aXRoIGJsYWNrIGV5ZXMsIG1vdXRoIGFuZCBzaGFycCB0ZWV0aCEgVGhlIGtpbGxlciBzbm93bWFuIGNvc3R1bWUgYW5kIGxpdHRsZSBzbm93YmFsbCBwdXBwZXRzIGludHJvZHVjZWQgbGF0ZXIgaW4gdGhlIGZpbG0gbWlnaHQgcHJvZHVjZSBiZWxseS1sYXVnaHMgaWYgeW91IGFyZSBpbiB0aGUgbW9vZCBmb3Igc3VjaCBzaGVuYW5pZ2FucywgYnV0IEkgcGVyc29uYWxseSBmb3VuZCB0aGlzIGp1bmsgcmF0aGVyIGhva2V5KC4udGhhdCdzIHRoZSBwdXJwb3NlIGJlaGluZCBpdCwgSSBzdXBwb3NlLCBjaGVhcCBndWZmYXdzIGZyb20gdGhvc2Ugd2lsbGluZyB0byBlbWJyYWNlIHRoaXMpYW5kIHVuYmVhcmFibGUuVGhlIHNub3diYWxsIG9mZnNwcmluZyBpcyBhbiBvYnZpb3VzIGhvbWFnZSB0byBHcmVtbGlucyB3aGVyZSB3ZSBnZXQgYSBiYXIgc2NlbmUgd2hlcmUgdGhlIGxpdHRsZSBiYXN0YXJkcyBhcmUgY2VsZWJyYXRpbmcgaW4gbnVtYmVyIG92ZXIgdGVycm9yaXppbmcgdmljdGltcyBhdCB0aGUgcmVzb3J0LiBUaGUgd2VhcG9uIGFnYWluc3QgdGhlbS4uYmFuYW5hcyEgSXQncyBleHBsYWluZWQgdGhhdCB3aGVuIEphY2sgd2VudCB0byBraWxsIFNhbSBpbiB0aGUgZmlyc3QgZmlsbSwgYm90aCBmZWxsIGluIGEgdHJ1Y2sgYmVkIGZ1bGwgb2YgYW50aS1mcmVlemUoLi5hbiBpY2ljbGUgZW1lcmdpbmcgZnJvbSBKYWNrJ3MgYmVsbHkgd2FzIHBlbmV0cmF0aW5nIFNhbSdzIGNoZXN0IHdoZW4gaGUgcHVzaGVkIHRoZW0gb3V0IGEgd2luZG93IGludG8gdGhlIHRydWNrIGJlZCwgYW5kIEkgZ3Vlc3MgaW4gdGhlaXIgYmVpbmcgImJlaW5nIGxpbmtlZCIgYnkgdGhlIGljaWNsZSwgSmFjayBpbmhlcml0ZWQgU2FtJ3MgYmFuYW5hIGFsbGVyZ3ksIG9yIHNvIHRoaXMgaXMgd2hhdCB3ZSBhcmUgbGVkIHRvIGJlbGlldmUhKWFuZCBpbiBkb2luZyBzbyBib3RoICJtZXJnZWQiIGluIGEgc2Vuc2UuPGJyIC8+PGJyIC8+UGhldywgc3VjaCBhIGZpbG0gYXMgdGhpcyBkZWZpZXMgc2ltcGxlIGV4cGxhbmF0aW9uLiBJdCdzIGEgZmlsbSB3aXRoIGVmZmVjdHMgYW5kIHBsb3Qgc28gdGVycmlibGUsIG9uZSBtaWdodCBmaW5kIHRoZSBwcmVzZW50YXRpb24gZW5qb3lhYmxlIGJlY2F1c2Ugb2YgaXQncyBtYW55IGZhaWxpbmdzLikAAAAAAAAAQAqRCwjJARDJASL/CklrIGtub3cgaXQgaXMgaW1wb3NzaWJsZSB0byBrZWVwIGFsbCBkZXRhaWxzIG9mIGEgYm9vayBpbiBhIG1vdmllLiBCdXQgdGhpcyBtb3ZpZSBoYXMgY2hhbmdlZCBuZWFybHkgZXZlcnl0aGluZyB3aXRob3V0IGFueSByZWFzb24uIEZ1cnRoZXJtb3JlIG1hbnkgY2hhbmdlcyBoYXZlIG1hZGUgdGhlIHN0b3J5IGlsbG9naWNhbC4gQSBmZXcgZXhhbXBsZXM6IDEpIGluIHRoZSBtb3ZpZSAiUGF1bCBSZW5hdWxkIiByZWFsbHkgbWVldHMgUG9yaW90IGJlZm9yZSBoZSBkaWVzIChpbiB0aGUgYm9vayBQb2lyb3Qgb25seSBnZXRzIGEgbGV0dGVyKSwgdGVsbGluZyBoaW0gaGUgaXMgYWZyYWlkIHRvIGJlIGtpbGxlZC4gVGhpcyBpcyBjb21wbGV0ZWx5IHN0dXBpZCBiZWNhdXNlIGlmIFJlbmF1bGRzIHBsYW4gd291bGQgaGF2ZSBzdWNjZWVkZWQsIFBvaXJvdCB3b3VsZCBoYXZlIGtub3duIHRoYXQgdGhlIGRlYWQgbWFuIHdvdWxkIG5vdCBoYXZlIGJlZW4gUmVuYXVsZC4oUG9pcm90IHdhcyBpbiB0aGUgbW9yZ3VlIHdoZW4gTXJzIFJlbmF1bGQgaWRlbnRpZmllZCB0aGUgdmljdGltKS4gMikgVGhlIG1vdmllIGhhcyAiY29tYmluZWQiIHR3byBwZXJzb25zIGludG8gb25lISAiQ2luZGVyZWxsYSIgaGFzIGJlZW4gcmVtb3ZlZCBieSB0aGUgbW92aWUuIFRoZSBnaXJsIEhhc3RpbmdzIGZhbGxzIGluIGxvdmUgd2l0aCBhbmQgdGhlIGV4LWdpcmxmcmllbmQgb2YgSmFjayBSZW5hdWxkIGFyZSBvbmUgcGVyc29uIGluIHRoZSBtb3ZpZSEgV2h5IGZvciBnb2QncyBzYWtlPyAzKUhhc3RpbmdzIGZpbmRzIHRoZSB2aWN0aW1zIGNhdXNlIGhlIGlzIHN1Y2ggYSBiYWQgZ29sZiBwbGF5ZXIuIFRvdGFsbHkgdW5mdW5ueSBhbmQgc3R1cGlkLiA0KSBUaGUgbW92aWUgdGVsbHMgc2VjcmV0cyBtdWNoIHRvbyBlYXJseSAoZm9yIGV4YW1wbGUgYXQgdGhlIHZlcnkgYmVnaW5uaW5nKS4gU28geW91IGtub3cgdGhpbmdzIHlvdSBzaG91bGRuJ3Qga25vdy4gNSkgVGhlIG11cmRlcmVyIGdldHMgc2hvdCBhdCB0aGUgZW5kIGJ5IGEgcGVyc29uIHdobyBkb2Vzbid0IGV4aXN0cyBpbiB0aGUgYm9vay4gUGVyaGFwcyBiZWNhdXNlIHRoZSBwZXJzb24gKCJjaW5kZXJlbGxhIikgd2hvIHN0b3BzIHRoZSBtdXJkZXJlciBkb2VzIG5vdCBleGlzdHMgaW4gdGhlIG1vdmllLiA2KVRoZSBib29rIGlzIHZlcnkgY29tcGxleC4gVGhlIG1vdmllIHRha2VzIG9ubHkgYWJvdXQgOTAgbWludXRlcy4gU3VyZSBpdCBpcyBkaWZmaWN1bHQgdG8gaW5jbHVkZSBhbGwgdGhlIG5lY2Vzc2FyeSBkZXRhaWxzIGJ1dCBpdCBpcyBpbXBvc3NpYmxlIGlmIHlvdSBpbmNsdWRlIHN0dXBpZCB0aGluZ3Mgd2hpY2ggd2VyZSBub3QgaW4gdGhlIGJvb2sgYW5kIGhhdmUgbm8gbWVhbmluZyAoZS5nLiBiaWN5Y2xlIHJhY2UpLikAAAAAAAAAQAq+BwjKARDKASKsB0lmIHlvdSB3YW50IFNjcmVhbSBvciBhbnl0aGluZyBsaWtlIHRoZSBiaWctc3R1ZGlvIGhvcnJvciBwcm9kdWN0IHRoYXQgd2UgZ2V0IGZvcmNlZCBvbiB1cyB0aGVzZSBkYXlzIGRvbid0IGJvdGhlci4gVGhpcyB3ZWxsLXdyaXR0ZW4gZmlsbSBrZXB0IG1lIHVwIHRoaW5raW5nIGFib3V0IGFsbCBpdCBoYWQgdG8gc2F5LiBJbXBvcnRhbmNlIG9mIG15dGggaW4gb3VyIGxpdmVzIHRvIG1ha2UgaXQgbWFrZSBzZW5zZSwgaG93IGNoaWxkcmVuIGludGVycHJldCB0aGUgd29ybGQgKGFuZCB0aGUgdmlvbGVuY2UgaW4gaXQpLCBvdXIgcmFuc2Fja2luZyBvZiB0aGUgZW52aXJvbm1lbnQgYW5kIGlnbm9yYW5jZSBvZiBpdHMgaGlzdG9yeSBhbmQgbGVnZW5kcy4uIGFsbCBoZXJlLCBidXQgbm90IGZsYXRseSBvbiB0aGUgc3VyZmFjZS4gWW91IGNvdWxkIHRlY2huaWNhbGx5IGNhbGwgaXQgYSAibW9uc3RlciBtb3ZpZSIgZXZlbiB0aG91Z2ggdGhlIFdlbmRpZ28gZG9lcyBub3QgdGFrZSBwaHlzaWNhbCBmb3JtIHVudGlsIHRoZSBlbmQsIGFuZCB0aGVuIGl0J3MgZXZlbiB1cCB0byB5b3UgYW5kIHlvdXIgYmVsaWVmcyBhcyB0byB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIGxlZ2VuZGFyeSBzcGlyaXQvYmVhc3QuIFNvbWUgc3RhbmRhcmQgdGhyaWxsZXIgZWxlbWVudHMgZm9yIHRob3NlIGxvb2tpbmcganVzdCBmb3IgdGhlIGJhc2ljcyBhbmQgdGhlIGZpbG0gbmV2ZXIgYm9yZXMsIHRob3VnaCBpbiBmYWN0IHRoZSBsZXNzIHlvdSBzZWUgb2YgdGhlIGNyZWF0dXJlLCB0aGUgYmV0dGVyLiBGZXNzZW5kZW4gc3VjY2Vzc2Z1bGx5IGNvbnRpbnVlcyBHZW9yZ2UgUm9tZXJvJ3MgdHJhZGl0aW9uIG9mIHVzaW5nIHRoZSBnZW5yZSBhcyBwYXJhYmxlIGFuZCBhcyBhIGRpc2N1c3Npb24gZm9ydW0gd2hpbGUgc3RpbGwga2VlcGluZyB1cyBjcmVlcGVkIG91dC4pAAAAAAAAAEAK8gwIywEQywEi4AxJZiB5b3UgcmVhbGx5IGxvdmVkIEdXVFcsIHlvdSB3aWxsIGZpbmQgcXVpdGUgZGlzYXBwb2ludGluZyB0aGUgc3RvcnkuIFRob3NlIHdobyBtYXkgdGhpbmsgdGhpcyBpcyBqdXN0IGFib3V0IGEgcm9tYW50aWMgc3RvcnkgYW5kIHRoZSBzb3V0aCwgd2lsbCBiZSBwcm9iYWJseSBzYXRpc2ZpZWQgd2l0aCB0aGlzIGRlY2VudCBUViBwcm9kdWN0aW9uIChhbHRvdWdodCBJIGNvbnNpZGVyIGFuIGltcG9ydGFudCBtaXNjYXN0IHRoZSBjaG9pY2UgZm9yIFNjYXJsZXR0KS4gQnV0LCBsZXQgbWUgc2F5IHRoYXQgY29uc2lkZXJpbmcgdGhlIG5vdmVsLCBub3RoaW5nIGdvb2QgY291bGQgY2FtZSBvdXQgb2YgdGhpcy48YnIgLz48YnIgLz5JJ3ZlIHJlYWQgR1dUVyBtb3JlIHRoYW4gMjAgdGltZXMgYW5kIEkgY2FuIHJlYWxseSBhcHByZWNpYXRlIHRoZSBhZGFwdGF0aW9uIE1ycy4gTWl0Y2hlbGwgZGlkIGZvciB0aGUgZmlsbS4gSXQgdG9vayBtZSBzb21lIHRpbWUgdG8gdW5kZXJzdGFuZCBob3cgZ29vZCB0aGUgZW5kaW5nIHdhczogU2NhcmxldHQga25ldyBmb3Igc3VyZSBzaGUgd2FzIGdvaW5nIHRvIHJlY292ZXIgUmhldHQsIHNpbmNlIHNoZSBhbHdheXMgZ290IHdoYXQgc2hlIHdhbnRlZC4gQnV0IHRoZXJlIHdhcyBubyBraXNzIGluIHRoZSBlbmQuPGJyIC8+PGJyIC8+VGhlbiBBbGV4YW5kcmEgUmlwbGV5IGNhbWUgdG8gImZpeCIgdGhpcyBieSBzaG93aW5nIHVzIGV4YWN0bHkgaG93IHBlcmZlY3QgYW5kIG1pZ2h0eSBTY2FybGV0dCBjb3VsZCBiZSwgYW5kIG9mIGNvdXJzZSwgZGVzY3JpYmluZyBpbiBkZXRhaWwgaG93IGV4YWN0bHkgc2hlIGdldHMgUmhldHQgYmFjayBldmVuIHdoZW4gc2hlIGhhZCBhbiBpbXBvcnRhbnQgYWZmYWlyIHdpdGggc29tZW9uZSBlbHNlIChub3RoaW5nIGNvdWxkIGhhdmUgYmVlbiBmdXJ0aGVyIGZyb20gTXJzLiBNaXRjaGVsbCBtaW5kLCBJIGFtIHN1cmUpLjxiciAvPjxiciAvPlRoZSBzdG9yeSBiZXR3ZWVuIHRoZXNlIHBvaW50cyBpcyBpbiBteSBvcGluaW9uIGp1c3QgYSBsb25nIGFuZCBib3JpbmcgcmlkZSBtYWRlIHVwIHRvIHRpZSBlbmRzLCBzaG93aW5nIG9mZiBjb3N0dW1lcyBhbmQgc2NlbmFyaW9zIGp1c3QgdG8gZ2l2ZSB1cyBhbiBvYnZpb3VzIGFuZCB0b3RhbGx5IHVubmVjZXNzYXJ5IGVuZGluZy48YnIgLz48YnIgLz5JZiBNYXJnYXJldCBNaXRjaGVsbCBjb3VsZCBjYW1lIHRvIGxpdmUgYWdhaW4sIHNoZSB3b3VsZCBkaWUgb25lIG1vcmUgdGltZSBhdCB0aGUgdmVyeSBtb21lbnQgc2hlJ2QgZmluZCBvdXQgd2hhdCBTY2FybGV0dCBiZWNhbWUgYWZ0ZXIgR1dUVy48YnIgLz48YnIgLz5TdXJlIGl0J3Mgbm90IGZhaXIgdG8gY29tcGFyZSB0aGlzIHRvIHRoZSBvcmlnaW5hbCBidXQgdGhpcyBpcyBub3QgR1dUVyBmYXVsdC4gSXNuJ3QgaXQ/IElzIGl0IGFueSBnb29kIGlmIEkgZG9uJ3QgY29tcGFyZSBpdCB0byB0aGUgb3JpZ2luYWw/IE1heWJlLiBTb3JyeSB0byBzYXkgSSBkb24ndCByZWFsbHkgY2FyZS48YnIgLz48YnIgLz5JIHdvdWxkIGV4cGVjdCBsaXR0bGUgbW9yZSBjb21wcm9taXNlIHRvIGNvbnRpbnVlIHNvbWVvbmUgZWxzZSdzIChzdWJlcmIpIHdvcmssIG90aGVyd2lzZSBkb24ndCBldmVuIHRyeS4pAAAAAAAAAEAK5wgIzAEQzAEi1QhJZiB5b3UgbWFrZSBhIHN1c3BlbnNlIG1vdmllIGl0IGlzIGtpbmQgb2YgaW1wb3J0YW50IHRoYXQgdGhlICJ2aWxsYWluIiBub3QgYmUgbW9yZSBzeW1wYXRoZXRpYyB0aGFuIHRoZSAidmljdGltIi4gQW5kIHRoaXMgZmFpbHMgbWlzZXJhYmx5LiBJdCB3YXMgc28gdGVycmlibGUgYW5kIGZydXN0cmF0aW5nIHRvIHdhdGNoIHRoYXQgSSB3YXMgYWN0dWFsbHkgbW92ZWQgdG8gcmVnaXN0ZXIgYW5kIGNvbW1lbnQuIE9LLCBzbyB0aGUgaHVzYmFuZCBpcyByaWNoIGFuZCBjb2NreS4gVGhlcmUgYXJlIHdvcnNlIHZpY2VzLCBhbmQgdGhlIGNhYmFuYSBib3kgYW5kIHdpZmUgZGlzcGxheSBwbGVudHkuIFRoZSBodXNiYW5kIGlzIGEgamVyayBiZWNhdXNlIGhlIC0gdW0sIGRpZG4ndCBhcHByb3ZlIG9mIHRoZSBjYWJhbmEgYm95IHBoeXNpY2FsbHkgYXNzYXVsdGluZyB0aGF0IHdvbWFuIC0gdGhlIHdpdGNoIG9uZSB3aGljaCBoYWQgYWJzb2x1dGVseSBub3RoaW5nIHRvIGRvIHdpdGggdGhlIHBsb3QgQlRXLiBUaGUgY2FiYW5hIGJveSB0aHJlYXRlbnMgdGhlIGh1c2JhbmQgYW5kIHJlcGVhdGVkbHkgYXR0ZW1wdHMgdG8gc2VkdWNlIHRoZSB3aWZlLiBIZSB0aGVuIGZvcmNlcyBoaW1zZWxmIG9uIGhlciAtIHdoaWNoIHRoZSB3b21hbiBmaW5kcyBzbyBob3Qgc2hlIHN0b3BzIHRoaW5raW5nIHJhcGUgYW5kIHN0YXJ0cyB0aGlua2luZyBzaGUgd2FudHMgaGltLiBVaCBodWguIFRoZSBtaXNvZ3luaXN0aWMsIGluZmVyaW9yaXR5IGNvbXBsZXggdGhvdWdodHMgdGhlIGRpcmVjdG9yIGRpc3BsYXlzIGFyZSBqdXN0IHJldm9sdGluZy4gSXQgaXMgb25lIHRoaW5nIHdoZW4gYSBmaW5lIGZpbG0gbGlrZSBBbWVyaWNhbiBQc3ljaG8gZGVsaWJlcmF0ZWx5IHRyaWVzIHRvIGdldCB1cyB0byBlbXBhdGhpc2Ugd2l0aCB0aGUgdmlsbGFpbiBidXQgaW4gU3Vydml2YWwgSXNsYW5kIEkgZmVsdCBsaWtlIEkgd2FzIHdhdGNoaW5nIGEgbW92aWUgYWJvdXQgVGVkIEJ1bmR5IGJ1dCB0aGUgZGlyZWN0b3IgZmFpbGVkIHRvIG1ha2UgaGltIHVubGlrZWFibGUgYW5kIGluc3RlYWQgbWFkZSB1cyBoYXRlIGhpcyB2aWN0aW1zLiBXaGF0IHdhcyBoZSB0aGlua2luZz8/PykAAAAAAAAAQAq2BAjNARDNASKkBElmIHlvdSBsaWtlZCB0aGUgR3JpbmNoIG1vdmllLi4uIGdvIHdhdGNoIHRoYXQgYWdhaW4sIGJlY2F1c2UgdGhpcyB3YXMgbm8gd2hlcmUgbmVhciBhcyBnb29kIGEgU2V1c3NpYW4gbW92aWUgdHJhbnNsYXRpb24uIE1pa2UgTXllcnMnIENhdCBpcyBwcm9iYWJseSB0aGUgbW9zdCBhbm5veWluZyBjaGFyYWN0ZXIgdG8gImdyYWNlIiB0aGUgc2NyZWVuIGluIHJlY2VudCB0aW1lcy4gSGlzIHZvaWNlL2FjY2VudCBpcyB0ZXJyaWJsZSBhbmQgaGUgbGF1Z2hzIGF0IGhpcyBvd24gam9rZXMgd2l0aCBhbiBhd2Z1bCB3ZWFzaW5nIHNvdW5kLCB3aGljaCBpcyBhYm91dCB0aGUgb25seSBsYXVnaGluZyBJIGhlYXJkIGF0IHRoZSB0aGVhdGVyLiBOb3QgZXZlbiB0aGUga2lkcyBsaWtlZCB0aGlzIG9uZSBmb2xrcywgYW5kIGtpZHMgbGF1Z2ggYXQgYW55dGhpbmcgbm93LiBTYXZlIHlvdXIgbW9uZXkgYW5kIGdvIHNlZSBMb29uZXkgVHVuZXM6IEJhY2sgaW4gQWN0aW9uIGlmIHlvdSdyZSByZWFsbHkgbG9va2luZyBmb3IgYSBmdW4gaG9saWRheSBmYW1pbHkgbW92aWUuKQAAAAAAAABACu0BCM4BEM4BItsBSWYgeW91IGxpa2UgYmFkIG1vdmllcyAoYW5kIHlvdSBtdXN0IHRvIHdhdGNoIHRoaXMgb25lKSBoZXJlJ3MgYSBnb29kIG9uZS4gTm90IHF1aXRlIGFzIGZ1bm55IGFzIHRoZSBmaXJzdCwgYnV0IG11Y2ggbG93ZXIgcXVhbGl0eS4gQSBtdXN0LXNlZSBmb3IgZmFucyBvZiBKYWNrIEZyb3N0IGFzIHdlbGwgYXMgYW55b25lIHVwIGZvciBhIGdvb2QgbGF1Z2ggYXQgdGhlIHdyaXRpbmcuKQAAAAAAAABACsEXCM8BEM8BIq8XSWYgdGhpcyBpcyBub3QgaGVhdmlseSBmZWF0dXJlZCBvbiBldmVyeSBsaXN0IG9mICJ3aGF0IG5vdCB0byB3YXRjaCIsIGl0IHNob3VsZCBvbmx5IGJlIGJlY2F1c2UgdGhvc2Uga2VlcGluZyB0aGF0IHBhcnRpY3VsYXIgbGlzdCBhcmUgbm90IGF3YXJlIG9mIGl0cyBleGlzdGVuY2UsIHdoaWNoLCBhcyBsb25nIGFzIHRoYXQgcmVtYWlucyBzbywgaXMgdGhlIGFjY2VwdGFibGUgYWx0ZXJuYXRpdmUuIEknbSBub3Qga2lkZGluZyB5b3UsIHRoaXMgaXMgYSAqYmFkKiAibW92aWUiLiBKb3NlcGggTWVla2VyIHJldHVybnMgZnJvbSB0aGUgZGVhZCwgd2l0aCB2YXJpb3VzIHZhZ3VlLCB1bmRlZmluZWQgc3VwZXJuYXR1cmFsIHBvd2VycywgdGhlIG1vc3QgZW1wbG95ZWQgb2Ygd2hpY2ggd291bGQgc2VlbSB0byBiZSBhcHBlYXJpbmcgaW4gbmV3LCBpbmNyZWFzaW5nbHkgY29taWNhbC1sb29raW5nIGFuZCByaWRpY3Vsb3VzKGFuZCBuZXZlciBzY2FyeSBvciBjcmVlcHkuLi4gaW4gZ2VuZXJhbCwgd2hlbiB0aGlzIGdvZXMgZm9yIHRoZSBsYXR0ZXIgb2YgdGhvc2UsIGl0IHdpbmRzIHVwIGp1c3QgYmVpbmcgYml6YXJyZSwgYW5kIGF0dGVtcHRzIGF0IHRoZSBmb3JtZXIganVzdCBkb24ndCB3b3JrLCBwZXJpb2QpIG91dGZpdHMgYW5kIHN0ZXJlb3R5cGVzL2FyY2hldHlwZXMsIGFuZCBoZSBpcyBwb3J0cmF5ZWQgYnkgRGF2aWQgS2VpdGgod2hvbSBJIHJlc3BlY3QgaW4uLi4gd2VsbCwgYXQgbGVhc3QgRGFyZWRldmlsKSwgZG9pbmcgYSBtb3JlIG9mdGVuIHRoYW4gbm90IHRlcnJpYmx5IGluY29uc2lzdGVudCh3aGljaCBjb3VsZCBhbHNvIGhhdmUgdG8gZG8gd2l0aCBzY3JpcHQpIGFuZCBvZnRlbiBvdmVyIHRoZSB0b3AgcGVyZm9ybWFuY2UuIEEgY2hhcmFjdGVyIG9yIHR3byBoYXZlIHBlcnNvbmFsaXRpZXMgc28gdW5iZWxpZXZhYmx5IGlycml0YXRpbmcgdGhhdCB0aGV5J3JlIHBhaW5mdWwgdG8gd2F0Y2guIFRoZSBlZGl0aW5nIHRoaW5rcyBpdCdzIGNvbnNpZGVyYWJseSBtb3JlIGNsZXZlciB0aGFuIGl0IHJlYWxseSBpcyhhbmQgd2hhdCBvbiBFYXJ0aCB3YXMgd2l0aCB0aGUgcmVkIHRpbnQgZm9yIHRoZSBmbGFzaGJhY2tzPykuIENpbmVtYXRvZ3JhcGh5Li4uIG9oLCBkZWFyLiBGcmFtaW5nLCBjb3ZlcmFnZSwgZWZmZWN0aXZlIHVzZSBvZiBhbmdsZSh0aGF0IG9uZSBjb3VsZCBiZSBhdHRyaWJ1dGVkIHNvbWUgdG8gZWRpdGluZywgdG9vLCBwZXJoYXBzKSwgcGxlYXNlLCBndXlzLCBzdG9wIG1lIHdoZW4gSSBzYXkgc29tZXRoaW5nIHlvdSd2ZSBldmVyIGhlYXJkIGFib3V0IHRoZSBleGlzdGVuY2Ugb2YuIEFzIGZhciBhcyB0aGUgdGVjaG5pY2FsIHNpZGUgZ29lcywgdGhpcyBpcyBhIHByZXR0eSBsb3VzeSBleGN1c2UgZm9yIHNvbWV0aGluZyBtb3JlIHdvcnRod2hpbGUgdG8gcHV0IGluIHRoZSBwcm9qZWN0b3IgdGhhbiB1bmV4cG9zZWQgZmlsbS4gQnV0IHdoeSBzdG9wIHRoZXJlPyBUaGUgcGxvdCBpcyBqdXN0IHBvb3IuIFRoZSBiYXNpYyBpZGVhJ3MgYmVlbiBkb25lLCBhbmQgaXQncyBiZWVuIGRvbmUgc28gbXVjaCBiZXR0ZXIgdGhhbiB0aGlzKFRoZSBDcm93IHdvdWxkIGJlIG9uZSkuIFRoZSB3YXkgaXQncyB0b2xkIGlzIGdpbW1pY2t5LCBhbmQgd2hpbGUgdGhlcmUgaXMgc29tZSBleHBsYW5hdGlvbiBiZWhpbmQgdGhlIGZsYXNoYmFja3MsIGl0IHN0aWxsIGRvZXNuJ3Qgc2F0aXNmeS4gUGFjaW5nIGlzIGFib3V0IG5vbi1leGlzdGVudC4gVGhlIGxlYWQgaXMgZGlzdGluY3RseSB1bmxpa2VhYmxlLCBhbmQgdGhlcmUncyBtb3JlIHBlcnNvbmFsaXR5IGluIGEgYmFybiBkb29yLCBub3QgdG8gbWVudGlvbiB0aGF0IHRob3NlIGFyZSBhbHNvIGNvbnNpZGVyYWJseSBsZXNzIHdvb2Rlbi4gS2VsbHkgUGVyaW5lIGFuZCBUaG9tYXMgSWFuIE5pY2hvbGFzPyBXaGF0IGluIHRoZSBuYW1lIG9mIGFsbCB0aGF0IGlzIGdvb2QgYW5kIGp1c3QocHVuIGludGVuZGVkKSBhcmUgeW91IGRvaW5nIGluIHRoaXM/IFBlcmluZSwgeW91IHdlcmUgYWxyZWFkeSBmdW5ueSBiZWZvcmUgdGhpcywgb24gVGhlIERyZXcgQ2FyZXkgU2hvdywgTmljaG9sYXMsIHdlbGwsIEkgaGF2ZW4ndCBzZWVuIHlvdSBpbiBhbnl0aGluZyBwcmVjZWRpbmcgQW1lcmljYW4gUGllLCBidXQgaWYgbm90aGluZyBlbHNlLCB5b3UgKndlcmUqIGZ1bm55IGxhdGVyIG9uLCBhbmQgaW4gdGhvc2UgcHJvZHVjdGlvbnMsIHRoZSBhbXVzZW1lbnQgd2FzIGludGVudGlvbmFsLiBEaWFsb2cgaXMuLi4gdGhlIGxlc3Mgc2FpZCwgdGhlIGJldHRlci4gTGFuZ3VhZ2UgaXMgdW5yZXN0cmFpbmVkLCBhbmQgdGVuZHMgdG8gYmUgc3R1cGlkLiBUaGUgdmlvbGVuY2UgaXMgc2hvZGRpbHkgZG9uZSwgYW5kIHRoZXkgZG9uJ3QgZXZlbiBzZWVtIHRvIGNhcmUgdG8gdHJ5IHRvIGhpZGUgaXQoaGludGluZyBhdCBpdCBtaWdodCBoYXZlIGJlZW4gdGhlIHNtYXJ0ZXIgc3RyYXRlZ3kpLiBDaGFyYWN0ZXJzLCBkb24ndCBnZXQgbWUgc3RhcnRlZC4gV2h5IHNwZW5kIHNvIG11Y2ggZW5lcmd5IG9uIHBvcnRyYXlpbmcgdW5leGNpdGluZywgYXQgdGltZXMgdXR0ZXJseSBpbGxvZ2ljYWwsIGV2ZW50cz8gVGhlIG1vcmUgeW91IHRoaW5rIGFib3V0IHRoaXMsIHRoZSB3b3JzZSBpdCBnZXRzLiBJdCdzIG5vdCBldmVuIHBhc3NhYmxlIGFzIGEgImJhZCBob3Jyb3IgZmxpY2siLCBvciBhIEIgbW92aWUoaXQgbWF5IHZlcnkgd2VsbCBwYXNzIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGFscGhhYmV0LCBhbmQgZ28gZnVydGhlciBzdGlsbCksIGl0IGNvdWxkbid0IHNjYXJlIHlvdSBvbiB0aGUgc2Nhcmllc3QgZGF5IG9mIHlvdXIgbGlmZSBpZiBpdCBoYWQgYW4gZWxlY3RyaWZpZWQgc2NhcmluZyBtYWNoaW5lLiBJIHJlY29tbWVuZCB0aGlzIG9ubHkgdG8gcGVvcGxlIHdobyB3YW50IHRvIGRpc3Byb3ZlIGhvdyBiYWQgdGhpcyBpcywgYW5kIGRvbid0IHNheSBJIGRpZG4ndCB3YXJuIHlhLiAxLzEwKQAAAAAAAABACv0ECNABENABIusESWYgdGhpcyBpcyBjbGFzc2VkIGFzICdyZWFsIGxpZmUnIG9mIExvbmRvbiwgdGhlbiB0aGUgcHJvZHVjZXJzIG11c3QgYmUgb24gZGlmZmVyZW50IHBsYW5ldC48YnIgLz48YnIgLz5JdCBpcyB0aGUgbW9zdCBkZXByZXNzaW5nLCBzdWljaWRhbCwgZGFyaywgZGluZ3ksIGRyb3NzIG9uIFRWLjxiciAvPjxiciAvPkV2ZXJ5b25lIGlzIGZpZ2h0aW5nLCBldmVyeXRoaW5nIGhhcyBuYXN0eSB1bmRlciB0b25lcyBydW5uaW5nIHRocm91Z2ggaXQsIG5vdGhpbmcgaXMgZG9uZSBmb3IgZ2VudWluZSByZWFzb25zLjxiciAvPjxiciAvPklmIHlvdSB3YW50IGEgcmVhbCBsaWZlIHBpY3R1cmUgb2YgcGVvcGxlIGluIExvbmRvbiBvciB0aGUgVUssIHRoZW4gdGhpcyBwcm9ncmFtbWUgaXMgYnkgdGhlIGZhcnRoZXN0IGZyb20gcmVhbGl0eS48YnIgLz48YnIgLz5UaGVyZSBpcyBub3Qgb25lIGdvb2Qgd29yZCBJIGNhbiBzYXkgYWJvdXQgdGhpcyBwcm9ncmFtbWUuIFRoZSBvbmx5IGNlcnRhaW50eSBpcyB0aGF0IHdpbGwgYmUgYSBncmVhdCBiaWcgZmlnaHQgb3ZlciBDaHJpc3RtYXMgZGlubmVyLjxiciAvPjxiciAvPkV2ZW4gdGhlIGNoYXJhY3RlcnMgYXJlIHRvdGFsbHkgdW5iZWxpZXZhYmxlISkAAAAAAAAAQAqPCwjRARDRASL9CkkndmUgdHJpZWQgdG8gcmVjb25jaWxlIHdoeSBzbyBtYW55IGJhZCByZXZpZXdzIG9mIHRoaXMgZmlsbSwgd2hpbGUgdGhlIHZhc3QgbWFqb3JpdHkgb2YgcmV2aWV3cyBhcmUgZ2l2ZW4gYSByYXRpbmcgb2YgYmV0d2VlbiA3IGFuZCAxMC4gVGhlIHJlYXNvbiBtYXkgYmUgdGhpcyBmaWxtIGlzIGtpbmQgb2YgaGFyZCB0byBkZXNjcmliZSBpbiBhIHBvc2l0aXZlIHJldmlldywgYWx0aG91Z2ggYSBmZXcgaGF2ZSBkb25lIHRoYXQgcXVpdGUgbmljZWx5IGFscmVhZHkuIFRoaXMgZmlsbSBpcyBjb25mdXNpbmcsIGRlcHJlc3NpbmcsIGFuZCBkb2Vzbid0IGhhdmUgYSBoYXBweSBlbmRpbmcuIEkgc3RpbGwgZ2F2ZSBQb2xhIFggYSByYXRpbmcgb2YgMTAsIGJlY2F1c2UgaXQgaXMgYmFzaWNhbGx5IGZvciBtZSBsaXRlcmF0dXJlIGFuZCBhcnQgY29tYmluZWQgb24gZmlsbS4gVGhhdCBpcyByZWFsbHkgbXkgZmF2b3JpdGUga2luZCBvZiBmaWxtbWFraW5nLiBJJ3ZlIG9ubHkgc2VlbiB0d28gb2YgQ2FyYXgncyBmaWxtczogdGhpcyBvbmUgYW5kIE1hdXZpcyBTYW5nLiBBcyB3aXRoIHRoaXMgZmlsbSwgSSdtIGJlaW5nIHNvbWV3aGF0IHByZXRlbnRpb3VzIHdoZW4gSSBjYWxsIHRoaXMgb25lIG9mIENhcmF4J3MgYmVzdCBmaWxtcy0gYnV0IEkgYW0uIENhcmF4IGhhcyBhIG1pbmltYWxpc3Qgc3R5bGUuIElmIHRoYXQgdHlwZSBvZiBmaWxtIGRvZXMgbm90IGFwcGVhbCB0byB5b3UgYW5kIGlzIGJvcmluZywgdGhlbiBpdCB3b3VsZCBiZSBiZXN0IG5vdCB0byB3YXRjaCB0aGlzLiBCdXQgUG9sYSBYIHdhcyBsZXNzIG1pbmltYWxpc3QgdGhhbiBNYXV2aXMgU2FuZywgc28gaXQgaGFkIHF1aXRlIGEgbG90IG9mIGludGVuc2l0eSBmb3IgYSB0aHJpbGxlci0gYXQgbGVhc3QgZm9yIG15IHRhc3RlLiBJIGZvdW5kIGl0IHF1aXRlIGludGVyZXN0aW5nIGFuZCBhYnNvcmJpbmcuIFRoZSB0d28gbGVhZCByb2xlcyBkaWQgYW4gZXhjZWxsZW50IGpvYiBhY3RpbmcuIChJIG1lYW4gdGhlIGxlYWQgYW5kIHRoZSB5b3VuZyB3b21hbiBoZSB0aG91Z2h0IHdhcyBoaXMgaGFsZiBzaXN0ZXIuKSBDYXRoZXJpbmUgRC4gaXMgYWx3YXlzIGdyZWF0LCBidXQgaGVyIHJvbGUgd2FzIG5vdCB2ZXJ5IGxhcmdlIG9yIHNpZ25pZmljYW50IGluIHRoZSBzdG9yeS4gQnV0IGV2ZXJ5b25lIGRpZCBhIGZpbmUgam9iLiBJIHRob3VnaHQgdGhlIGN1bHQgc3R1ZmYgd2FzIGdyZWF0LiBJdCBtYXkgaGF2ZSBub3QgYmVlbiB2ZXJ5IGJlbGlldmFibGUsIGJ1dCB0aGF0IGlzIGR1ZSB0byBpdHMgYmVpbmcgcmF0aGVyIGFic3RyYWN0LiBUaGVyZSBpcyBhIGxvdCBnb2luZyBvbiBiZXR3ZWVuIHRoZSBsaW5lcyBpbiB0aGlzIGZpbG0uIFRoaXMgaXMgYSB2ZXJ5IEZyZXVkaWFuIHBzeWNoby10aHJpbGxlci4pAAAAAAAAAEAK0gYI0gEQ0gEiwAZJJ3ZlIHNlZW4gdGhpcyBtb3ZpZSB0d2ljZSBhbHJlYWR5IGFuZCBhbSB2ZXJ5IGltcHJlc3NlZCB3aXRoIGl0LjxiciAvPjxiciAvPlRoZSBjb252ZXJzYXRpb25zIGJldHdlZW4gTmltaSBhbmQgaGVyIG1vdGhlciBwbHVzIE5pbWkgYW5kIE1hdHRoZXcgYXJlIHZlcnkgdG91Y2hpbmcuIFRoZSBOaWdlcmlhbiBjb21tdW5pdHkgaXMgc2hvd24gdmVyeSB0cnV0aGZ1bGx5IGFuZCBhcyBjb2xvdXJmdWxseSBhcyBpdCB1c3VhbGx5IGlzLjxiciAvPjxiciAvPkFsdGhvdWdoIGNlcnRhaW4gdGhpbmdzIGNvdWxkIGhhdmUgZG9uZSB3aXRoIGEgYml0IG1vcmUgZXhwbGFuYXRpb247IGlmIHdlIGtuZXcgd2h5IE1hdHRoZXcgd2FzIGluIHRoZSBTb3V0aCBvZiBGcmFuY2UgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGUgc2NlbmVzIGZvbGxvd2luZyBNYXR0aGV3IGJlaW5nIGZvdW5kIGluIGhpcyBjYXIgd291bGQgYmUgbW9yZSB1bmRlcnN0YW5kYWJsZS48YnIgLz48YnIgLz5MdWNraWx5LCBPcHRpbXVtIFJlbGVhc2luZyBoYXZlIGEgd2Vic2l0ZSB0aGF0IGhhcyBkZXRhaWxlZCBwcm9kdWN0aW9uIG5vdGVzIHRoYXQgaGVscCB0byBtYWtlIHN1Y2ggc2NlbmVzIGJldHRlciB0byB1bmRlcnN0YW5kLjxiciAvPjxiciAvPkkgd291bGQgZ28gYW5kIHNlZSBpdCBhZ2FpbiBidXQgdW5mb3J0dW5hdGVseSBpdCBoYWQgYSBsaW1pdGVkIHJlbGVhc2UgaW4gTG9uZG9uIGFuZCBpcyBub3QgbG9uZ2VyIGF2YWlsYWJsZSB0byBzZWUuIEkgaG9wZSB0aGUgdmlkZW8gcmVsZWFzZSBnZXRzIGl0IHRvIGEgYmlnZ2VyIGF1ZGllbmNlIGJlY2F1c2UgdGhlIGZpbG0gZGVzZXJ2ZXMgaXQuKQAAAAAAAABACr4FCNMBENMBIqwFSSd2ZSBzZWVuIHNvbWUgYmFkIHRoaW5ncyBpbiBteSB0aW1lLiBBIGhhbGYgZGVhZCBjb3cgdHJ5aW5nIHRvIGdldCBvdXQgb2Ygd2Fpc3QgaGlnaCBtdWQ7IGEgaGVhZCBvbiBjb2xsaXNpb24gYmV0d2VlbiB0d28gY2FyczsgYSB0aG91c2FuZCBwbGF0ZXMgc21hc2hpbmcgb24gYSBraXRjaGVuIGZsb29yOyBodW1hbiBiZWluZ3MgbGl2aW5nIGxpa2UgYW5pbWFscy48YnIgLz48YnIgLz5CdXQgbmV2ZXIgaW4gbXkgbGlmZSBoYXZlIEkgc2VlbiBhbnl0aGluZyBhcyBiYWQgYXMgVGhlIENhdCBpbiB0aGUgSGF0LjxiciAvPjxiciAvPlRoaXMgZmlsbSBpcyB3b3JzZSB0aGFuIDkxMSwgd29yc2UgdGhhbiBIaXRsZXIsIHdvcnNlIHRoYW4gVmxsYWQgdGhlIEltcGFsZXIsIHdvcnNlIHRoYW4gcGVvcGxlIHdobyBwdXQga2l0dGVucyBpbiBtaWNyb3dhdmVzLjxiciAvPjxiciAvPkl0IGlzIHRoZSBtb3N0IGRpc3R1cmJpbmcgZmlsbSBvZiBhbGwgdGltZSwgZWFzeS48YnIgLz48YnIgLz5JIHVzZWQgdG8gdGhpbmsgaXQgd2FzIGEgam9rZSwgc29tZSBlbGFib3JhdGUgam9rZSBhbmQgdGhhdCBNaWtlIE15ZXJzIHdhcyBtYXliZSBhIGhpZ2ggY29jYWluZSBzbmlmZmluZyBkcnVnIGFkZGxlZCBiZXR0aW5nIGp1bmtpZSB3aG8gbG9zdCBhIGJldCBvciBzb21ldGhpbmcuPGJyIC8+PGJyIC8+SSBzaHVkZGVyKQAAAAAAAABACpYHCNQBENQBIoQHSSd2ZSByZWFkIHRoZSBib29rICdTY2FybGV0dCcgYW5kIHdhcyBleHBlY3RpbmcgYSBnb29kIG1vdmllIHRoZSBmaXJzdCB0aW1lIEkgc2F3IGl0LiBJJ20gYWZyYWlkIHRvIHNheSB0aGF0IEkgd2FzIGRpc2FwcG9pbnRlZC4gVGhlIG1vdmllIGRpZCBub3QgZm9sbG93IHRoZSBib29rIGFuZCBtYWRlIG1hbnkgY2hhbmdlcyB0aGF0IEkgZGlkIG5vdCBsaWtlLiA8YnIgLz48YnIgLz5PbmUgb2YgdGhlIGNoYW5nZXMgdGhhdCBJIGRpZCBub3QgbGlrZSB0aGUgd2F5IHRoYXQgTG9yZCBGZW50b24gd2FzIHBvcnRyYXllZC4gSXQgbWFkZSBubyBzZW5zZSB0byBtYWtlIGhpbSBvdXQgdG8gYmUgYSBiYWQgbWFuLiBUaGUgd2F5IHRoYXQgdGhpbmdzIGVuZGVkIGJldHdlZW4gTG9yZCBGZW50b24gYW5kIFNjYXJsZXR0IHdhcyBhIGxvdCBkaWZmZXJlbnQgYW5kIHRoZWlyIHdob2xlIHJlbGF0aW9uc2hpcCB3YXMgdG9vIGludGltYXRlLiA8YnIgLz48YnIgLz5UaGVyZSB3YXMgYWxzbyBhIGxvdCBsZXNzIGNvbmZyb250YXRpb24gYmV0d2VlbiBTY2FybGV0dCBhbmQgUmhldHQgaW4gdGhlIG1vdmllIHRoYW4gd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBpbiB0aGUgYm9vay4gVGhlIG1vdmllIHNlbnQgdGhlIHR3byBpbiB0d28gY29tcGxldGVseSBvcHBvc2l0ZSB3YXlzIGFuZCB0aGV5IGRpZCBub3Qgc2VlbSB0byBjcm9zcyBwYXRocyBvZnRlbiBlbm91Z2ggdG8gbWFrZSBpdCBzZWVtIGxpa2UgdGhlcmUgc3RpbGwgY291bGQgYmUgbG92ZSBiZXR3ZWVuIHRoZSB0d28uIEEgZmluZSBtb3ZpZSwgYnV0IEkgYmVsaWV2ZSB0aGF0IGl0IGNlcnRhaW5seSBjb3VsZCd2ZSBiZWVuIGJldHRlciB0aGFuIGl0IHdhcywgaGFkIGl0IG1vcmUgdHJ1ZSB0byBBbGV4YW5kcmEgUmlwcGxleSdzIGJvb2suKQAAAAAAAABACsAGCNUBENUBIq4GSSd2ZSBiZWVuIHN0cmFuZ2VseSBhdHRyYWN0ZWQgdG8gdGhpcyBmaWxtIHNpbmNlIEkgc2F3IGl0IG9uIFNob3d0aW1lIHNvbWV0aW1lIGluIHRoZSBlYXJseSA4MCdzLiBJIHNheSBzdHJhbmdlbHkgYmVjYXVzZSBpdCBpcyByYXRoZXIgYSBsdWRpY3JvdXMgYml0IG9mIHNvZnQtY29yZSBmbHVmZiwgYSBnZW5yZSBJJ20gbm90IHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluLiBUaGUgZGlhbG9ndWUgaXMgcG9tcG91c2x5IGFuZCBub25zZW5zaWNhbGx5IHBoaWxvc29waGljYWwgKG1ha2luZyBzZW5zZSwgbm8gZG91YnQsIG9ubHkgdG8gaXQncyBGcmFuY28tSXRhbGlhbiBwcm9kdWNlcnMpYW5kIHRoZSBwbG90IGNvbXBsZXRlbHkgZXh0cmFuZW91cy4gV2hhdCBpdCBkb2VzIGFjaGlldmUgaXMgYSB3b25kZXJmdWxseSBoeXBub3RpYyBhbmQgdGhvcm91Z2hseSBwbGVhc2FudCBtb29kLiBUaGUgc2NlbmVyeSAodGhlIGJlYXV0aWZ1bCBQaGlsaXBwaW5lcyksIHNvZnQtZm9jdXMgbnVkaXR5IGFuZCB3b25kZXJmdWwgc2NvcmUgYWxsIGNvbnRyaWJ1dGUgdG8gYSBzdHJhbmdlIGFuZCBleHRyZW1lbHkgd2F0Y2hhYmxlIGV4ZXJjaXNlIGluIGEgc29ydCBvZiBmaWxtIG1ha2luZyBzZWxkb20gc2VlbiB0b2RheS4gSXQgaXMgdHJ1bHkgb25lIG9mIG15IGdyZWF0ICJndWlsdHkgcGxlYXN1cmVzIi4gSSB3YXMgZm9ydHVuYXRlIGVub3VnaCB0byBmaW5kIGl0IG9uIGFuIG9sZCBsYXNlcmRpc2MgYW5kIGhhdmUgd2F0Y2hlZCBpdCBtb3JlIHRpbWVzIHRoYW4gSSB0aGluayBpcyBoZWFsdGh5LiBBIHdvcnRod2hpbGUgbW9vZHBpZWNlLikAAAAAAAAAQAr9BQjWARDWASLrBUknbSB0cnlpbmcgdG8gcGljdHVyZSB0aGUgcGl0Y2ggZm9yIERhcmsgQW5nZWwuICJJJ20gdGhpbmtpbmcgTWF0cml4LCBJJ20gdGhpbmtpbmcgQmxhZGVydW5uZXIsIEknbSB0aGlua2luZyB0aGF0IGNoaWNrIHRoYXQgcGxheXMgRmFpdGggaW4gQW5nZWwsIHdlYXJpbmcgc2hpbnkgYmxhY2sgbGVhdGhlciAtIG9yIHNvbWUgY2hpY2sganVzdCBsaWtlIGhlciwgbGVhdmUgdGhhdCBvbmUgd2l0aCB1cy4gT25seSAtIGdldCB0aGlzISAtIHdlJ2xsIGRvIGl0IHdpdGhvdXQgYW55IHBsb3QsIGRpYWxvZ3VlLCBjaGFyYWN0ZXIsIGRlY2VudCBhY3Rpb24gb3IgYnVkZ2V0LCBqdXN0IHNvbWUgbG91ZCBiYW5ncyBhbmQgYSBob3QgY2hpY2sgaW4gc2hpbnkgYmxhY2sgbGVhdGhlciBzdHJhZGRsaW5nIGEgYmlnIHRocm9iYmluZyBiaWtlLiBGYW5ib3lzIGRpZyBsb3VkIGJhbmdzIGFuZCBob3QgY2hpY2tzIGluIHNoaW55IGJsYWNrIGxlYXRoZXIgc3RyYWRkbGluZyBiaWcgdGhyb2JiaW5nIGJpa2VzLCByaWdodD8iPGJyIC8+PGJyIC8+Rmxhc2h5LCBzaGFsbG93LCBkcmVhcnksIGZvcm11bGFpYywgcGFzc2lvbmxlc3MsIHRlZGlvdXMsIGR1bGwsIGR1bWIsIGh1bW91cmxlc3MsIGRlc3VsdG9yeSwgYmFyZWx5IGNvbXBldGVudC4gTGl2ZSBhY3Rpb24gYW5pbWUgd2l0aG91dCBhbnkgYWN0aW9uLCBvciBpbmRlZWQgYW55IGxpZmUuIFNGIGp1c3QgdGhlIHdheSBKb2UgRmFuYm95IGxpa2VzIGl0LCBpbiBmYWN0LiA6KCkAAAAAAAAAQAqtBgjXARDXASKbBkknbSBnb25uYSB0aXAgdGhlIHNjYWxlcyBoZXJlIGEgYml0IGFuZCBzYXkgSSBlbmpveWVkIHRoaXMuIEhvd2V2ZXIsIHRoZSBjYXJ0b29uIGlzIHJlYWxseSBvbmx5IGdvaW5nIHRvIGFwcGVhbCB0byB0aG9zZSB3aG8gaGF2ZSB2ZXJ5IGFic3VyZGlzdCB0ZW5kZW5jaWVzLiBJdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbW9zdCBwZW9wbGUgd2lsbCBub3QgZ2V0LCBhcyBpcyB0aGUgbmF0dXJlIG9mIGFic3VyZGlzbS48YnIgLz48YnIgLz50aGUgYW5pbWF0aW9uIGlzIGhvcnJpYmxlLCBidXQgeWVzLCB0aGF0J3MgdGhlIHBvaW50LiBUaGUgbWFpbiBjaGFyYWN0ZXIgaXMgZm91bCBtb3V0aGVkLCB2aW9sZW50LCBhbmQgc3R1cGlkLiBubyByZWRlZW1pbmcgcXVhbGl0aWVzIHdoYXRzb2V2ZXIuIGhpcyB3aWZlIHNocmlla3MgYW5kIHdhaWxzLCBhcHBhcmVudGx5IGp1c3QgYmFyZWx5IGNhcGFibGUgb2YgdGhlIG1vc3QgYmFzaWMgY29tbXVuaWNhdGlvbiBza2lsbHMuIG1vc3Qgb2YgdGhlc2Ugc3RvcmllcyBjb21wbGV0ZWx5IGxhY2sgYW55IGtpbmQgb2YgcG9pbnQuPGJyIC8+PGJyIC8+YnV0IGFnYWluLCB0aGF0J3MgdGhlIHBvaW50IDspPGJyIC8+PGJyIC8+SWYgbm9uIHNlcXVpdGVycywgZm91bCBsYW5ndWFnZSwgYW5kIGNvbXBsZXRlIGFuZCB1dHRlciByYW5kb21uZXNzIGFyZSB5b3VyIHRoaW5nLCB5b3UncmUgZ29pbmcgdG8gbG92ZSB0aGlzLjxiciAvPjxiciAvPkl0IGlzIHJlYWxseSBzaG9ydCwgc28gSSB3b3VsZCBwcm9iYWJseSByZW50IGluc3RlYWQgb2YgYnV5aW5nLikAAAAAAAAAQAq2BgjYARDYASKkBkknbSBhY2N1c3RvbWVkIHRvIGJlaW5nIHBhdGllbnQgd2l0aCBmaWxtcyBiZWNhdXNlIEkndmUgZ2VuZXJhbGx5IGZvdW5kIGl0IHVzdWFsbHkgcGF5cyBvZmYuIEJ1dCBhIGZldyB3b3JrcyB0YWtlIHRlZGl1bSB0byBuZXcgbGV2ZWxzIGFuZCBlbnRlciB0aGUgcmVhbG0gb2YgcHJvdm9jYXRpb24uLi4uIkxhc3QgWWVhciBhdCBNYXJpZW5iYWQiIGNvbWVzIHRvIG1pbmQuIFdlbGwsICJQb2xhIFgiIGFpbid0IG5vICJMYXN0IFllYXIgYXQgTWFyaWVuYmFkIi4gSSBjYW4gY291bnQgb24gb25lIGhhbmQgdGhlIG51bWJlciBvZiBmaWxtcyBJJ3ZlIHdhbGtlZCBvdXQgb24gb3ZlciB0aGUgeWVhcnMuICJQb2xhIFgiIGFjaGlldmVkIG1lbWJlcnNoaXAgaW4gdGhhdCBhdWd1c3QgZ3JvdXAuIEluIG15IGRlZmVuc2UsIEkgYmVsaWV2ZSBJIG1hZGUgYSB2YWxpYW50IGVmZm9ydCB0byBzdGFuZCBteSBncm91bmQgLSBob3BpbmcgdGhpbmdzIHdvdWxkIHR1cm4gYXJvdW5kLiBIb3dldmVyLCBJIGZpbmFsbHkgdGhyZXcgaW4gdGhlIHRvd2VsIGp1c3Qgc2h5IG9mIHRoZSA5MCBtaW51dGUgbWFyayAtIHF1aXRlIHJlc3BlY3RhYmxlIHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzLiAiUG9sYSBYIiBkb2VzIG5vdCBjb21lIGFueXdoZXJlIG5lYXIgbGl2aW5nIHVwIHRvIHRoZSBwcm9taXNlIG9mIENhcmF4J3MgZWFybGllciB3b3JrLiBBZnRlciBhIDEwIHllYXIgaGlhdHVzLCB0aGF0IG11c3QgaGF2ZSBiZWVuIGJpdHRlciBmb3IgaGltIGluZGVlZC4gTWVsdmlsbGUgaXMgc3RpbGwgc3Bpbm5pbmcgaW4gaGlzIGdyYXZlISkAAAAAAAAAQAqSBQjZARDZASKABUkgd291bGQgbGlrZSB0byBjb21tZW50IG9uIGhvdyB0aGUgZ2lybHMgYXJlIGNob3Nlbi4gd2h5IGlzIHRoYXQgdGhlaXIgYXJlIGFsd2F5cyBtb3JlIHdoaXRlIHdvbWVuIGNob3NlbiB0aGVuIHRoZWlyIGFyZSBibGFjayB3b21lbi4gZXZlcnkgZXBpc29kZSB0aGVpciBpcyBhbHdheXMgbW9yZSB3aGl0ZSB3b21lbiB0aGVuIGJsYWNrIG9uZSdzLiBhcyBpZiB0byBzYXkgd2hpdGUgd29tZW4gYXJlIGJldHRlciBsb29raW5nIHRoZW4gYmxhY2sgd29tZW4uIEkgd291bGQgbGlrZSBmb3Igb25jZSBzZWUgbW9yZSBibGFjayB3b21lbiB0aGVuIHdoaXRlLiBhbmQgaXQgbm90IGp1c3QgeW91ciBzaG93IGl0J3MgbGlrZSB0aGF0IGluIGEgbG90IG9mIHNob3dzIGFsd2F5cyBtb3JlIHdoaXRlJ3MuIGJ1dCBpIHdvdWxkIGhhdmUgdGhvdWdodCBzaW5jZSB5b3UgYXMgdGhlIGhlYWQgaG9uY2hvIG9mIHRoZSBzaG93IHlvdSB3b3VsZCBzZWUgdGhpcyB5b3Vyc2VsZiBhbmQgaGF2ZSBtb3JlIGJsYWNrIHdvbWVuIG9uIHlvdXIgc2hvdy4gYnV0IHlvdSBhcmUganVzdCBsaWtlIHRoZSByZXN0IHRyeWluZyB0byBhY3QgbGlrZSB5b3UgYXJlIHNvIGZhaXIgYW5kIG5pY2UuIHlvdSBhcmUganVzdCBhIGJpZyBmb255IGh5cG9jcml0ZS4pAAAAAAAAAEAKlAQI2gEQ2gEiggRJIHdvbid0IGxpZSwgSSByZW50ZWQgdGhpcyBmaWxtIGJlY2F1c2UgaXQgd2FzIGFuICJhcnR5IiBmaWxtIHdpdGggc29tZSBwb3NzaWJsZSBleHBsaWNpdCBzZXguIEkgZ290IHRoYXQgc2NlbmUgYW5kIENhdGhlcmluZSBEZW5ldXZlJ3MgKGJyaWVmbHkgc2hvd24pIGJyZWFzdHMsIGJ1dCB0aGUgcmVzdCBvZiB0aGUgZmlsbSBpcyBqdXN0IHRoZSB1c3VhbCBsb25nIHByZXRlbnRpb3VzIEV1cm9wZWFuIGFydCBmaWxtcyB3aXRoIGxpbmVzIGxpa2UgIkRpZCBJIGhhdmUgYSBtb3RoZXIgb3IgZmF0aGVyLCBJIGRvbid0IGtub3ciIChwYXJhcGhyYXNlZCkuIFVzdWFsbHkgZGVsaXZlcmVkIGluIGxvbmcgc29saWxvcXVpZXMuPGJyIC8+PGJyIC8+SWYgeW91IGFyZSBjdXJpb3VzIGFib3V0IHRoZSB0cmFuc2l0aW9uIG9mICJhcnQiIHRvIHBvcm4sIG1pZ2h0IGJlIGFuIGludGVyZXN0aW5nIGxvb2ssIHdpdGggdXNlIG9mIHRoZSBmYXN0IGZvcndhcmQgYnV0dG9uIChJIHdhcyBzdGlsbCB0b28gc2xvdyEpKQAAAAAAAABACpAUCNsBENsBIv4TSSB3aXNoIERlcGFyZGlldSBoYWQgYmVlbiBhYmxlIHRvIGZpbmlzaCBoaXMgYm9vayBhbmQgc2VlIGl0IGJlY29tZSBhIGRhenpsaW5nIHN1Y2Nlc3MuIEF0IGxlYXN0IGhlJ2QgaGF2ZSB3b3VuZCB1cCB3aXRoIHNvbWV0aGluZy48YnIgLz48YnIgLz5UaGUgZmlsbSBzdHJ1Y2sgbWUgYXMgcG9pbnRsZXNzLCByYW1ibGluZywgYW5kIHZlcnkgc3R5bGlzaCwgbGlrZSBzb21lIG90aGVyIHJlY2VudCBGcmVuY2ggZmlsbXMuIE5vdCB0byBrbm9jayBpdC4gTW9zdCByZWNlbnQgQW1lcmljYW4gZmlsbXMgYXJlIHBvaW50bGVzcyBhbmQgcmFtYmxpbmcgYW5kIGhhdmUgbm8gc3R5bGUgd2hhdGV2ZXIuIFdlIHNob3VsZCBiZSBncmF0ZWZ1bCwgSSBzdXBwb3NlLCBmb3IgcGhvdG9ncmFwaHkgdGhhdCBldm9rZXMgYSBFdXJvcGVhbiBjaXR5IGluIHRoZSBtaWRzdCBvZiBhIHdpbmQtYmxvd24gQ29udGluZW50YWwgd2ludGVyLCBhbmQgZm9yIGVsbGlwdGljYWwgY29udmVyc2F0aW9ucyB0aGF0IGNoYWxsZW5nZSBvdXIgYWJpbGl0eSB0byB1bmRlcnN0YW5kIHdoYXQncyB1cC48YnIgLz48YnIgLz5CdXQgdGhlcmUgY2FuIGJlIHRvbyBtdWNoIG9mIGEgZ29vZCB0aGluZy4gR29sdWJldmEgaXMgZm91bmQgc3R1bWJsaW5nIGFyb3VuZCBuZWFyIHRoZSBzZWEgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZnJlZXppbmcgbmlnaHQsIGNhcnJ5aW5nIG9uIGluIGEgYmFkIGFjY2VudCBhYm91dCBkcmVhbXMgYW5kIHN1Y2guIChUaGVyZSBhcmUgYSBmZXcgc2VxdWVuY2VzIG9mIGRyZWFtcyB0aGF0IGluY2x1ZGUgdGhpbmdzIGxpa2Ugc3dpbW1pbmcgaW4gYSByaXZlciBvZiBibG9vZC4gWW91J2xsIGxvdmUgaXQgaWYgeW91J3JlIFZsYWQgdGhlIEltcGFsZXIuKSBMb3RzIG9mIHBlb3BsZSBkaWUuIENhdGhlcmluZSBEZW5ldXZlIGRpZXMgaW4gYSBzdWljaWRlIGJ5IG1vdG9yY3ljbGUuIEkgZG9uJ3Qga25vdyB3aHkuIEdvbHViZXZhJ3MgeW91bmcgZ2lybCBkaWVzIHRvbywgYW5kIEkgZG9uJ3Qga25vdyB3aHkgc2hlIGRpZXMgZWl0aGVyLiBTaGUgZ2V0cyBzbGFwcGVkIGluIHRoZSBmYWNlLCBmYWxscyB0byB0aGUgcGF2ZW1lbnQsIGFuZCBkaWVzLjxiciAvPjxiciAvPlRoZXJlIGlzIHN1cHBvc2VkbHkgYW4gZXhwbGljaXQgc2V4IHNjZW5lIHRvby4gSSdsbCBoYXZlIHRvIHRha2UgdGhlaXIgd29yZCBmb3IgaXQgYmVjYXVzZSwgYWx0aG91Z2ggaXQgaXMgc3R5bGlzaGx5IHBob3RvZ3JhcGhlZCwgaXQgaXMgc3R5bGlzaGx5IHBob3RvZ3JhcGhlZCBpbiBhbG1vc3QgY29tcGxldGUgZGFya25lc3MuIERvbid0IHdvcnJ5IGFib3V0IHRoZSBraWRkaWVzIGJlaW5nIHNob2NrZWQuIFRoZXknbGwgcHJvYmFibHkgYmUgYXNsZWVwIGJ5IHRoaXMgdGltZSBhbnl3YXkuPGJyIC8+PGJyIC8+RGVwYXJkaWV1IGlzbid0IGEgYmFkIGFjdG9yLiBBcyB3ZSBzZWUgaGltIGRldGVyaW9yYXRlIGZyb20gYSBjYXJlZnVsbHkgZ3Jvb21lZCBoYW5kc29tZSB5b3VuZyBtYW4gLS0gd2VsbCwgaGFuZHNvbWUgZXhjZXB0IHRoYXQgaGlzIG5vc2UgY2FuJ3Qgc2VlbSB0byBnZXQgb3V0IG9mIGhpcyB3YXkgLS0gdG8gYSBsaW1waW5nLCBtdXJkZXJvdXMsIGhhaXJ5IHBoeXNpY2FsIHdyZWNrLCB3ZSBmZWVsIHNvcnJ5IGZvciB0aGUgZ3V5LiBHb2x1YmV2YSBoYXMgYSB3YW4gcHJldHR5IGZhY2UsIHdpdGggZW5vcm1vdXMgaGFsZi1saWRkZWQgZXllcyBhbmQgd2lkZSBjaGVla3MsIGxpa2UgYSBkb2xsLiBIZXIgbmV4dCBtb3ZpZSBzaG91bGQgYmUgYSByZW1ha2Ugb2YgTGV3dG9uJ3MgIkkgV2Fsa2VkIFdpdGggYSBab21iaWUuIiBUaGVuIHRoZXJlIGlzIHRoaXMgbXlzdGVyaW91cyBndXkgd2hvIGxlYWRzIGEgYmFuZC4gSSBndWVzcyBpdCdzIGEgYmFuZC4gQXMgZmFyIGFzIEkgY291bGQgbWFrZSBvdXQsIHRoZSBiYW5kIGlzIG1hZGUgdXAgb2YgYWJvdXQgYSBkb3plbiBkcnVtbWVycyBhbmQgYSBkb3plbiBtdXNpY2lhbnMgcGxheWluZyBlbGVjdHJpYyBndWl0YXJzLiBFdmVyeSB2aWV3ZXIgd2lsbCBmaW5kIHRoZSByZXN1bHRhbnQgc291bmQgaW50ZXJlc3RpbmcgYnV0IHVuY3VsdGl2YXRlZCBsaXN0ZW5lcnMgZm9uZCBvZiAiZWFzeSBsaXN0ZW5pbmciIG1pZ2h0IG5vdCBlbmpveSBpdC4gSWYgeW91IGRvbid0IGxpa2UgdGhlIG11c2ljLCB0aGVyZSdzIGEgcGF5b2ZmIGludm9sdmVkIGJlY2F1c2UgdGhlIHNpbmlzdGVyIGNvbXBvc2VyIGFuZCBsZWFkZXIgZ2V0cyB3aGFja2VkIG92ZXIgdGhlIGhlYWQgd2l0aCBEZXBhcmRpZXUncyB3YWxraW5nIHN0aWNrLjxiciAvPjxiciAvPkkgbXVzdCBzYXksIEkgZm91bmQgaXQgYmFyZWx5IHdvcnRoIHNpdHRpbmcgdGhyb3VnaC4gKEFuZCBpdCdzIGEgbG9uZ2llLCB0b28uKSBBdCB0aW1lcyBpdCB3YXMgbGlrZSB3YWl0aW5nIGluIHlvdXIgY2FyIGF0IGEgcmFpbHJvYWQgY3Jvc3Npbmcgd2hpbGUgYSBsb25nIGxvbmcgZnJlaWdodCB0cmFpbiBydW1ibGVzIHNsb3dseSBieSwgc29tZXRpbWVzIHN0b3BwaW5nIGVudGlyZWx5LiBJIHdpc2ggaXQgaGFkIGhhZCBhIGZldyBqb2tlcy4pAAAAAAAAAEAKrQUI3AEQ3AEimwVJIHdhdGNoZWQgdGhpcyBtb3ZpZSB3aGVuIEpvZSBCb2IgQnJpZ2dzIGhvc3RlZCBNb25zdGVydmlzaW9uIG9uIFROVC4gRXZlbiBoZSBjb3VsZG4ndCBtYWtlIHRoaXMgbW92aWUgZW5qb3lhYmxlLiBUaGUgb25seSByZWFzb24gSSB3YXRjaGVkIGl0IHVudGlsIHRoZSBlbmQgaXMgYmVjYXVzZSBJIHRlYWNoIHZpZGVvIHByb2R1Y3Rpb24gYW5kIEkgd2FudGVkIHRvIG1ha2Ugc3VyZSBteSBzdHVkZW50cyBuZXZlciBtYWRlIGFueXRoaW5nIHRoaXMgYmFkIC4uLiBidXQgaXQgdG9vayBhbGwgbXkgaW50ZXN0aW5hbCBmb3J0aXR1ZGUgdG8gc2l0IHRocm91Z2ggaXQgdGhvdWdoLiBJdCdzIGxpa2Ugd2F0Y2hpbmcgeW91ciBncmVhdCBncmFuZG1vdGhlciBmbGlydGluZyB3aXRoIGEgMTUgeWVhciBvbGQgYm95IC4uLiBleGNydWNpYXRpbmdseSBwYWluZnVsLjxiciAvPjxiciAvPklmIHlvdSB0b29rIHRoZSBhY3R1YWwgZmlsbSwgZGlwcGVkIGl0IGluIHBhaW50IHRoaW5uZXIsIHRoZW4gd2F0Y2hlZCBpdCwgaXQgd291bGQgYmUgbW9yZSBlbnRlcnRhaW5pbmcuIFNlcmlvdXNseS48YnIgLz48YnIgLz5JZiB5b3Ugc2VlIHRoaXMgbW92aWUgaW4gdGhlIGJhcmdpbiBiaW4gYXQgUy1NYXJ0LCBiYWNrIGF3YXkgZnJvbSBpdCBhcyBpZiBpdCB3ZXJlIGEgcmF0dGxlc25ha2UuKQAAAAAAAABACtAGCN0BEN0BIr4GSSB3YXRjaGVkIHRoaXMgbW92aWUgcHVyZWx5IGZvciB0aGUgc2V0dGluZy4gSXQgd2FzIGZpbG1lZCBpbiBhbiBvbGQgaG90ZWwgdGhhdCBhIGZyaWVuZCBvd25zIHNoYXJlcyBvZi4gVGhlIHBsb3Qgd2FzIHByZWRpY3RhYmxlLCB0aGUgYWN0aW5nIHdhcyBtZWRpb3JjcmUgYXQgYmVzdCwgdGhlIHNjYXJlcyB3ZXJlIGFsbCBncm9zcy1vdXRzLCBub3QgdHJ1ZSBzY2FyZXMuPGJyIC8+PGJyIC8+SSBkb24ndCByZW1lbWJlciBtdWNoIG9mIHRoZSBwbG90LCBhbmQgSSB0aGluayB0aGF0J3MgYmVjYXVzZSB0aGVyZSB3YXNuJ3QgbXVjaCBvZiBvbmUgdG8gcmVtZW1iZXIuIFRoZXkgZGlkbid0IGV2ZW4gdXNlIHRoZSBob3RlbCB0byBpdCdzIGZ1bGxlc3QgcG90ZW50aWFsLi4uVGhlIGJlYWNoZXMgYXJlIGZhbnRhc3RpYyBhbmQgdGhlIGhvdGVsIGlzIHNpdHVhdGVkIG9uIGEgcGVuaW5zdWxhLiBBdCBsb3cgdGlkZSwgeW91IGNhbiB3YWxrIGFsbW9zdCAxLzQgbWlsZSBpbnRvIHRoZSBiYXksIHdoaWNoIGlzIGFjdHVhbGx5IGFuIGVlcmllIHNpZ2h0IGZpcnN0IHRoaW5nIGluIHRoZSBtb3JuaW5nIG9yIGxhdGUgYXQgbmlnaHQgd2hlbiB0aGUgd2luZCBpcyBob3dsaW5nIHRocm91Z2ggdGhlIGNyYWNrcy48YnIgLz48YnIgLz5UaGUgYmVzdCB3YXkgdG8gc2VlIHRoaXMgbW92aWUgaXMgd2l0aCB0aGUgcmVtb3RlIGluIHlvdXIgaGFuZCBzbyB5b3UgY2FuIGZhc3QgZm9yd2FyZCB0aHJvdWdoIHRoZSBhY3Rpb24gKGFuZCBJJ20gdXNpbmcgdGhhdCB0ZXJtIGxvb3NseSlzY2VuZXMgYW5kIHBhdXNlIGF0IHRoZSBiZWF1dHkgb2YgdGhlIHN1cnJvdW5kaW5ncyEpAAAAAAAAAEAK8QgI3gEQ3gEi3whJIHdhdGNoZWQgUG9sYSBYIGJlY2F1c2UgU2NvdHQgV2Fsa2VyIGNvbXBvc2VkIHRoZSBmaWxtIHNjb3JlIGFuZCBJIGFkbWlyZSBoaXMgbXVzaWMgYSBsb3QuIEZyYW5rbHksIEkgZXhwZWN0ZWQgYSBzb21ld2hhdCBwcmV0ZW50aW91cyBhbmQgcG9zc2libHkgaW5jb2hlcmVudCBGcmVuY2ggbW92aWUuIEkgd2FzIHdyb25nLiBUaGUgdmlzaW9uIG9mIHRoZSBmaWxtIHF1aWNrbHkgbWFuYWdlZCB0byBlbmdhZ2UgbXkgYXR0ZW50aW9uIHRvIHRoZSBmdWxsZXN0IC0gc3RhcnRpbmcgd2l0aCB0aGUgb3BlbmluZyBzZXF1ZW5jZSwgd2hpY2ggc2hvd3MgYmxhY2sgYW5kIHdoaXRlIGZvb3RhZ2Ugb2YgbWlsaXRhcnkgYWlycGxhbmVzIHRocm93aW5nIGJvbWJzIGF0IGdyYXZlcyBhdCB0aGUgc291bmRzIG9mIG11c2ljIGFuZCBTY290dCBXYWxrZXIncyBiZWF1dGlmdWwgd2FpbGluZyB2b2ljZS4gVGhlIGZpbG0gZXhwbG9yZXMgdGhlIGlkZW50aXR5IGNyaXNpcyBvZiBQaWVycmUgKEd1aWxsYXVtZSBEZXBhcmRpZXUgLSBhIGJyaWxsaWFudCBjaG9pY2UgZm9yIHRoZSByb2xlKSBhbmQgaGlzIGNvbnNlcXVlbnRpYWwgKHNlbGYtKWRlc3RydWN0aW9uLiBUaGUgc3RvcnkgaXMgZGl2aWRlZCBpbnRvIHR3byBwYXJ0cyDCliB0aGUgZmlyc3QgZGVwaWN0cyBQaWVycmUncyBjYXJlZnJlZSBsaWZlIGluIGEgYmVhdXRpZnVsIGhvdXNlIGluIHRoZSBGcmVuY2ggY291bnRyeXNpZGUgYW5kIHRoZSBzZWNvbmQgZm9sbG93cyBoaXMgdXR0ZXIgcGVyc29uYWwgZGlzaW50ZWdyYXRpb24gYWZ0ZXIgaGUgYWJhbmRvbnMgZXZlcnl0aGluZyBhbmQgbW92ZXMgdG8gUGFyaXMgdG8gbGl2ZSBpbiBzcXVhbG9yIHdpdGggaGlzIHN1cHBvc2VkIGhhbGYtc2lzdGVyLiBCb3RoIHBhcnRzIGNvbnRhaW4gc29tZSBhbWF6aW5nbHkgc3R1bm5pbmcgcGhvdG9ncmFwaHkgwpYgdGhlIGZpcnN0IHZlcnkgY29sb3JmdWwgYW5kIGJyaWdodCwgdGhlIHNlY29uZCB1dHRlcmx5IGdsb29teSBhbmQgbmVhcmx5IGFwb2NhbHlwdGljIC0gYWRkaW5nIHVwIHRvIGEgdHJ1ZSBhZXN0aGV0aWMgZmVhc3QuIFBvbGEgWCBpcyBhIGZhc2NpbmF0aW5nIGFuZCBxdWl0ZSB1bmlxdWUgbW92aWUgZXhwZXJpZW5jZS4pAAAAAAAAAEAKrAUI3wEQ3wEimgVJIHdhcyBzbyBsb29raW5nIGZvcndhcmQgdG8gc2VlaW5nIHRoaXMgd2hlbiBpdCB3YXMgaW4gcHJvZHVjdGlvbi5CdXQgaXQgdHVybmVkIG91dCB0byBiZSB0aGUgdGhlIGJpZ2dlc3QgbGV0IGRvd24uIEEgZmFyIGNyeSBmcm9tIHRoZSB3aGltc2ljYWwgd29ybGQgb2YgRHIgU2V1c3MuIEl0IHdhcyB2dWxnYXIgYW5kIGRpc3Rhc3RlZnVsIEkgZG9uJ3QgdGhpbmsgRHIgU2V1c3Mgd291bGQgaGF2ZSBhcHByb3ZlZC5Ib3cgdGhlIEdyaW5jaCBzdG9sZSBDaHJpc3RtYXMgd2FzIG11Y2ggYmV0dGVyLiBJIHVuZGVyc3RhbmQgaXQgaGFkIHNvbWUgc3VidGxlIGFkdWx0IGpva2VzIGluIGl0IGJ1dCBteSBjaGlsZHJlbiBoYXZlIHlldCB0byBjYXRjaCBvbi4gV2hlcmVhcyBUaGUgQ2F0IGluIHRoZSBIYXQgc2NyZWFtZWQgdnVsZ2FyaXR5IHRoZXkgY2F1Z2h0IGEgbG90IG1vcmUgdGhhbiBJIHdvdWxkIGhhdmUgbGlrZWQuR3Jvd2luZyB1cCB3aXRoIERyIFNldXNzIEl0IHJlYWxseSBib3RoZXJlZCBtZSB0byBzZWUgaG93IHRoaXMgdGltZWxlc3MgY2xhc3NpYyBnb3QgdHJhc2hlZCBvbiB0aGUgYmlnIHNjcmVlbiAuTGV0cyBzZWUgd2hhdCB0aGV5IGRvIHdpdGggSG9ydG9uIGhlYXJzIGEgd2hvLkkgaG9wZSB0aGlzIG9uZSBkb2VzIERyIFNldXNzIHNvbWUganVzdGljZS4pAAAAAAAAAEAK2QgI4AEQ4AEixwhJIHdhcyBvbmUgb2YgdGhvc2UgImZldyBBbWVyaWNhbnMiIHRoYXQgZ3JldyB1cCB3aXRoIGFsbCBvZiBHZXJyeSBBbmRlcnNlbidzIG1hcnZlbG91cyBjcmVhdGlvbnMuIFRodW5kZXJiaXJkcyB3YXMgYSBncmVhdCBzZXJpZXMgZm9yIHRoZSB0aW1lIGFuZCB3b3VsZCBoYXZlIG1hZGUgYSBncmVhdCBhY3Rpb24vYWR2ZW50dXJlIG1vdmllIGlmIG9ubHkgdGhlIHdyaXRlcnMgY291bGQgaGF2ZSBmaWd1cmVkIG91dCB3aGVyZSB0byB0YXJnZXQgaXQuPGJyIC8+PGJyIC8+SSBleHBlY3RlZCBpdCB0byBiZSBhIHJvbXAsIGJ1dCBJIGRpZCBub3QgZXhwZWN0IGl0IHRvIGFpbSBhdCBzdWNoIGEgbG93IGFnZSBncm91cC4gTGlrZSBMb3N0IGluIFNwYWNlLCB0aGlzIGNvdWxkIGhhdmUgYmVlbiBib3RoIHZpc3VhbGx5IHN0dW5uaW5nIGFuZCBleGNpdGluZy4gSXQgc2hvdWxkIGhhdmUgZm9jdXNlZCBvbiBtb3JlIGFjdGlvbi9hZHZlbnR1cmUgYW5kIHRoZSBnb2FsIG9mIHRoZSBvcmlnaW5hbCBzZXJpZXMuLi4gc2F2aW5nIHBlb3BsZSBpbiB0cm91YmxlLjxiciAvPjxiciAvPkluc3RlYWQsIGl0IGZvY3VzZWQgb24gQWxhbiBzYXZpbmcgdGhlIGRheSBpbnN0ZWFkIG9mIGhpcyBicm90aGVycyAod2hvIHdlcmUgY2FzdCB0b28geW91bmcgYW55d2F5IHZzLiB0aGUgb3JpZ2luYWwpLiBUaGUgYnJlYWtvdXQgcGFydCB3YXMgTGFkeSBQZW5lbG9wZSBhbmQgUGFya2VyLiBJIGRpZG4ndCBjYXJlIHRvbyBtdWNoIGZvciB0aGUgY2hhcmFjdGVycyBpbiB0aGUgb3JpZ2luYWwsIGJ1dCBJIHdhcyBncmF0ZWZ1bCBmb3IgdGhlbSBpbiB0aGUgbW92aWUuIFRoZXkgc3RvbGUgdGhlIHNob3chPGJyIC8+PGJyIC8+SSBhbHdheXMgZW5qb3llZCBUaHVuZGVyYmlyZHMgbW9yZSBmb3IgdGhlIGhpZ2gtdGVjaCB0aGFuIHRoZSBzdG9yaWVzLCBhbmQgZXZlbiB0aGF0IGRpZCBub3QgZ2V0IGVub3VnaCBzY3JlZW4gdGltZSBhcyBmYXIgYXMgSSB3YXMgY29uY2VybmVkLiBJIHdvdWxkIGhhdmUgZW5qb3llZCBzZWVpbmcgbW9yZSBvZiB0aGUgY29vbCBnYWRnZXRzLjxiciAvPjxiciAvPkJ1dCB0aGVuLCBJJ20ganVzdCBhIGJpZyBraWQuLi4gOykpAAAAAAAAAEAK9QYI4QEQ4QEi4wZJIHdhcyBmb3J0dW5hdGUgdG8gYXR0ZW5kIHRoZSBMb25kb24gcHJlbWllciBvZiB0aGlzIGZpbG0uIFdoaWxlIEkgYW0gbm90IGF0IGFsbCBhIGZhbiBvZiBCcml0aXNoIGRyYW1hLCBJIGRpZCBmaW5kIG15c2VsZiBkZWVwbHkgbW92ZWQgYnkgdGhlIGNoYXJhY3RlcnMgYW5kIHRoZSBCQUQgQ0hPSUNFUyB0aGV5IG1hZGUuIEkgd2FzIGluIHRlYXJzIGJ5IHRoZSBlbmQgb2YgdGhlIGZpbG0uIEV2ZXJ5IHNjZW5lIHdhcyBtZXNtZXJpemluZy4gVGhlIGF0dGVudGlvbiB0byBkZXRhaWwgYW5kIHRoZSBleGNlbGxlbnQgYWN0aW5nIHdhcyBxdWl0ZSBpbXByZXNzaXZlLjxiciAvPjxiciAvPkkgd291bGQgaGF2ZSB0byBhZ3JlZSB3aXRoIHNvbWUgb2YgdGhlIG90aGVyIGNvbW1lbnRzIGhlcmUgd2hpY2ggcXVlc3Rpb24gd2h5IGFsbCB0aGVzZSB3b21lbiB3ZXJlIHRocm93aW5nIHRoZW1zZWx2ZXMgYXQgc3VjaCBhIGRlc3BpY2FibGUgY2hhcmFjdGVyLjxiciAvPjxiciAvPioqKioqKipTUE9MSUVSIEFMRVJUKioqKioqKiogSSB3YXMgYWxzbyBob3BpbmcgdGhhdCBEeWxhbiB3b3VsZCBoYXZlIGJlZW4ga2lsbGVkIGJ5IFdpbGxpYW0gd2hlbiBoZSBoYWQgdGhlIGNoYW5jZSEgKioqKkVORCBTUE9JTEVSKioqKio8YnIgLz48YnIgLz5LZWlyYSBLbmlnaHRsZXkgZGlkIGEgZ3JlYXQgam9iIGFuZCByYWRpYXRlIGJlYXV0eSBhbmQgaW5ub2NlbmNlIGZyb20gdGhlIHNjcmVlbiwgYnV0IGl0IHdhcyBTaWVubmEgTWlsbGVyJ3MgcGVyZm9ybWFuY2UgdGhhdCB3YXMgdHJ1bHkgT3NjYXIgd29ydGh5LjxiciAvPjxiciAvPkkgYW0gc3VyZSB0aGlzIHByb2R1Y3Rpb24gd2lsbCBiZSBub21pbmF0ZWQgZm9yIG90aGVyIGF3YXJkcy4pAAAAAAAAAEAK0RUI4gEQ4gEivxVJIHdhbnQgdmVyeSBtdWNoIHRvIGJlbGlldmUgdGhhdCB0aGUgYWJvdmUgcXVvdGUgKHNwZWNpZmljYWxseSwgdGhlIEVuZ2xpc2ggc3VidGl0bGUgdHJhbnNsYXRpb24pLCB3aGljaCB3YXMgYWN0dWFsbHkgd3JpdHRlbiwgbm90IHNwb2tlbiwgaW4gYSByZWplY3Rpb24gbGV0dGVyIGEgcHVibGlzaGVyIHNlbmRzIHRvIHRoZSBwcm90YWdvbmlzdCwgd2FzIG1lYW50IHRvIGJlIHNlbGYtcmVmZXJlbnRpYWwgaW4gYSB0b25ndWUtaW4tY2hlZWsgbWFubmVyLiBCdXQgaWYgc28sIGRpcmVjdG9yIExlb3MgQ2FyYXggYXBwYXJlbnRseSBuZWdsZWN0ZWQgdG8gaW5mb3JtIHRoZSBhY3RvcnMgb2YgdGhlIHRydWUgbmF0dXJlIG9mIHRoZSBmaWxtLiBUaGV5IGFyZSBhbGwgc28gZHJlYWRmdWxseSBlYXJuZXN0IGluIHRoZWlyIHBvcnRyYXlhbHMgdGhhdCBJIGhhdmUgdG8gY29uY2x1ZGUgQ2FyYXggYWN0dWFsbHkgdGFrZXMgaGltc2VsZiBzZXJpb3VzbHkgaGVyZSwgb3IgZWxzZSBoYXMgc28gbXVjaCBkaXNkYWluIGZvciBldmVyeW9uZSwgZXNwZWNpYWxseSB0aGUgdmlld2luZyBhdWRpZW5jZSwgdGhhdCBoZSBjYW4ndCBiZSBib3RoZXJlZCBsZXR0aW5nIGFueW9uZSBpbiBvbiB0aGUgam9rZS48YnIgLz48YnIgLz5Tb21lIGF1dGV1cnMgYXJlIGFibGUgdG8gZ2V0IGF3YXkgd2l0aCBtYWtpbmcgb2JsaXF1ZSwgYml6YXJyZSBmaWxtcyBiZWNhdXNlIHRoZXkgZG8gc28gd2l0aCDDqWxhbiBhbmQgdW5pcXVlIHBlcnNvbmFsIHN0eWxlIChlLmcuLCBEYXZpZCBMeW5jaCBhbmQgQWxlamFuZHJvIEpvZG9yb3dza3kpLiBPdGhlcnMgdXNlIGEgc3VidGxlciBhcHByb2FjaCB3aGlsZSBzdGlsbCB3ZWF2aW5nIHN1cnJlYWwgZWxlbWVudHMgaW50byB0aGUgZmFicmljIG9mIHRoZSBzdG9yeSAoZS5nLiwgS3J6eXN6dG9mIEtpZXNsb3dza2ksIGFuZCBEYXZpZCBDcm9uZW5iZXJnJ3MgbGF0ZXIsIGxlc3MgYml6YXJyZSB3b3JrcykuIEluIFBvbGEgWCwgQ2FyYXggdGhyb3dzIGEgZGlzam9pbnRlZCBtZXNzIGF0IHRoZSB2aWV3ZXIgYW5kIHRoZW4gZGFyZXMgaGltIHRvIGZpbmQgZmF1bHQgd2l0aCBpdC4gV2VsbCwgaGVyZSBpdCBpczogdGhlIHBhY2luZyBpcyBlcnJhdGljIGFuZCBjaG9wcHksIGluIHBhcnRpY3VsYXIgY29udGludWl0eSBpcyBvZnRlbiBkaXNwZW5zZWQgd2l0aDsgc3VwZXJmbHVvdXMgY2hhcmFjdGVycyBhYm91bmQgKGUuZy4sIHRoZSBHeXBzeSBtb3RoZXIgYW5kIGNoaWxkKTsgbW9zdCBvZiB0aGUgcGVyZm9ybWFuY2VzIGFyZSBvdmVyd3JvdWdodDsgdGhlIGxpZ2h0aW5nIGlzIG9mdGVuIHBvb3IsIHBhcnRpY3VsYXJseSBpbiB0aGUgb2Z0LWRpc2N1c3NlZCBzZXggc2NlbmU7IHVuY29ubmVjdGVkIHNjZW5lcyBhcmUgdGhydXN0IGludG8gdGhlIGZpbG0gZm9yIG5vIGRpc2Nlcm5pYmxlIHJlYXNvbjsgYW5kIHRoZSBsaXN0IGdvZXMgb24uPGJyIC8+PGJyIC8+Tm90IHRvIGJlIGNvbXBsZXRlbHkgbmVnYXRpdmUsIGl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZXJlIHdlcmUgc29tZSB1cGxpZnRpbmcgZXhjZXB0aW9ucy4gSSBsaWtlZCB0aGUgbXVzaWNhbCBzY29yZSwgZXZlbiB0aGUgY2Fjb3Bob25vdXMgaW5kdXN0cmlhbC10ZWNobm8gbXVzaWMgYmVpbmcgcGxheWVkIGluIHRoZSBzcHJhd2xpbmcsIGFiYW5kb25lZCBjb21wbGV4IHRvIHdoaWNoIHRoZSBtYWluIGNoYXJhY3RlcnMgcmV0cmVhdCBpbiB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIGZpbG0gKHBlcmhhcHMgYSByZWZlcmVuY2UgdG8gQW5keSBXYXJob2wncyAnRmFjdG9yeScgb2YgdGhlICc2MHM/KS4gTXVjaCBvZiB0aGUgcGhvdG9ncmFwaHkgb2YgdGhlIGNvdW50cnlzaWRlIHdhcyBiZWF1dGlmdWwsIGFuIG9idmlvdXMgYXR0ZW1wdCBhdCBjb250cmFzdCB3aXRoIHRoZSBncmlteSBjaXR5IHNldHRpbmdzLiBBbmQsIGV2ZW4gd2VsbCBpbnRvIG1pZGRsZS1hZ2UsIENhdGhlcmluZyBEZW5ldXZlIHNob3dzIHRoYXQgc2hlIHN0aWxsIGhhcyAnaXQnLiBIZXIgcGVyZm9ybWFuY2Ugd2FzIGFsc28gdGhlIG9ubHkgb25lIGFtb25nIHRoZSBtYWpvciBjaGFyYWN0ZXJzIHRoYXQgZGlkbid0IHNpbmsgaW50byBiYXRob3MuPGJyIC8+PGJyIC8+VGhlcmUgd2FzIGFuIGVhcmxpZXIgdGltZSB3aGVuIEkgd291bGQgcmVnYXJkIHN1Y2ggZmlsbXMgYXMgIlBvbGEgWCIgbW9yZSBjaGFyaXRhYmx5LiBFeHBlcmltZW50YXRpb24gaXMgYWRtaXJhYmxlLCBldmVuIHdoZW4gdGhlIGV4cGVyaW1lbnQgZG9lc24ndCB3b3JrLiBCdXQgQ2FyYXggdHJpZXMgbm90aGluZyBuZXcgaGVyZTsgdGhlIGZpbG0gaXMgYSBwYXN0aWNoZSBvZiBlbGVtZW50cyBib3Jyb3dlZCBmcm9tIGNvdW50bGVzcyBlYXJsaWVyIGZpbG1zLCBhbmQgYWZ0ZXIgc2V2ZXJhbCBkZWNhZGVzIG9mIG1vdmllLXZpZXdpbmcgYW5kIGxpdGVyYWxseSB0aG91c2FuZHMgb2YgZmlsbXMgbGF0ZXIsIEkgc2ltcGx5IG5vIGxvbmdlciBoYXZlIHRoZSBwYXRpZW5jZSBmb3IgdGhpcyBraW5kIG9mIHVub3JpZ2luYWwsIHBvb3JseSBjcmFmdGVkIHRyaXBlLiBBdCB0aGlzIGVhcmx5IG1vbWVudCBpbiB0aGUgMjFzdCBjZW50dXJ5LCBvbmUgaXMgbGVmdCBhc2tpbmc6IFdpdGggdGhlIGV4Y2VwdGlvbiBvZiBKZWFuLVBpZXJyZSBKZXVuZXQsIGFyZSB0aGVyZSAqYW55KiBkaXJlY3RvcnMgaW4gRnJhbmNlIHdobyBrbm93IGhvdyB0byBtYWtlIGEgd2F0Y2hhYmxlIG1vdmllIGFueW1vcmU/IFJhdGluZzogMy8xMC4pAAAAAAAAAEAKgwYI4wEQ4wEi8QVJIHVzZWQgdG8gd2F0Y2ggdGhpcyBzaG93IHdoZW4gSSB3YXMgYSBsaXR0bGUgZ2lybC4gQWx0aG91Z2ggSSBkb24ndCByZW1lbWJlciBtdWNoIGFib3V0IGl0LCBJIG11c3Qgc2F5IHRoYXQgaXQgd2FzIGEgcHJldHR5IGdvb2Qgc2hvdy4gQWxzbywgSSBkb24ndCB0aGluayBJJ3ZlIHNlZW4gZXZlcnkgZXBpc29kZS4gSG93ZXZlciwgaWYgeW91IGFzayBtZSwgaXQgd2FzIHN0aWxsIGEgZ29vZCBzaG93LiBJIHZhZ3VlbHkgcmVtZW1iZXIgdGhlIHRoZW1lIHNvbmcuIEV2ZXJ5b25lIHdhcyBpZGVhbGx5IGNhc3QsIHRoZSBjb3N0dW1lIGRlc2lnbiB3YXMgZ3JlYXQuIFRoZSBwZXJmb3JtYW5jZXMgd2VyZSB0b3AtZ3JhZGUsIHRvby4gSSBqdXN0IGhvcGUgc29tZSBuZXR3b3JrIGJyaW5ncyB0aGlzIHNlcmllcyBiYWNrIG9uZSBkYXkgc28gdGhhdCBJJ2xsIGJlIGFibGUgdG8gc2VlIGV2ZXJ5IGVwaXNvZGUuIEJlZm9yZSBJIHdyYXAgdGhpcyB1cCwgSSdkIGxpa2UgdG8gc2F5IHRoYXQgSSdsbCBhbHdheXMgcmVtZW1iZXIgdGhpcyBzaG93IGluIG15IG1lbW9yeSBmb3JldmVyLCBldmVuIHRob3VnaCBJIGRvbid0IHRoaW5rIEkndmUgc2VlbiBldmVyeSBlcGlzb2RlLiBOb3csIGluIGNvbmNsdXNpb24sIHdoZW4gYW5kIGlmIHRoaXMgc2hvdyBpcyBldmVyIGJyb3VnaHQgYmFjayBvbiB0aGUgYWlyLCBJIGhvcGUgdGhhdCB5b3UgY2F0Y2ggaXQgb25lIGRheSBiZWZvcmUgaXQgZ29lcyBvZmYgdGhlIGFpciBmb3IgZ29vZC4pAAAAAAAAAEAK/A0I5AEQ5AEi6g1JIHVzZWQgdG8gYWx3YXlzIGxvdmUgdGhlIGJpbGwgYmVjYXVzZSBvZiBpdHMgZ3JlYXQgc2NyaXB0IGFuZCBjaGFyYWN0ZXJzLCBidXQgbGF0ZWx5IGkgZmVlbCBhcyB0aG91Z2ggaXQgaGFzIHR1cm5lZCBpbnRvIGFuIGVtb3Rpb25hbCB0eXBlIG9mIHNvYXAuIElmIHlvdSBsb29rIGF0IHByb21vdGlvbmFsIHBpY3R1cmVzL3Bvc3RlcnMgb2YgdGhlIGJpbGwgbm93IHlvdSB3aWxsIHNlZSBlaXRoZXIgdHdvIG9mIHRoZSBvZmZpY2VycyBodWdnaW5nL2tpc3Npbmcgb3Igc29tZXRoaW5nIHRvIGRvIHdpdGggZnJpZW5kc2hpcHMgd2hlcmVhcyBwcm9tb3Rpb25hbCBwaWN0dXJlcyBvZiB0aGUgYmlsbCBhIGxvbmcgdGltZSBhZ28gd291bGQgaGF2ZSBzaG93biBzb21ldGhpbmcgdG8gZG8gd2l0aCBjcmltZS4gVGhpcyBwcm92ZXMgdGhhdCBpdCBoYXMgY2hhbmdlZCBhIGxvdCBmcm9tIGJlaW5nIGFuIGFic29sdXRlbHkgYW1hemluZyBQb2xpY2UgZHJhbWEgdG8gYW4gYXZlcmFnZSB0eXBlIG9mIHRlbGV2aXNpb24gc29hcC4gV2hlbiBpIHdhdGNoIGl0IGkgZmVlbCBsaWtlIEknbSB3YXRjaGluZyBhIHBvbGljZSB2ZXJzaW9uIG9mIENvcm9uYXRpb24gU3RyZWV0IG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIGhhdmUgdG8gc2F5IGkgc3RpbGwgbGlrZSB0aGUgYmlsbCBhcyBJJ20gaW50ZXJlc3RlZCBpbiBQb2xpY2Ugd29yayBhbmQgdGhhdCB0eXBlIG9mIHRoaW5nIGJ1dCBpIHJlYWxseSBtaXNzIHRoZSBncmVhdG5lc3MgdGhhdCBUaGUgQmlsbCB1c2VkIHRvIGhhdmUuIEkgd2FudCB0byByYXRlIGl0IGFzIDIgb3V0IG9mIHRlbiBiZWNhdXNlIHlvdSBoYXZlIHRvIGFkbWl0IGl0IGhhcyBiZWVuIHRvdGFsbHkgcnVpbmVkIGJ5IHRoZSBwZW9wbGUgd2hvIHRvb2sgdGhlIGJpbGwgb3Zlci48YnIgLz48YnIgLz5BcyBmb3IgdGhlIHNjcmlwdCBhbmQgY2hhcmFjdGVycyB0aGV5IGhhdmUgYm90aCBnb25lIGRvd25oaWxsLCBtb3N0IG9mIHRoZSBncmVhdCBjaGFyYWN0ZXJzIGFyZSBnb25lIG5vdyAoYWx0aG91Z2ggYSBmZXcgc3RpbGwgcmVtYWluIGkgdGhpbmspIGFuZCBJJ20gbm90IHNheWluZyB0aGF0IHRoZSBuZXdlciBjaGFyYWN0ZXJzIGFyZSBwb29yIG9yIGFueXRoaW5nIGJlY2F1c2UgdGhleSBkZWZpbml0ZWx5IGFyZW4ndCwgaXRzIGp1c3QgdGhhdCB0aGV5IGxhY2sgdGhlIHRvdWdoIGxvb2tzLCBwZXJzb25hbGl0aWVzIGFuZCBzY3JpcHQgbGluZXMgdGhhdCBhbGwgb2YgdGhlIG9sZCBjaGFyYWN0ZXJzIHVzZWQgdG8gaGF2ZSBiZWNhdXNlIG1vc3Qgb2YgdGhlIG5ldyBvbmVzIGFyZSBhdCB0aGUgbW9tZW50IGludm9sdmVkIHdpdGggc2lsbHkgcmVsYXRpb25zaGlwcyBhbmQgZmFtaWx5IHRyb3VibGUuPGJyIC8+PGJyIC8+T3ZlcmFsbCBiZWluZyBvbmUgb2YgdGhlIG9ubHkgUG9saWNlIHByb2dyYW1zIG9uIHRlbGV2aXNpb24gdGhlc2UgZGF5cywgVGhlIEJpbGwgd2lsbCBhbHdheXMgYmUgYSBjcmFwcGlseSBpbnRlcmVzdGluZyB0aGluZyB0byB3YXRjaCwgYnV0IGxpa2UgaSBzYXkgaXQgaGFzIGxvc3QgYSBsb3Qgb2YgaXRzIHVuaXF1ZW5lc3MgKGlmIHRoYXRzIHRoZSByaWdodCBzcGVsbGluZykgYW5kIHdvdWxkIG5vdyBiZSBjbGFzc2VkIGFzIGEgdGVycmlibGUsIHVucmVhbCB0ZWxldmlzaW9uIHNvYXAuPGJyIC8+PGJyIC8+UmVjb21tZW5kZWQgdG8gd2F0Y2ggZm9yIGEgZ29vZCBsYXVnaCBvdmVyIHRoZSBzdHVwaWRpdHkgb2YgdGhlIHBvbGljZSBvZmZpY2VycyBpbnZvbHZlZCAtIDIvMTApAAAAAAAAAEAKlAYI5QEQ5QEiggZJIHRob3VnaHQgbWF5YmUgYSBmaWxtIHdoaWNoIGJvYXN0ZWQgYSBjYXN0IGluY2x1ZGluZyBQZXRlciBPJ1Rvb2xlLCBTdXNhbm5haCBZb3JrLCBNaWNoYWVsIENyYWlnICYgSGFycnkgQW5kcmV3cyBtaWdodCBiZSB3b3J0aCB3YXRjaGluZy4gQWxhcywgSSB3YXMgd3JvbmcuIFV0dGVyIHByZXRlbnRpb3VzIG5vbnNlbnNlIGZyb20gYmVnaW5uaW5nIHRvIGVuZCB3aXRoIGJvdGggTydUb29sZSBhbmQgWW9yayBvdmVyYWN0aW5nIHdpbGRseS4gSSB3YXRjaGVkIGl0IHR3aWNlIGFuZCBzdGlsbCBoYXZlIG5vIGlkZWEgd2hhdCBpcyB3YXMgYWJvdXQuIEkndmUgYSBmZWVsaW5nIE8nVG9vbGUgcGxheXMgdGhlIExhaXJkIG9mIGEgU2NvdHRpc2ggY2FzdGxlIHdobyBoYXMgYSBkcmluayBwcm9ibGVtIGFuZCBsaWtlcyByZWxpdmluZyBjaGlsZGhvb2QgZ2FtZXMgd2l0aCBoaXMgc2lzdGVyIChZb3JrKS4gSGUgaXMgYWxzbyBiYXJraW5nIG1hZC4gQnV0IGFwYXJ0IGZyb20gdGhhdCwgeW91ciBndWVzcyBpcyBhcyBnb29kIGFzIG1pbmUuPGJyIC8+PGJyIC8+VGhlIGZpbG0gaGFzIG5vIHJlZGVlbWluZyBmZWF0dXJlIHdoYXRzb2V2ZXIuIEkgY2FuIG9ubHkgYXNzdW1lIHRoZSBjYXN0IGFuZCBkaXJlY3RvciB3ZXJlIGJsYWNrbWFpbGVkIGludG8gbWFraW5nIHRoaXMgZHJlYXJ5LCB1bmltYWdpbmF0aXZlLCBzdGFneSBwaWZmbGUuIENsZWFybHkgYSB3YXN0ZSBvZiB0aGUgdGltZSBvZiBhIHRhbGVudGVkIGNhc3QgYW5kIGRpcmVjdG9yLiBSaXNpYmxlLikAAAAAAAAAQArsFQjmARDmASLaFUkgdGhvdWdodCBSYWNoZWwgWW9yayB3YXMgZmFudGFzdGljIGFzICJMdWN5LiIgSSBoYXZlIHNlZW4gaGVyIGluICJLaXNzIE1lLCBLYXRlIiBhbmQgIlZpY3Rvci9WaWN0b3JpYSwiIGFzIHdlbGwsIGFuZCBpbiBlYWNoIG9mIHRoZXNlIHBlcmZvcm1hbmNlcyBzaGUgaGFzIGRldmVsb3BlZCB2ZXJ5IGRpZmZlcmVudCwgYW5kIHZlcnkgcmVhbCwgY2hhcmFjdGVyaXphdGlvbnMuIFNoZSBpcyBhIGNoYW1lbGVvbiB3aG8gY2FuIHBsYXkgKGFuZCBzaW5nKSBhbnl0aGluZyE8YnIgLz48YnIgLz5JIGFtIHZlcnkgc3VycHJpc2VkIGF0IGhvdyBtYW55IG5lZ2F0aXZlIHJldmlld3MgYXBwZWFyIGhlcmUgcmVnYXJkaW5nIFJhY2hlbCdzIHBlcmZvcm1hbmNlIGluICJMdWN5LiIgRXZlbiBzb21lIGJvbmFmaWRlIFRWIGFuZCBlbnRlcnRhaW5tZW50IGNyaXRpY3Mgc2VlbSB0byBoYXZlIG1pc3NlZCB0aGUgcG9pbnQgb2YgaGVyIHBvcnRyYXlhbC4gU28gbWFueSBwZW9wbGUgaGF2ZSBmb2N1c2VkIG9uIHRoZSBmYWN0IHRoYXQgUmFjaGVsIGRvZXNuJ3QgcmVhbGx5IGxvb2sgbGlrZSBMdWN5LiBNeSByZXNwb25zZSB0byB0aGF0IGlzLCAiU28gd2hhdD8iIEkgd2Fzbid0IGxvb2tpbmcgZm9yIGEgc3VwZXJmaWNpYWwgaW1wZXJzb25hdGlvbiBvZiBMdWN5LiBJIHdhbnRlZCB0byBrbm93IG1vcmUgYWJvdXQgdGhlIHJlYWwgd29tYW4gYmVoaW5kIHRoZSBjbG93bi4gQW5kIFJhY2hlbCBjZXJ0YWlubHkgZ2F2ZSB1cyB0aGF0LCBpbiBncmVhdCBkZXB0aC4gSSBhbHNvIGRpZG4ndCB3YW50IHRvIHNlZSBzb21lb25lIHNpbXBseSAiZG9pbmciIGNsYXNzaWMgTHVjeSByb3V0aW5lcy4gVGhlcmVmb3JlIEkgd2FzIHZlcnkgcGxlYXNlZCB3aXRoIHRoZSBkZWNpc2lvbiBieSB0aGUgcHJvZHVjZXJzIGFuZCBkaXJlY3RvciB0byBoYXZlIFJhY2hlbCBwb3J0cmF5IEx1Y3kgaW4gcmVoZWFyc2FsIGZvciB0aGUgbW9zdCBtZW1vcmFibGUgb2YgdGhlc2Ugc2tpdHMgLSBWaXRhbWVhdGF2ZWdhbWluIGFuZCBUaGUgQ2FuZHkgRmFjdG9yeS4gKEl0IHNlZW1zIHRoYXQgc29tZSBvZiB0aGUgcmV2aWV3ZXJzIGRpZG4ndCByZWFsaXplIHRoYXQgdGhlc2UgdHdvIHNjZW5lcyB3ZXJlIG1lYW50IHRvIGJlIHJlaGVhcnNhbCBzZXF1ZW5jZXMgYW5kIG5vdCB0aGUgYWN0dWFsIHNraXRzKS4gVGhpcyBhcHByb2FjaCwgSSB0aG91Z2h0LCBnYXZlIGFuIGlubm92YXRpdmUgdHdpc3QgdG8gc2tldGNoZXMgdGhhdCBzbyBtYW55IG9mIHVzIGtub3cgYnkgaGVhcnQuIEkgYWxzbyB0aG91Z2h0IFJhY2hlbCB3YXMgdGVycmlmaWNhbGx5IGZyZXNoIGFuZCBmdW5ueSBpbiB0aGVzZSBzY2VuZXMuIEFuZCBzaGUgYWJzb2x1dGVseSBuYWlsZWQgdGhlIHJvdXRpbmVzIHRoYXQgd2VyZSByZWNyZWF0ZWQgLSB0aGUgUHJvZmVzc29yIGFuZCB0aGUgR3JhcGUgU3RvbXBpbmcsIGluIHBhcnRpY3VsYXIuIFRoZXJlIHdhcyBvbmUgbW9tZW50IGluIHRoZSBHcmFwZSBzY2VuZSB3aGVyZSB0aGUgY29ybmVyIG9mIFJhY2hlbCdzIG1vdXRoIGhhZCB0aGUgZXhhY3QgbGl0dGxlIHVwdHVybiB0aGF0IEkgcmVtZW1iZXIgTHVjeSBoYXZpbmcuIEkgY291bGRuJ3QgYmVsaWV2ZSBzaGUgd2FzIGFibGUgdG8gY2FwdHVyZSB0aGF0IC0gYW5kIHNvIG5hdHVyYWxseS48YnIgLz48YnIgLz5JIHdvbmRlciBpZiBtYW55IG9mIHRoZSBmb2xrcyB3aG8gY3JpdGljaXplZCB0aGUgcGVyZm9ybWFuY2Ugd2VyZSBleHBlY3RpbmcgdG8gc2VlIHRoZSBMdWNpbGxlIEJhbGwgb2YgIkkgTG92ZSBMdWN5IiB0aHJvdWdob3V0IHRoZSBlbnRpcmUgbW92aWUuIEFmdGVyIGFsbCwgdGhvc2Ugb2YgdXMgd2hvIGNhbWUgdG8ga25vdyBoZXIgb25seSB0aHJvdWdoIFRWIHdvdWxkIG5vdCBoYXZlIGFueSBpZGVhIHdoYXQgTHVjeSB3YXMgcmVhbGx5IGxpa2UgaW4gaGVyIGVhcmx5IG1vdmllIHllYXJzLiBJIHRoaW5rIFJhY2hlbCBzaG93ZWQgYSBuYXR1cmFsIHByb2dyZXNzaW9uIGluIHRoZSBjaGFyYWN0ZXIgdGhhdCB3YXMgYnJpbGxpYW50LiBTaGUgcGxhbnRlZCBhbGwgdGhlIHJpZ2h0IHNlZWRzIGZvciB1cyB0byBzZWUgdGhlIGNsb3duIGp1c3Qgd2FpdGluZyB0byBlbWVyZ2UsIGdpdmVuIHRoZSByaWdodCBzZXQgb2YgY2lyY3Vtc3RhbmNlcy4gTHVjeSBkaWRuJ3QgZml0IHRoZSBtb2xkIG9mIHRoZSBvbGQgc3R1ZGlvIHN5c3RlbS4gSW4gaGVyIGZydXN0cmF0ZWQgYXR0ZW1wdHMgdG8gYmVjb21lIHRoZSBzdGVyZW90eXBpY2FsIG1vdmllIHN0YXIgb2YgdGhhdCBlcmEsIHNoZSBrZXB0IHJlcHJlc3Npbmcgd2hhdCB3b3VsZCBwcm92ZSB0byBiZSBoZXIgdWx0aW1hdGUgZ2lmdHMuPGJyIC8+PGJyIC8+SSBiZWxpZXZlIHRoYXQgUmFjaGVsIGRlZnRseSBjYXB0dXJlZCB0aGUgY29tZWR5LCBkcmFtYSwgd2l0LCBzYWRuZXNzLCBhbmdlciwgcGFzc2lvbiwgbG92ZSwgYW1iaXRpb24sIGxveWFsdHksIHNleGluZXNzLCBzZWxmIGFic29ycHRpb24sIGNoaWxkaXNobmVzcywgYW5kIHN0b2ljaXNtIGFsbCByb2xsZWQgaW50byBvbmUgY29tcGxleCBBbWVyaWNhbiBpY29uLiBBbmQgc2hlIGRpZCBpdCB3aXRoIGFuIGF1dGhlbnRpY2l0eSBhbmQgZnJlc2huZXNzIHRoYXQgd2FzIHRvdGFsbHkgZW5kZWFyaW5nLiAiTHVjeSIgd2FzIGEgc3RhciB0dXJuIGZvciBSYWNoZWwgWW9yay4gSSBob3BlIGl0IGJyaW5ncyBhIGZsb29kIG9mIGdyZWF0IHJvbGVzIGhlciB3YXkgaW4gdGhlIGZ1dHVyZS4gSSBhbHNvIGhvcGUgaXQgYnJpbmdzIGhlciBhbiBFbW15LikAAAAAAAAAQArIBQjnARDnASK2BUkgdGhpbmsgdGhpcyBwcm9ncmFtbWUgaXMgYSBsb2FkIG9mIHJ1YmJpc2guIEFsbCB0aGV5IGRvIGlzIGFyZ3VlIGFuZCBzbGFwIGVhY2ggb3RoZXIgYWNyb3NzIHRoZSBmYWNlIGFuZCB0aGV5IGNhbGwgdGhpcyBhY3Rpbmc/ISBUaGVzZSBwZW9wbGUgZ2V0IHBhaWQgbG90cyBvZiBtb25leSBmb3IgdGhpcyBhbmQgbW9zdCBvZiB0aGVtIGNhbid0IGV2ZW4gYWN0IHRvIHNhdmUgdGhlaXIgbGl2ZXMuIEFsc28sIHRoZSBzdG9yeSBsaW5lcyBhcmUgYXdmdWwgYW5kIGFmdGVyIHdhdGNoaW5nIGl0IGZvciBhIGZldyBtaW51dGVzLCBJIGFtIGJvcmVkIHdpdGggaXQuIEkgbGlrZSB0aGUgd2F5IHRoYXQgSGFycnkgSGlsbCB0YWtlcyB0aGUgbWlja2V5IG91dCBvZiBpdCBvbiBoaXMgVFYgc2hvdyAnVFYgQnVycCcgZS5nLiB0aGUgd2VhayBqb2tlICJUaGUgUHJpbmNlc3MgYW5kIHRoZSBQZWEgaXNuJ3QgZXhhY3RseSBTaGFrZXNwZWFyZSBpcyBpdD8iIHRoYXQgaGFkIFNvbmlhIGFuZCBOYW9taSBpbiBzdGl0Y2hlcy4gSSBkb24ndCBzZWUgaG93IHRoYXQgaXMgZnVubnkuIEkgdGhpbmsgdGhpcyBpcyBhIHdhc3RlIG9mIGV2ZXJ5Ym9keSdzIG1vbmV5IGZvciB0aGVpciBUViBsaWNlbmNlIHNvIHRoaXMgY2FuIGJlIHNob3duIDQvNSBkYXlzIGEgd2Vlay4gSXNuJ3QgdGhlcmUgYW55dGhpbmcgYmV0dGVyIHRoYW4gdGhpcz8pAAAAAAAAAEAK5wYI6AEQ6AEi1QZJIHNhdyB0aGlzIG1vdmllIHR3aWNlLiBJIGNhbid0IGJlbGlldmUgUGludGlsaWUgbWFkZSBzdWNoIGEgZmFudGFzeSBtb3ZpZS4gSSdtIGFsc28gYSBtb3ZpZS90aGVhdHJlIGRpcmVjdG9yIGFuZCBJIGtub3cgd2hhdCBJIHNwZWFrLiBUaGlzIGlzIG5vdCBSb21hbmlhIGFueW1vcmUsIGJ1dCBJIHNlZSB0aGUgZXZlbnRzIGFyZSBoYXBwZW5pbmcgaW4gdGhlIHNhbWUgcGVyaW9kIHdpdGggdGhlIGluY2lkZW50IGZyb20gMTEgU2VwdGVtYmVyLiBObyBzdG9yeSwgbm8gcGxvdCwgbm90aGluZy4gTm8gY29uY2x1c2lvbiwgbm8gbWVzc2FnZSwgbm90aGluZyBwcm9mb3VuZCwgbm90aGluZyBoaWRkZW4uIEp1c3QgZW1wdHkgaW1hZ2VzLjxiciAvPjxiciAvPldoYXQgbW9zdCBvZiBSb21hbmlhbnMgZG9uJ3Qga25vdywgdGhpcyBtb3ZpZSBpcyBmb3IgdGhlIGZyZW5jaCB2aWV3ZXJzLCBub3QgZm9yIHVzLiBUaGV5IHJlYWxseSBiZWxpZXZlIHRoYXQgaXMgdGhlIHJlYWxpdHkgaW4gUm9tYW5pYS4gQWxzbyBmb3IgdGVlbmFnZXJzLiBQaW50aWxpZSBzaG91bGQgc3RvcCBtYWtpbmcgbW92aWVzLiBJIGRvbid0IHJlYWxseSBrbm93IGlmIHdlIGNhbiBjYWxsIHRoaXMgYSBtb3ZpZSwgbWF5YmUgYSBob3Jyb3IgOikgQW5kIHdlIHdvbmRlciB3aHkgd2UndmUgZ290IHN1Y2ggYW4gaW1hZ2UgaW4gRXVyb3BlLiBUaGlzIFdBUyBhIHJlYWxpdHksIGJ1dCBpc24ndCBhbnltb3JlLiBBIGdvb2QgZnJpZW5kIG9mIG1pbmUgZnJvbSB0aGUgQnJpdGhpc2ggZW1iYXNzeSBzYWlkOiAiWW91IGhhdmUgbm8gaWRlYSB3aGF0IGEgbG9uZyB3YXkgUm9tYW5pYW4gcGVvcGxlIHdhbGtlZCBmcm9tIENlYXVzZXNjdSIuKQAAAAAAAABACvMBCOkBEOkBIuEBSSBzYXcgdGhpcyBpbiB0aGUgc3VtbWVyIG9mIDE5OTAuIEknbSBzdGlsbCBhbm5veWVkIGJ5IGhvdyBiYWQgdGhpcyBtb3ZpZSBpcyBpbiAyMDAxLjxiciAvPjxiciAvPkltcGxhdXNpYmxlIHBsb3QuIFlvdSdkIGhhdmUgdG8gYmUgYSBjaGlsZCB0byB0aGluayB0aGlzIGNvdWxkIGhhcHBlbi48YnIgLz48YnIgLz5JJ20ganVzdCByZWFsbHkgYW5ub3llZCBieSBpdC4gRG9uJ3Qgc2VlIHRoaXMuKQAAAAAAAABACoUECOoBEOoBIvMDSSBzYXQgdGhyb3VnaCBhbG1vc3Qgb25lIGVwaXNvZGUgb2YgdGhpcyBzZXJpZXMgYW5kIGp1c3QgY291bGRuJ3QgdGFrZSBhbnltb3JlLiBJdCBmZWx0IGFzIHRob3VnaCBJJ2Qgd2F0Y2hlZCBkb3plbnMgb2YgZXBpc29kZXMgYWxyZWFkeSwgYW5kIHRoZW4gaXQgaGl0IG1lLi4uLi5UaGVyZSdzIG5vdGhpbmcgbmV3IGhlcmUhIEkndmUgaGVhcmQgdGhhdCBqb2tlIG9uIFNlaW5mZWxkLCBJIHNhdyBzb21lb25lIGZhbGwgbGlrZSB0aGF0IG9uIGZyaWVuZHMsIGFuIGVwaXNvZGUgb2YgSGFwcHkgRGF5cyBoYWQgYWxtb3N0IHRoZSBzYW1lIHN0b3J5bGluZSwgZWN0LiBOb25lIG9mIHRoZSBhY3RvcnMgYXJlIGludGVyZXN0aW5nIGhlcmUgZWl0aGVyISBTb21lIHdlcmUgZ29vZCBvbiBvdGhlciBzaG93cyAobm90IGhlcmUpLCBhbmQgb3RoZXJzIGFyZSBuZXcgdG8gYSBwcm9mZXNzaW9uIHRoZXkgc2hvdWxkIGhhdmUgbmV2ZXIgZW50ZXJlZC4gQXZvaWQgdGhpcyBzdGlua2VyISkAAAAAAAAAQAqgBAjrARDrASKOBEkgcmVudGVkIHRoaXMgdGhpbmtpbmcgaXQgd291bGQgYmUgcHJldHR5IGdvb2QganVzdCBieSB0aGUgY292ZXIgb2YgdGhlIG1vdmllIGNhc2UuIEp1ZGdlIGFuZCBKdXJ5IHN0YXJ0ZWQgb3V0IHByZXR0eSBnb29kIGtpbGxlciBjaGFzaW5nIHRoZSBtYW4gd2hvIGtpbGxlZCBoaXMgd2lmZSBvbiBhIGJpa2Ugd2l0aCBhIGNvb2wgZ3VuLCBidXQgdGhpcyBtb3ZpZSBnb3QgcHJvZ3Jlc3NpdmVseSBzdHVwaWRlciBhcyBpdCB3ZW50IG9uLiBEYXZpZCBLZWl0aCBpcyBhd2Vzb21lIGFjdG9yIGVzcGVjaWFsbHkgd2hlbiBoZSBwbGF5cyBhIHJvbGUgbGlrZSB0aGlzIHRvbyBiYWQgdGhlIG1vdmllIHdhcyBhIHBpZWNlIG9mIGNyYXAgaXQgcmVhbGx5IHdhc3RlZCBoaXMgdGFsZW50LiBKdWRnZSBhbmQgSnVyeSB3YXMgd2VsbCBwbGFpbiBkdW1iIEkgZ2F2ZSBpdCBhIDMgc2hvdWxkIGhhdmUgZ2F2ZSBpdCBhIDIsIEkgZ2F2ZSBpdCBhbiBleHRyYSBzdGFyIGp1c3QgYmVjYXVzZSBEYXZpZCBLZWl0aCdzIGd1biB3YXMgY29vbC4pAAAAAAAAAEAKwQkI7AEQ7AEirwlJIHJlbnRlZCB0aGlzIG1vdmllIGJlY2F1c2UgSSBhbSBhIGh1Z2UgRHVkaWtvZmYgZmFuLiBJIGZpZ3VyZWQgaXQgY291bGRuJ3QgYmUgdGhhdCBiYWQuIEJveSB3YXMgSSB3cm9uZyEgQXQgdGhlIDE1IG1pbnV0ZSBtYXJrICwgSSB3YXMgYmVnaWluZyB0aGUgb3RoZXJzIHRvIGxldCBtZSByaXAgdGhlIERWRCBvdXQgYW5kIGZsaW5nIGl0IGJhY2sgdG8gdGhlIHJlbnRhbCBzdG9yZSwgYnV0IHRoZXkgcmVmdXNlZC4gVGhleSBzd29yZSBpdCBoYWQgdG8gZ2V0IGJldHRlci48YnIgLz48YnIgLz5UaGV5IHdlcmUgd3JvbmchIFRoaXMgbW92aWUgd2FzIGxhY2tpbmcgZXZlcnl0aGluZy4gVGhlIGFjdG9ycyBkZWxpdmVyZWQgdGhlaXIgbGluZXMgd2l0aCBhcyBtdWNoIGVtb3Rpb24gYXMgYSBjb21hdG9zZSByb2NrISBUaGUgcGxvdCB3YXMgcmlkaWN1bG91cyBhbmQgSSB3YXMgb2ZmZW5kZWQgdGhhdCBIb2xseXdvb2QgYXNzdW1lZCBwZW9wbGUgd2VyZSBkdW1iIGVub3VnaCB0byBlbmpveSBpdC4gTm9uZSBvZiB0aGUgY2hhcmFjdGVycyBpbnRlcmFjdGVkIHZlcnkgd2VsbCB3aXRoIGVhY2ggb3RoZXIuIEljZS1UIGdpdmVzIG9uZSBvZiBoaXMgd29yc3QgcGVyZm9ybWFuY2VzIGhlcmUuPGJyIC8+PGJyIC8+QWZ0ZXIgd2F0Y2hpbmcgZm9vdGFnZSBvZiB0aGUgd3JvbmcgcGxhbmUsIGJhZCBndXlzIHN0YW5kaW5nIHVwIHRvIGdldCBzaG90LCBhbmQgY2xpcHMgYmVpbmcgZW1wdGllZCBhbmQgbWlzc2luZyBldmVyeXRoaW5nLCBJIHdhbnRlZCB0byBzY3JlYW0gYW5kIGJhbmcgbXkgaGVhZCBvbiBjb25jcmV0ZS4gVGhlIG1vdmllIGhpdCBpdHMgcGxhdGVhdSBvZiBpZ25vcmFuY2Ugd2hlbiB0aGUgcGVvcGxlIG9uIHRoZSBzcGFjZSBzdGF0aW9uIHVzZWQgYW4gZWxldmF0b3IgdG8gdHJhdmVsLiBTcGFjZSBzdWl0cyBhcmUgbm90IG5lZWRlZCBhbmQgdGhlcmUgaXMgZ3Jhdml0eSBpbiBzcGFjZSByZWdhcmRsZXNzIG9mIHdoYXQgcmVhbCBhc3Ryb25hdXRzIG1heSBzYXkuPGJyIC8+PGJyIC8+SSBkaWRuJ3QgZmluaXNoIHRoaXMgbW92aWUgYW5kIGhhdGVkIGl0LiBJIGRvbid0IHdhbnQgdG8gZmluaXNoIHRoaXMgbW92aWUuIFRoaXMgaXMgc2xvdyBzdWljaWRlLiBJIGNvdWxkIGZlZWwgbXkgY2VyZWJyYWwgY29ydGV4IHBsYW5uaW5nIHRvIGF2ZW5nZSB0aGUgdG9ydHVyZSBJIHB1dCBpdCB0aHJvdWdoLikAAAAAAAAAQAq6EQjtARDtASKoEUkgcmVudGVkIHRoZSB2aWRlbyBvZiAiVGhlIFBpYW5vIFRlYWNoZXIiIGtub3dpbmcgbm90aGluZyBhYm91dCBpdCBvdGhlciB0aGFuIHdoYXQgd2FzIHdyaXR0ZW4gb24gdGhlIHZpZGVvIGJveC4gSSBkaWQgdGhpcyB3aXRoIHNvbWUgdHJlcGlkYXRpb24gYmVjYXVzZSBmaWxtcyB0aGF0IHdpbiBhd2FyZHMgYXQgQ2FubmVzIGFyZSB1c3VhbGx5IHZlcnkgZ29vZCBvciB2ZXJ5IGJhZC4gVW5mb3J0dW5hdGVseSwgdGhpcyBvbmUgZmFsbHMgaW4gdGhlIGxhdHRlciBjYXRlZ29yeS4gQWJvdXQgb25lIHF1YXJ0ZXIgb2YgdGhlIHdheSBpbnRvIGl0IEkgZm91bmQgbXlzZWxmIHNheWluZyBvdXQgbG91ZCwgIlRoaXMgbW92aWUgaXMgYm9yaW5nLiIgQWJvdXQgaGFsZiB3YXkgdGhyb3VnaCBJIHdhcyBzYXlpbmcgdG8gbXlzZWxmLCAiV2hlcmUgaGF2ZSBJIHNlZW4gdGhpcyBiZWZvcmU/IiBBdCB0aGUgdGhyZWUgcXVhcnRlcnMgbWFyayBJIGhhZCBmaWd1cmVkIGl0IG91dC48YnIgLz48YnIgLz5JbiBzcGl0ZSBvZiBpdHMgbGl0ZXJhcnkgb3JpZ2lucywgdGhpcyBmaWxtIGlzIGVzc2VudGlhbGx5IGEgcmVtYWtlIG9mIFJvYmVydCBBbHRtYW4ncyBtdWNoIGVhcmxpZXIgKDE5NjkpLCBhbmQgYmV0dGVyLCAiVGhhdCBDb2xkIERheSBpbiB0aGUgUGFyay4iIEFsdGhvdWdoIHRoZSBkZXRhaWxzIG9idmlvdXNseSBkaWZmZXIgYW5kIEFsdG1hbidzIHdvcmsgd2FzIG1vcmUgcGxvdC1kcml2ZW4gYW5kIGxlc3Mgb2YgYSBjaGFyYWN0ZXIgc3R1ZHksIHRoZSB0d28gZmlsbXMgYXJlIHRoZW1hdGljYWxseSBpZGVudGljYWwuIFRoZXJlIGlzIG5vdGhpbmcgIm5ldyIgdG8gYmUgc2VlbiBpbiB0aGlzIHByb2R1Y3Rpb24uIEV2ZXJ5IGFzcGVjdCBvZiBpdCBoYXMgYmVlbiBkb25lIGJlZm9yZTogYSBjaGFyYWN0ZXIgc3BpcmFsbGluZyBvdXQgb2YgY29udHJvbCB3aXRoIGluY3JlYXNpbmdseSBzZWxmLWRlc3RydWN0aXZlIGJlaGF2aW9yIChBYmVsIEZlcnJhcmEncyAiQmFkIExpZXV0ZW5hbnQiIDE5OTIpOyBhIHBlcnZlcnNlIGFuZCBkb29tZWQgJ2xvdmUnIGN1bG1pbmF0aW5nIGluIGFuIG9wZXJhdGljIChuZWFyKSBkZWF0aCBzY2VuZSAoRGF2aWQgQ3JvbmVuYmVyZydzICJNLiBCdXR0ZXJmbHkiIDE5OTMpOyB1bmNvbW1vbmx5IGJydXRhbCBzZXggc2NlbmVzIChEYXZpZCBMeW5jaCdzICJCbHVlIFZlbHZldCIgMTk4Nik7IGFuZCBzbyBvbi4gSGVuY2UsIEkgYW0gYmVtdXNlZCBieSB0aGUgZmFjdCB0aGF0IHNvIG1hbnkgZm91bmQgdGhlIGZpbG0gdG8gYmUgInNob2NraW5nLCIgInNoYXR0ZXJpbmcsIiBldGMuIFRoaXMgaGlnaGx5IGRlcml2YXRpdmUgZmlsbSBzZWVtcyB0byBoYXZlIGJlZW4gbWFkZSBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBtYWtpbmcgdmlld2VycyBmZWVsIHVuY29tZm9ydGFibGUsIGFuZCBjbGVhcmx5IHN1Y2NlZWRlZCB3aXRoIHNvbWUuIEhvd2V2ZXIsIEkgbGFyZ2VseSBhdHRyaWJ1dGUgc3VjaCBhIHJlYWN0aW9uIHRvIGEgbGFjayBvZiBmaWxtLXZpZXdpbmcgZXhwZXJpZW5jZS4gU2VlIGVub3VnaCBtb3ZpZXMgYW5kIHlvdSByZWFsbHkgd2lsbCwgZXZlbnR1YWxseSwgaGF2ZSBzZWVuIGl0IGFsbC4gQW5kIHdoaWxlIGl0IGlzIHRydWUgdGhhdCBJIHNhdyB0aGUgZXhwdXJnYXRlZCAnUi1yYXRlZCcgdmVyc2lvbiwgSSBkb3VidCB0aGF0IHRoZSBhZGRpdGlvbmFsIHNjZW5lcyB3b3VsZCBjaGFuZ2UgbXkgb3ZlcmFsbCBvcGluaW9uIG9mICJUaGUgUGlhbm8gVGVhY2hlci4iPGJyIC8+PGJyIC8+VGVjaG5pY2FsbHksIHRoZSBmaWxtIGlzIG5vdCB3aXRob3V0IG1lcml0LiBUaGVyZSBpcyBzb21lIHZlcnkgZ29vZCBjYW1lcmEgd29yayBhbmQgdGhlIGxpZ2h0aW5nIGlzIGV4Y2VsbGVudC4gSXNhYmVsbGUgSHVwcGVydCdzIGNyZWRpdGFibGUgcGVyZm9ybWFuY2UgYWxzbyBoZWxwcyBzYXZlIGl0IGZyb20gYmVpbmcgYSB3YXN0ZSBvZiB0aW1lLiBUaGlzIGlzIHRoZSBmaXJzdCBvZiBIYW5la2UncyBmaWxtcyB0aGF0IEkndmUgc2VlbiwgYW5kIGlmIEkgd2VyZSB0byBzZWUgbW9yZSBJIGV4cGVjdCBJIHdvdWxkIGhhdmUgdGhlIHNhbWUgb3BpbmlvbiBvZiBoaW0gdGhhdCBJIGhhdmUgb2YgRmVycmFyYTogYW4gaW50ZXJlc3RpbmcgZGlyZWN0b3IgYnV0IG5vdCBuZWFybHkgdGhlIGdlbml1cyBvdGhlcnMgbWFrZSBoaW0gb3V0IHRvIGJlLiBSYXRpbmc6IDQvMTAuKQAAAAAAAABACqoGCO4BEO4BIpgGSSByZWFsbHkgc2hvdWxkIGhhdmUgbGVhcm5lZCBtb3JlIGFib3V0IHRoaXMgbW92aWUgYmVmb3JlIHJlbnRpbmcgaXQuIEl0IHdhcyBvbmUgb2YgdGhvc2UgbW92aWVzIHdoZXJlIHlvdSBrZWVwIHdhdGNoaW5nIGl0IGZpZ3VyaW5nIGl0J3MgZ290IHRvIGdldCBiZXR0ZXIuIFRoZW4sIHdoZW4gaXQgZW5kcywgeW91IGZlZWwgc3R1cGlkIGZvciBoYXZpbmcgd2FzdGVkIHByZWNpb3VzIHRpbWUgaW4geW91ciBsaWZlIHRoYXQgeW91IGNhbiBuZXZlciBnZXQgYmFjay4gSWNlLVQgZGlkIGhpcyBiYWQgZ3V5IHRoaW5nIGFuZCwgd2VsbCwgdGhhdCB3YXMgdGhlIGhpZ2hsaWdodCBvZiB0aGUgZXZlbmluZy4gVGhlIHBpY3R1cmVzIG9mIHRoZSBzaHV0dGxlIGxvb2tzIGxpa2UgaXQgd2FzIGRvbmUgd2l0aCBhIGxpdHRsZSB0b3kgaW5zaWRlIG9mIGEgYm94IGFuZCB0aGUgc3BhY2V3YWxraW5nIHNjZW5lcyB3ZXJlIGZ1bm55IGJlY2F1c2UgeW91IGNvdWxkIHNlZSB0aGUgc3RyaW5ncyBhdHRhY2hlZCB0byB0aGUgc3BhY2Ugc3VpdHMuIFRoZSBzY3JpcHQgd2FzIGxhY2tpbmcgYW5kIHRoZSBjYXIgY2hhc2Ugc2NlbmUgd2l0aCB0aGUgZ3V5IGJsZWVkaW5nIGFuZCBnb2luZyB1bmNvbnNjaW91cyB3YXMgaW5jcmVkaWJsZSBiZWNhdXNlIGhlIGRyb3ZlIGJldHRlciB0aGFuIEkgY291bGQgaGF2ZSBvbiBvbmUgb2YgbXkgYmVzdCBkYXlzLiBBbGwgaW4gYWxsLCBJIGhhdmUgc2VlbiB3b3JzZSBidXQgdGhpcyBzdXJlIGlzbid0IG9uZSBJJ2QgcmVjb21tZW5kIG9yIHdhbnQgdG8gcmVtZW1iZXIuKQAAAAAAAABACvgFCO8BEO8BIuYFSSByZWFsbHkgbGlrZWQgdGhlIGlkZWEgb2YgdHJhdmVsaW5nIGJldHdlZW4gZGltZW5zaW9ucywgYW5kIEkgZXZlbiBsaWtlZCB0aGUgV2FkZS9RdWlubiB0ZW5zaW9uIGluIGVhcmx5IGVwaXNvZGVzLiBTb21lIG9mIHRoZSB3b3JsZHMgdGhleSBjcmVhdGVkIGdhdmUgdGhlIG1haW4gY2hhcmFjdGVycyBleHRyZW1lbHkgaW50ZXJlc3RpbmcgYmFja2Ryb3BzIGZvciB0aGVpciBzdG9yaWVzLiBIb3dldmVyLCBhcyB0aGUgc2hvdyB3ZW50IG9uIHRoZXJlIHdlcmUgbW9yZSBzaWxseSBkaXNwdXRlcyBhbW9uZyB0aGUgZnJpZW5kcyBhbmQgbGVzcyBvZiBhIHRydWUgYm9uZC4gVGhlcmUgd2FzIGxlc3Mgd29uZGVyIGFuZCBleGNpdGVtZW50IHdoZW4gdGhleSB3ZXJlIGludm9sdmVkIGluIG90aGVyIHdvcmxkcyBhbmQgbW9yZSBjb25kZXNjZW5zaW9uLiBBbmQgZXZlcnkgd29ybGQgaGFkIG9uZSBvZiB0aGUgY2hhcmFjdGVycyBmYWxsaW5nIGluIGxvdmUuIFRoZSB3cml0aW5nIGp1c3QgZ290IGJvcmluZyBhbmQgZXZlcnl0aGluZyB3YXMgd2F5IHRvbyBvdmVyIHRoZSB0b3AuIFRvbyBiYWQgaXQgd291bGQndmUgYmVlbiBuaWNlIHRvIGhhdmUgYSBjbG9zZWx5IGtuaXQgYmFuZCBvZiBmcmllbmRzIChhIGxhIFN0YXIgV2FycykgdHJhdmVsaW5nIHRvIGRpZmZlcmVudCBkaW1lbnNpb25zIG9uIFRWIGZvciBzZXZlcmFsIHllYXJzLCByYXRoZXIgdGhhbiBhIHRpcmVkIGJhbmQgb2Yga25pdCBwaWNrZXJzLikAAAAAAAAAQAqGAgjwARDwASL0AUkgcmVhbGx5IGVuam95ZWQgdGhpcyBtb3ZpZS4gVGhlIHNjcmlwdCBpcyBmcmVzaCBhbmQgdW5wcmVkaWN0YWJsZSBhbmQgdGhlIGFjdGluZyBpcyBvdXRzdGFuZGluZy5JdCBpcyBhIGRvd24tdG8tZWFydGggbW92aWUgd2l0aCBjaGFyYWN0ZXJzIG9uZSBjYXJlcyBhYm91dC4gSXQgYnJvdWdodCB0ZWFycyBpbnRvIG15IGV5ZXMgYSBmZXcgdGltZXMgYnV0IGxlZnQgbWUgd2l0aCBhIGdyZWF0IGZlZWxpbmcgYWZ0ZXJ3YXJkcy4pAAAAAAAAAEAK7QUI8QEQ8QEi2wVJIHJlYWQgdGhlIHJldmlld3Mgb2YgdGhpcyBtb3ZpZSwgYW5kIHRoZXkgd2VyZSBnZW5lcmFsbHkgcHJldHR5IGdvb2Qgc28gSSB0aG91Z2h0IEkgc2hvdWxkIHNlZSBpdC4gSSdtIGEgYmlnIEZyYW5jb3BoaWxlIGFuZCBhcnQgZmlsbSBsb3ZlciwgYnV0IEkgYmVsaWV2ZSB0aGlzIGlzIHlldCBhbm90aGVyIGNhc2UgaW4gd2hpY2ggdGhlIGNyaXRpY3MgbWFrZSBzb21ldGhpbmcgImFydHkiIG9yICJpbnRlbGxlY3R1YWwiIGludG8gc29tZXRoaW5nIGl0IGlzIG5vdC4gSSB3aWxsIGJlIGJsdW50OiBpdCBjb250YWlucyBzY2VuZXMgb2Ygc2V4dWFsIHBlcnZlcnNlbmVzcyB0aGF0IEkgbmV2ZXIsIGV2ZXIgd2FudGVkIHRvIGFjdHVhbGx5IHNlZS4gT2J2aW91c2x5LCB0aGUgcGlhbm8gdGVhY2hlciBoYXMgc29tZSBtYWpvciBwc3ljaG9sb2dpY2FsIGlzc3VlcywgYnV0IEkgcmVhbGx5IGRpZCBub3Qgd2FudCB0byBzZWUgdGhlbSBkaXNwbGF5ZWQgc28gZ3JhcGhpY2FsbHkuIFRoZSBmaWxtIGlzLCBpbiBlc3NlbmNlLCBkaXNndXN0aW5nLiBJIG1lYW4sIHdoZW4gSSBzYXcgUmVxdWllbSBmb3IgYSBEcmVhbSwgSSB3YXMgcmVwdWxzZWQgYnkgdGhlIGxhc3Qgc29ydCBvZiBzY2VuZSB3aXRoIEplbm5pZmVyIENvbm5lbGx5LCBidXQgdGhhdCB3YXMgbm90IGFueXdoZXJlIG5lYXIgdGhlIHNvcnQgb2YgZGlzZ3VzdCBhbmQgcmVwdWxzaW9uIEkgZmVsdCBkdXJpbmcgdGhpcyBmaWxtLikAAAAAAAAAQAq9EgjyARDyASKrEkkgbXVzdCB3YXJuIHlvdSwgdGhlcmUgYXJlIHNvbWUgc3BvaWxlcnMgaW4gaXQuIEJ1dCB0byBzdGFydCBpdCBvZmYsIEkgZ290ICJTcGFuaXNoIEp1ZGdlcyIgb24gRmVicnVhcnkgSSB0aGluay4gSXQgd2FzIG1lbnRpb24gaXQgd2FzIHRoZSBsYXN0IGNvcHksIGJ1dCBhcyBJIHNlZSwgaXQgd2Fzbid0IGJhY2stb3JkZXJlZC4gQnV0IGVpdGhlciB3YXksIEkgaGF2ZSBpdC4gSSB0aG91Z2h0IGl0IHdhcyBnb29kLiBJIHdhbnRlZCB0byBzZWUgdGhpcyBtYWlubHkgYmVjYXVzZSBvZiB0aGUgZ3JlYXQgYWN0b3IsIE1hdHRoZXcgTGlsbGFyZCAoSSdtIHN1cnByaXNlZCBubyBvbmUgb24gdGhlIHJldmlld3MgbWVudGlvbiB0aGUgc2NhcikgYWx0aG91Z2ggaXQgaXMga2luZCBvZiBsb3cgYnVkZ2V0LCBnZXR0aW5nIGVub3VnaCBtb25leSB0byBtYWtlIHRoaXMgZmlsbSB3b3VsZCBiZSB3b3J0aCBzcGVuZGluZy4gTWFuLCB3aGF0IGEgZ29vZCBhY3Rvci48YnIgLz48YnIgLz5UaGUgc3RvcnkgaXQgYWJvdXQgYSBjb24gYXJ0aXN0IGtub3duIGFzIEphY2sgKE1hdHRoZXcgTGlsbGFyZCkgd2hvICJjbGFpbXMiIHRvIGhhdmUgbWVyY2hhbmRpc2VzIGNhbGxlZCBUaGUgU3BhbmlzaCBKdWRnZXMuIElmIHlvdSBkb24ndCBrbm93IHdoYXQgU3BhbmlzaCBKdWRnZXMgYXJlIG9yIGhhdmVuJ3Qgc2VlbiB0aGUgdHJhaWxlciBmb3IgdGhpcyBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgcmV2aWV3IHlvdSBoYXZlIHJlYWQsIEkgd29uJ3QgZXZlbiBzYXkgd2hhdCB0aGV5IGFyZS4gSSBmaWd1cmUgaXQgd291bGQgYmUgYSBiaWcgdHdpc3Qgb2Ygbm8gb25lIGtuZXcgd2hhdCBpdCB3YXMuIEhlIG5lZWRzIHByb3RlY3Rpb24sIHNvIGhlIGhpcmVzIGEgY291cGxlIHdobyBhcmUgYWxzbyBjcm9va3MsIE1heCBhbmQgSmFtaWUgKFZpbmNlbnQgRCdPbm9mcmlvIGFuZCBWYWxlcmlhIEdvbGlubykgYXMgd2VsbCBhcyBhIGNyb29rIHRoYXQgZ29lcyBieSB0aGUgbmFtZSBvZiBQaWVjZSAoTWFyayBCb29uZSBKdW5pb3IpLiBIZSBoYXMgYSBnaXJsZnJpZW5kIHdobyB3b24ndCBldmVuIHRlbGwgYW55b25lIGhlciBuYW1lIGJlY2F1c2Ugc2hlJ3MgZnJvbSBNYXJzLCBhcyBzaGUgc2FpZC4gU28gdGhleSAobWFpbmx5IEphY2spIGNhbGwgaGVyICJNYXJzIEdpcmwiLiBFdmVyeXRoaW5nIHN0YXJ0cyBvdXQgZmluZSwgYnV0IHRoZW4gaXQgdHVybnMgdG8gb25lIGJpZyBnYW1lLiBBIGdhbWUgdGhhdCBpbnZvbHZlcyBzb21lIGx1c3QsIGxpZXMgYW5kIGJldHJheWFsLjxiciAvPjxiciAvPlRoZXJlIHdhcyBzb21lIG92ZXIgYWN0aW5nIGluIGl0IChNYXR0IGFuZCBWYWxlcmlhLCBhcyB3ZWxsIGFzIFRhbWFyYSwgd2VyZSBub3Qgb25lIG9mIHRoZW0pLiBUaGVyZSB3ZXJlIHNvbWUgc2NlbmVzIHRoZXkgY291bGQndmUgZG9uZSBiZXR0ZXIgYW5kIHRoZSBzY29yZSBjb3VsZCd2ZSBiZWVuIGEgbGl0dGxlIGJldHRlciBhcyB3ZWxsLiBTb21lIG9mIHRoZSBzY29yZSB3YXMgYWN0dWFsbHkgZ29vZC4gVGhlIHRoZW1lIHRoZXkgdXNlZCBmb3IgdGhlIGJlZ2lubmluZyBhbmQgdGhlIGVuZCAoYmVmb3JlIHRoZSBjcmVkaXRzKSB3YXMgYSBnb29kIHNvbmcgY2hvaWNlLCB0aGF0J3MgbXkgb3Bpbmlvbi4gVGhlIGZpZ2h0IHNjZW5lIGluIHRoZSBlbmQgY291bGQndmUgYmVlbiBhIGxpdHRsZSBsb25nZXIgYW5kIGEgbGl0dGxlIG1vcmUgdmlvbGVudCwgYnV0IHdoYXQgY2FuIHlvdSBkbz8gT25lIG1vcmUgY29tbWVudCBvbiBNYXR0OiBEYW1uLCBoZSBwbGF5cyBhIHNtb290aCwgc2xpY2sgY29uIG1hbi48YnIgLz48YnIgLz5JIGtub3cgdGhpcyBpcyBhIHJldmlldywgYnV0IEkgbmVlZCB0byBtYWtlIGEgY29ycmVjdGlvbiB0b3dhcmRzIE5lQ1JvLCBvbmUgb2YgdGhlIHJldmlld2VyczogVmFsZXJpYSBHb2xpbm8gaXMgbm90IGEgbmV3Y29tZXIuIEFjY29yZGluZyB0byB0aGlzIHNpdGUsIHNoZSBoYXMgYmVlbiBhY3Rpbmcgc2luY2UgMTk4My4gVG8gbWUsIGFuZCBob3BlZnVsbHkgdG8gb3RoZXJzLCBzaGUgaXMgd2VsbCBrbm93biBhcyBDaGFybGllIFNoZWVuJ3MgSXRhbGlhbiBsb3ZlIGludGVyZXN0IGluIGJvdGggdGhlICJIb3QgU2hvdHMhIiBtb3ZpZXMuIEJ1dCBnb29kIHJldmlldy48YnIgLz48YnIgLz5BbHRob3VnaCBJIHRoaW5rIGl0J3Mgb25lIG9mIHRoZSByYXJlIGZpbG1zIEkndmUgc2VlbiBhbmQgaXQncyByZWFsbHkgZ29vZCAod2hpY2ggaXMgd2h5IEkgZ2F2ZSBpdCAxMCBzdGFycyBhYm92ZSksIEkgd2lsbCBnaXZlIHRoZSBncmFkZSBvZiB3aGF0IEkgdGhvdWdodCB3aGVuIEkgZmlyc3Qgc2F3IGl0LjxiciAvPjxiciAvPjgvMTApAAAAAAAAAEAK7AUI8wEQ8wEi2gVJIGxvdmVkIHRoaXMgbW92aWUuIEkga25ldyBpdCB3b3VsZCBiZSBjaG9ja2VkIGZ1bGwgb2YgY2FtcCBhbmQgc2lsbGluZXNzIGxpa2UgdGhlIG9yaWdpbmFsIHNlcmllcy4gSSBmb3VuZCBpdCB2ZXJ5IGhlYXJ0IHdhcm1pbmcgdG8gc2VlIEFkYW0gV2VzdCwgQnVydCBXYXJkLCBGcmFuayBHb3JzaGluLCBhbmQgSnVsaWUgTmV3bWFyIGFsbCBiYWNrIHRvZ2V0aGVyIG9uY2UgYWdhaW4uIEFueW9uZSB3aG8gbG92ZWQgdGhlIEJhdG1hbiBzZXJpZXMgZnJvbSB0aGUgNjAncyBzaG91bGQgaGF2ZSBlbmpveWVkIFJldHVybiB0byB0aGUgQmF0Y2F2ZS4gWW91IGNvdWxkIHRlbGwgdGhlIGFjdG9ycyBoYWQgYSBsb3Qgb2YgZnVuIG1ha2luZyB0aGlzIGZpbG0sIGVzcGVjaWFsbHkgQWRhbSBXZXN0LiBBbmQgSSdsbCBiZXQgaGUgd291bGQgaGF2ZSBnbGFkbHkganVtcGVkIGJhY2sgaW50byBoaXMgQmF0bWFuIGNvc3R1bWUgaGFkIHRoZSBzY3JpcHQgcmVxdWlyZWQgaGltIHRvIGRvIHNvLiBJIHRvbGQgYSBudW1iZXIgb2YgZnJpZW5kcyBhYm91dCB0aGlzIG1vdmllIHdobyBjaG9zZSBub3QgdG8gdmlldyBpdC4uLiBub3cgdGhleSB3aXNoZWQgdGhleSBoYWQuIEkgaGF2ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIDEyMCBlcGlzb2RlcyBvbiBWSFMuIE5vdyB0aGlzIG1vdmllIHdpbGwgam9pbiBteSBjb2xsZWN0aW9uLiBUaGFuayBZb3UgZm9yIHRoZSByZXVuaW9uIEFkYW0gYW5kIEJ1cnQuKQAAAAAAAABACv4VCPQBEPQBIuwVSSBsb3ZlIGhvdyBldmVyeW9uZSB0cmVhdHMgdGhpcyBzaG93IGxpa2UgaXQgd2FzIHRoZSBuZXh0IGdyZWF0IEFtZXJpY2FuIHNpdGNvbS4gSSB3YXRjaGVkIGZpdmUgZXBpc29kZXMgb2YgdGhpcyBhYm9taW5hdGlvbiwgYW5kIHRoZSBvbmx5IHBlcnNvbiB0aGF0IGNhbWUgY2xvc2UgdG8gYW4gYWN0dWFsIHRlYWNoZXIgd2FzIHRoZSBvbGQgZ3V5IHRoYXQgc29ydCBvZiBsb3ZlZCBhbmQgaGF0ZWQgaGlzIGpvYi4gVGhlIHJlc3Qgb2YgdGhlbSB3ZXJlIGp1c3QgcHJldHR5IHBlb3BsZSB0cnlpbmcgdG8gcmVhZCB0aGUgbGluZXMgd3JpdHRlbiBieSBwZW9wbGUgd2hvIG5ldmVyIGFjdHVhbGx5IHdlbnQgaW5zaWRlIG9mIGEgcmVhbCBjbGFzc3Jvb20uIEkgbG92ZWQgaG93IGV2ZXJ5IGVwaXNvZGUgY29uc2lzdGVkIG9mIHRoZSB0d28gaWRpb3RzIChvbmUgd2hvIGdvdCBsYWlkIGFuZCB0aGUgb3RoZXIgd2hvIGRpZG4ndCkgZ2V0dGluZyBpbnRvIHNvbWUgZm9ybSBvZiB6YW55IHRyb3VibGUgdGhhdCBpbmRpcmVjdGx5IGludm9sdmVkIHRoZWlyIHN0dWRlbnRzLiBUaGUgQnJpdGlzaCBnaXJsIHdobyB0aG91Z2h0IHNoZSBmb3VuZCBhbiBsaWthYmxlIHF1YWxpdHkgaW4gdGhlIG1haW4gaWRpb3QsIGJ1dCBpbiB0aGUgZW5kIHdhcyBzb21laG93IHNob2NrZWQgdGhhdCBoZSB0dXJuZWQgb3V0IHRvIGJlIGEgamFja2Fzcy4gVGhlIGhvdCBjaGljayB0aGF0IHdhcyB0aGVyZSBmb3IgdGhlIHBhcnRpY3VsYXIgcHVycG9zZSBvZiBiZWluZyBob3QsIGFuZCB0aGUgcHJpbmNpcGFsIGFuZCBoZXIgbGFja2V5IHRoYXQgc2VydmVkIHRvIHNvbWVob3cgbW92ZSB0aGUgYWxtb3N0IG5vbi1leGlzdGVudCBwbG90IGZvcndhcmQuIEkgbG92ZWQgaG93IGFsbW9zdCBhbGwgdGhlIHRlYWNoZXJzIG9uIHRoaXMgc2hvdyB3ZXJlIHZlcnkgeW91bmcsIGJ1dCBJIGFzayB5b3UgdG8gdGhpbmsgYmFjayB0byB5b3VyIGhpZ2ggc2Nob29sIGRheXMgYW5kIHJlbWVtYmVyIHRoZSB0ZWFjaGVycyB0aGF0IHlvdSBoYWQgLiAuIC4gZGlkIHRoZXkgbG9vayBsaWtlIHRoYXQ/IE9yIGRpZCB5b3UgZ28gdG8gdGhlIGhpZ2ggc2Nob29sIHRoYXQgaGFkIG1pZGRsZS1hZ2VkIHBlb3BsZSB0ZWFjaGluZyBpbiBpdD8gVGhhdCBpcyB0aGUgaGlnaCBzY2hvb2wgdGhhdCBldmVyeW9uZSBlbHNlIHdlbnQgdG8uIFRoZSBzaG93IGxhY2tlZCBhbnkgZm9ybSBvZiByZXNlYXJjaCBpbnRvIHdoYXQgZ29lcyBvbiBpbiBzY2hvb2xzLiBJbiBwdWJsaWMgc2Nob29scywgcHJpbmNpcGFscyBkbyBub3QgaGF2ZSB0aGUgcG93ZXIgdG8gaGlnaGVyIGFuZCBmaXJlIHRlYWNoZXJzLCB0aGUgc2Nob29sIGJvYXJkIGRvZXMsIGJ1dCBpbiBldmVyeSBlcGlzb2RlIHRoYXQgSSB3YXRjaGVkIHRoZSBwcmluY2lwYWwgbWFkZSB0aHJlYXRzIHRvIGZpcmUgaGVyIHRlYWNoZXJzLiBUaGluayBiYWNrIHRvIHlvdXIgaGlzdG9yeSBjbGFzcyAuIC4gLiAuIC4gb3IgdGhpbmsgb2YgYW55IGhpc3RvcnkgY2xhc3MsIGRpZCB5b3UgZXZlciBzZWUgYW4gaW5jcmVkaWJseSBob3QgQnJpdGlzaCBjaGljayB0ZWFjaCBhbiBBbWVyaWNhbiBIaXN0b3J5IGNsYXNzPyBOby4gRGlkIHlvdSBldmVyIHNlZSBhIHRlYWNoZXIncyBsb3VuZ2UgdGhhdCBpcyBzbyBodWdlIHRoYXQgeW91IGNvdWxkIGFjdHVhbGx5IHBsYXkgYmFza2V0YmFsbCBpbj8gTm8uPGJyIC8+PGJyIC8+VGVhY2hlcnMgY291bGQgaGF2ZSBiZWVuIGEgZ3JlYXQgc2hvdyBoYWQgaXQgYWN0dWFsbHkgb2YgYmFzZWQgaXRzZWxmIGluIHNvbWUgZm9ybSBvZiByZWFsaXR5LiBXaGF0IG1ha2VzIHRlYWNoaW5nIGZ1bm55IGlzIHRoZSBzdG9yaWVzIHRoYXQgeW91IGdldCBmcm9tIGludGVyYWN0aW9uIHdpdGggc3R1ZGVudHMsIGFuZCB0aGUgdGVhY2hlcnMgZmluZCBpdCBmdW5ueSBiZWNhdXNlIHRoZXkgZGVhbCB3aXRoIHRoZSBzdHVkZW50cyBkYXkgaW4gYW5kIGRheSBvdXQuIFRoZSBvdmVyZW1waGFzaXMgb24gdGhlaXIgbGl2ZXMgb3V0c2lkZSBvZiB0ZWFjaGluZyBqdXN0IG1hZGUgaXQgYW5vdGhlciBmb3VyIGNhbWVyYSBzaXRjb20gdGhhdCBoYWQgdW5yZWFsaXN0aWMgcGVvcGxlIGluIGFuIHVucmVhbGlzdGljIGVudmlyb25tZW50IHNheWluZyB1bnJlYWxpc3RpYyBsaW5lcywgYW5kIEknbSBzb3JyeSwgSSBqdXN0IGRpZG4ndCBidXkgaXQuIFRoZSBzaG93IGNvdWxkIGhhdmUgbW9kZWxlZCBpdHNlbGYgYWZ0ZXIgb3RoZXIgY3VycmVudGx5IHN1Y2Nlc3NmdWwgc2l0Y29tcyBhbmQgdXNlZCBhIHNpbmdsZS1jYW1lcmEgZm9ybWF0LCBhbmQgaXQgc2hvdWxkIGhhdmUgY2VudGVyZWQgbW9yZSBhcm91bmQgdGhlIHRlYWNoZXIncyByZWxhdGlvbnNoaXBzIHdpdGggdGhlaXIgc3R1ZGVudHMgYW5kIG5vdCB3aXRoIGVhY2ggb3RoZXIuPGJyIC8+PGJyIC8+SXQgZ2V0cyBhIHN0YXIgZm9yIHRyeWluZyBhbmQgYSBzdGFyIGZvciB0aGUgaG90IGNoaWNrIChzaGUgd2FzIHJlYWxseSBob3QpLjxiciAvPjxiciAvPkluIHRoZSBlbmQsIGl0IHdhcyBhIGZhaWxlZCBzaXRjb20gdGhhdCB3aWxsIGdvIGRvd24gaW4gaGlzdG9yeSBhcyBhIGhhY2tzIGF0dGVtcHQgdG8gdW5kZXJzdGFuZCBhIHByb2Zlc3Npb24uIEkgb25seSBob3BlIHRoYXQgaWYgdGhleSBtYWtlIGFub3RoZXIgc2l0Y29tIGJhc2VkIG9uIHRlYWNoaW5nIHRoYXQgdGhleSBsZWFybiBmcm9tIHRoZWlyIG1pc3Rha2VzIHNvIHRoYXQgYSBtb25zdHJvc2l0eSBzdWNoIGFzIHRoaXMgbmV2ZXIgdG91Y2hlcyB0aGUgdGVsZXZpc2lvbiBzY3JlZW4uKQAAAAAAAABACscHCPUBEPUBIrUHSSBsaWtlIGEgbG90IG9mIHRoZSBhY3RvcnMvYWN0cmVzc2VzIGludm9sdmVkIGluIHRoaXMgcHJvamVjdCBzbyBiZWluZyBpbnN1bHRlZCBieSB0aGUgbW92aWUgZmVsdCBldmVuIHdvcnNlIHRoYW4gaWYgdGhleSB1c2VkIGEgdW5rbm93bnMgLlRoZSBtYWluIHByb2JsZW0gd2FzIHRoaXMgbW92aWUgd2FzIGNsZWFybHkganVzdCBhIGNvbmNlcHQgY3JlYXRlZCB0byBhcHBlYWwgdG8gYmFieSBib29tZXJzIC5JbiAyMCBvciAzMCB5ZWFycyBOYmMgd2lsbCBwcm9iYWJseSBkbyBhIG1vdmllIGp1c3QgbGlrZSB0aGlzIGFib3V0IHRoZSBlYXJseSA5MCdzIC4gSSBjYW4gc2VlIGl0IG5vdyBhIGJsYWNrIGZhbWlseSB3aGVyZSB0aGUga2lkcyBhcmUgaW52b2x2ZWQgd2l0aCB0aGUgbGEgcmlvdCdzIGFuZCB0aGUgd2hpdGUgZmFtaWx5IGhhcyB0aGUga2lkcyByZWJlbCBhbmQgbGlzdGVuIHRvIGdydW5nZSByb2NrIG11c2ljIC5UaGUgc291bmR0cmFjayB3aWxsIGZlYXR1cmUgYmFuZHMgbGlrZSBOaXJ2YW5hICwgTi5XLkEgLCBQdWJsaWMgRW5lbXkgLCBTb3VuZGdhcmRlbiBldGMgLlRoZSBtb3ZpZSBsaWtlIHRoaXMgd2lsbCBiZSBqdXN0IGFzIGNoZWVzeSBhcyBUaGUgNjAncyBhbmQgSSBndXJhbnRlZSB5b3UgTkJDIHdpbGwgZG8gaXQgLlNlZSB0aGUgYmlnZ2VzdCBwcm9ibGVtIHdpdGggcGVyaW9kIHBpZWNlcyB3aGVuIGRvbmUgYnV5IG5ldHdvcmtzIGlzIHRoYXQgd2hlbiB5b3UgYXJlIGxpdmluZyBpbiBhIGNlcnRhaW4gdGltZSBwZXJpb2QgeW91IGFyZW4ndCB0aGlua2luZyBpIGFtIGxpdmluZyBpbiB0aGUgNjAncyBvciB3aGF0ZXZlciBkZWNhZGUgaXMgdHJlbmR5IHJldHJvIGF0IHRoZSB0aW1lIC5OZXh0IHRpbWUgc29tZW9uZSBkb2VzIHNvbWV0aGluZyBsaWtlIHRoaXMgdGhleSBzaG91bGQgcHV0IG1vcmUgd2VpZ2h0IGludG8gdGhlcmUgcHJvamVjdCkAAAAAAAAAQAr+Bgj2ARD2ASLsBkkgbGlrZSBDaHJpcyBSb2NrLCBidXQgSSBmZWVsIGhlIGlzIHdhc3RlZCBpbiB0aGlzIGZpbG0uIFRoZSBpZGVhIG9mIHJlbWFraW5nIEhlYXZlbiBDYW4gV2FpdCBpcyBmaW5lLCBidXQgdGhlIGZpbG1tYWtlcnMgZm9sbG93ZWQgdGhlIHBsb3Qgb2YgdGhhdCB0dXJrZXkgdG9vIGNsb3NlbHkuIFdoZW4gRWRkaWUgTXVycGh5IHJlbWFkZSBEci4gRG9vbGl0dGxlIGFuZCBUaGUgTnV0dHkgUHJvZmVzc29yLCBoZSByZS1kaWQgdGhlbSB0b3RhbGx5IC0tIHNvIHRoZXkgYmVjYW1lIE11cnBoeSBmaWxtcy92ZWhpY2xlcywgbm90IGp1c3QgdGVwaWQgcmVtYWtlcy4gVGhhdCdzIHdoeSB0aGV5IHdlcmUgc3VjY2Vzc2Z1bC4gSWYgQ2hyaXMgaGFkIGRvbmUgdGhlIHNhbWUsIHRoaXMgY291bGQgaGF2ZSBiZWVuIGEgbXVjaCBiZXR0ZXIgZmlsbS4gVGhlIGZldyBsYXVnaHMgdGhhdCBjb21lIGFyZSB3aGVuIGhlIGlzIGRvaW5nIGhpcyBzdGFuZHVwIHJvdXRpbmUgLS0gc28gaGUgbWlnaHQgYXMgd2VsbCBoYXZlIGRvbmUgYSBjb25jZXJ0IGZpbG0uIEl0IGFsc28gd291bGQgaGF2ZSBiZWVuIG11Y2ggZnVubmllciBpZiB0aGUgd2hpdGUgbWFuIHdob3NlIGJvZHkgaGUgaW5oYWJpdHMgd2FzIGEgdHJ1Y2sgZHJpdmVyIG9yIGhpbGxiaWxseS4gU28gd2h5IGRvZXMgSG9sbHl3b29kIGtlZXAgbWFraW5nIGp1bmsgbGlrZSB0aGlzPyBCZWNhdXNlIHBlb3BsZSBnbyB0byBzZWUgaXQgLS0gYmVjYXVzZSB0aGV5IGxpa2UgQ2hyaXMgUm9jay4gU28gZ2l2ZSBDaHJpcyBhIGRlY2VudCBzY3JpcHQgYW5kIGdpdmUgdXMgYmV0dGVyIG1vdmllcyEgRG9uJ3QgcmVtYWtlIGZpbG1zIHRoYXQgd2VyZW4ndCB0aGF0IGdvb2QgaW4gdGhlIGZpcnN0IHBsYWNlISkAAAAAAAAAQAqZEQj3ARD3ASKHEUkga25ldyBpdCB3YXMgZ29pbmcgdG8gYmUgYXdmdWwgYnV0IG5vdCB0aGlzIGF3ZnVsISEsIGFzIGl0J3Mgb25lIG9mIHRoZSBtb3N0IGJvcmluZyBtb3ZpZXMgaSBoYXZlIGV2ZXIgc2Vlbiwgbm90IGEgZGFtbiB0aGluZyBoYXBwZW5zIS4gQWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBkdWxsLCBhbmQgdGhlIHN0b3J5IGlzIHN0dXBpZCBhbmQgaW5jcmVkaWJseSBib3JpbmchLHBsdXMgVGhlIGVuZGluZyBpcyBlc3BlY2lhbGx5IGxhbWUhLiBUaGUgb25seSByZWFzb24gaSByZW50ZWQgdGhpcyBwaWVjZSBvZiBjcmFwIGJlY2F1c2UgaSBhbSBhIGJpZyBmYW4gb2YgTWljaGFlbCBEdWRpa29mZiwgaG93ZXZlciBoZSBpcyB3YXN0ZWQgaGVyZSwgYW5kIGxvb2tzIGV4dHJlbWVseSBib3JlZCBhbmQgc2hvd3Mgbm8gZW1vdGlvbiB3aGF0IHNvIGV2ZXIhLCBwbHVzIGkgY2hlZXJlZCBvdXQgbG91ZCB3aGVuIHRoZSBtb3ZpZSB3YXMgb3ZlciEuIEl0J3MgbGlrZSB0aGUgbW92aWUgaGFkIG5vIHBsb3QgYW5kIGl0IHdhcyBhbGwgYWJvdXQgbm90aGluZywgYW5kIEljZS1UIGlzIGdvZCBhd2Z1bChldmVuIHRob3VnaCBoZSBpcyBPSyBpbiBzb21lIHN0dWZmKSwgcGx1cyBEdWRpa29mZiBhbmQgWXZldHRlIE5pcGFyIGhhZCBubyBjaGVtaXN0cnkgdG9nZXRoZXIgYXQgYWxsLiBUaGVyZSdzIG9uZSBzY2VuZSB0aGF0IHRoZSBkaXJlY3RvciB0cmllZCB0byBtYWtlIGVtb3Rpb25hbCBidXQgaGUgZmFpbHMgbWlzZXJhYmx5IGFzIFl2ZXR0ZSBOaXBhciBkaWRuJ3QgcmVhbGx5IHNob3cgYWxsIHRoYXQgbXVjaCBlbW90aW9uLCBob3dldmVyIHRoZXJlIGlzIGEgZGVjZW50IENhciBjaGFzZSBzY2VuZSwgYnV0IHRoYXQncyBub3QgZW5vdWdoIGZvciBtZSB0byByZWNvbW1lbmQgdGhpcyBnb2QgYXdmdWwgZmlsbSEsIHBsdXMgdGhlIGRpYWxvZyBpcyBhdHJvY2lvdXMuIEF2b2lkIHRoaXMgbW92aWUgbGlrZSB0aGUgcGxhZ3VlIG5vdCBhIGRhbW4gdGhpbmcgaGFwcGVucywgcGxlYXNlIGF2b2lkIGFuZCB0cnVzdCBtZSBvbiB0aGlzIG9uZSB5b3UgbWF5IHRoYW5rIG1lIGFmdGVyd29yZHMuIFRoZSBEaXJlY3Rpb24gaXMgaG9ycmlibGUhLiBGcmVkIE9sZW4gUmF5IGRvZXMgYSBob3JyaWJsZSBqb2IgaGVyZSwgd2l0aCBzaG9kZHkgY2FtZXJhIHdvcmssIGxhdWdoYWJseSBjaGVhcCBsb29raW5nIHNldCBwaWVjZXMsIHRlcnJpYmxlIGFuZ2xlcywgbGF1Z2hhYmxlIHVzZSBvZiBzdG9jayBmb290YWdlLCBhbmQga2VlcGluZyB0aGUgZmlsbSBhdCBhbiBpbmNyZWRpYmx5IGR1bGwgcGFjZS4gVGhlIEFjdGluZyBpcyB0ZXJyaWJsZSEuIE1pY2hhZWwgRHVkaWtvZmYgaXMgbm93aGVyZSBuZWFyIGhpcyB1c3VhbCBhbWF6aW5nIHNlbGYsIGhlIGxvb2tzIGV4dHJlbWVseSBib3JlZCwgYW5kIHNob3dzIG5vIGVtb3Rpb24gd2hhdCBzbyBldmVyLCBoaXMgY2hhcmFjdGVyIGlzIGFsc28gZXh0cmVtZWx5IGR1bGwsIGFzIGkgY2FuJ3QgYmVsaWV2ZSBoZSBzaWduZWQgb24gZm9yIHRoaXMgcGllY2Ugb2YgZ2FyYmFnZSwgaGUgYWxzbyBoYWQgbm8gY2hlbWlzdHJ5IHdpdGggWXZldHRlIE5pcGFyKER1ZGlrb2ZmIHN0aWxsIHJ1bGVzISEhKS4gSWNlLVQgaGFzIGJhcmVseSBhbnl0aGluZyB0byBkbyBhbmQgYWxzbyBsb29rcyBib3JlZCwgYW5kIGhlIGRpZG4ndCBjb252aW5jZSBtZSBvbmUgYml0LiBIYW5uZXMgSmFlbmlja2UgaXMgbm90IHZlcnkgZ29vZCBoZXJlLCBoZSBoYWQgc29tZXdoYXQgb2YgYSB3aW1weSBjaGFyYWN0ZXIsIGkgZGlkbid0IGxpa2UgaGltLiBZdmV0dGUgTmlwYXIgaXMgcHJldHR5IGJ1dCB3YXMgcmVhbGx5IHRlcnJpYmxlIGhlcmUsIHNoZSBkaWRuJ3Qgc2hvdyBtdWNoIGVtb3Rpb24sIGFuZCBoYWQgbm8gY2hlbWlzdHJ5IHdpdGggRHVkaWtvZmYsIGFuZCBhcyBhIHJlc3VsdCBpIGRpZG4ndCBnaXZlIGEgZGFtbiBhYm91dCBoZXIgY2hhcmFjdGVyIS4gQXJ0IEhpbmRsZSwoT3dlbiBNYXJzaCksS2F0aHkgSGFycmVuKEthdGhhcmluZSBNYXJzaCksIGFuZCB0aGUgcmVzdCBvZiB0aGUgY2FzdCBhcmUgYmFkIGFzIHdlbGwuIE92ZXJhbGwgUGxlYXNlIGF2b2lkIGxpa2UgdGhlIHBsYWd1ZSEsIEZyZWQgT2xlbiBSYXkgYW5kIFN0ZXZlIExhdGhzaGF3IHNob3VsZCBiZSBhc2hhbWVkIG9mIHRoZW1zZWx2ZXMhLiBCT01CIG91dCBvZiA1KQAAAAAAAABACu4ECPgBEPgBItwESSBraW5kIG9mIGxpa2UgSkFHLiBJdCBkbyBoYXZlIGl0wrRzIGNoYXJtIGJ1dCBsYXRlbHkgaXTCtHMgdG8gbXVjaCBwcm9wYWdhbmRhIGluIGl0LiBGb3IgYW4gb3V0c2lkZXIgKGEgbm9uIEFtZXJpY2FuKSB0aGUgcGF0cmlvdGljIGZlZWxpbmcgY2FuIGJlIGEgYml0IHRvIG11Y2guPGJyIC8+PGJyIC8+SSBkb27CtHQgbGlrZSB0aGF0IFJhYmIgYW5kIE1hY0tlbnppZSBnb2VzIGZyb20gYmVpbmcgbGF3eWVycyAoYXMgdGhleSB3ZXJlIGluIHRoZSBlYXJseSBwYXJ0cyBvZiB0aGUgVFYgc2hvdykgdG8gYmVjb21lIHN1cGVyIGhlcm9zIHRoYXQgc3RvcHMgd2FycyBhbmQgcmVzY3VlcyBlbnRpcmUgY29udGluZW50cy4gSXRzIGFsbW9zdCBsaWtlIHdhdGNoaW5nIGEgcmVjcnVpdG1lbnQgdmlkZW8gZnJvbSB0aGUgVVMgYXJteS48YnIgLz48YnIgLz5JIHN0aWxsIHdhdGNoIHRoZSBzaG93LCBzbyBpdMK0cyBub3QgdGhhdCBiYWQuIEJ1dCBpIHdvdWxkIHByZWZlciBtb3JlIGVwaXNvZGVzIHdoZW4gUmFiYiBhbmQgTWFjS2VuemllIGludmVzdGlnYXRlcyBtaWxpdGFyeSBhY2NpZGVudHMgYW5kIGRvbsK0dCBzYXZlIHRoZSB3b3JsZCBpbiB0aGUgZnV0dXJlLikAAAAAAAAAQAroBgj5ARD5ASLWBkkganVzdCBkb24ndCB1bmRlcnN0YW5kIHdoeSBhbnl0aW1lIHNvbWVvbmUgZG9lcyBhIHNob3cgYWJvdXQgb25lIG9mIHRoZSBsYXJnZXN0IG1ldHJvIGFyZWFzIGluIHRoZSBjb3VudHJ5IChIb3VzdG9uLCBEYWxsYXMsIEF1c3Rpbi9TYW4gQW50b25pbyBldGMuKSwgdGhleSBwb3J0cmF5IHRoZSBhdmVyYWdlIHBlcnNvbiBhcyBzb21lb25lIHdobyB3ZWFycyB3cmFuZ2xlcnMvY293Ym95IGhhdCAsIHRhbGtzIHdpdGggYSBkcmF3bCwgaGFzIHplcm8gZmFzaGlvbiBzZW5zZSwgYW5kIGRyaXZlcyBhIHRydWNrIG9uIGhpcyB3YXkgdG8gZWl0aGVyIHRoZSAic2Fsb29uIiBvciBoaXMgbmV4dCBodW50aW5nIHRyaXAsIHJvZGVvLCBza2VldCBzaG9vdGluZyBvciBjb3VudHJ5IG11c2ljIGNvbmNlcnQuIEkgaGF2ZSBuZXZlciBldmVuIHNlZW4gYSBzbWFsbCB0b3duIGNvcCBkcml2aW5nIGEgcG9saWNlLXRydWNrLi4uYW55d2hlcmUgaW4gVGV4YXMuPGJyIC8+PGJyIC8+VGhlIGZ1bm55IHRoaW5nIGlzIHRoaXMgaXMgbm90IGRvbmUgZm9yIGFydGlzdGljIHJlYXNvbnMgb3IgY29tZWR5Li4udGhleSBhcmUgYWN0dWFsbHkgc2VyaW91cyBhbmQgSSBndWVzcyBiZWxpZXZlIHRoZSBhdmVyYWdlIHBlcnNvbiBpcyB0b28gc3R1cGlkIHRvIGtub3cgdGhlIGRpZmZlcmVuY2UuIFRoZSBiYWQgc2NyaXB0cyBhbmQgZXF1YWxseSBiYWQgYWN0aW5nIGdpdmUgdGhhdCBhd2F5LiBUaGlzIHNob3cgbWFrZXMgZ29vZnkgc2hvd3MgaW4gdGhlIHBhc3QgbGlrZSBLbmlnaHRyaWRlciBsb29rIGxpa2UgaGlnaC1icm93IGVudGVydGFpbm1lbnQuIEF0IGxlYXN0IEtuaWdodHJpZGVyIGhhZCB0aGUgdGFsa2luZyBjYXIuKQAAAAAAAABACsIMCPoBEPoBIrAMSSBoYXZlIHNvbWUgZ3JlYXQgbWVtb3JpZXMgd2F0Y2hpbmcgIlJvYmluIG9mIFNoZXJ3b29kIiBvbiBUViBhcyBhIGtpZCAoYnV0IEkgdGhpbmsgSSBvbmx5IHNhdyBNaWNoYWVsIFByYWVkwrRzIGVwaXNvZGVzLCBieSBzb21lIHJlYXNvbikuIEFuZCByZWNlbnRseSBteSBicm90aGVyIGJvdWdodCB0aGUgbmV3IHJlbGVhc2VkIERWRC1ib3hlcyBvZiB0aGUgY29tcGxldGUgc2VyaWVzLiBJdCB3YXMgZ3JlYXQgdG8gc2VlIGl0IGFnYWluLCBhbmQgaXQgaXMgdGhlIGJlc3Qgb2YgYWxsIHRoZSBSb2JpbiBIb29kIG1vdmllcyBhbmQgVFYtc2VyaWVzLiBUaGUgY2FzdCBpcyBncmVhdCwgYW5kIHRoZSBsb2NhdGlvbnMgbWl4ZWQgd2l0aCBDbGFubmFkwrRzIG11c2ljIGFkZHMgdGhpcyB2ZXJ5IHNwZWNpYWwgZmVlbGluZy4gSSBwZXJzb25hbGx5IHRoaW5rIHRoYXQgUHJhZWQgaXMgdGhlIGJlc3Qgb2YgdGhlIHR3byBSb2JpbnMsIGJ1dCBKYXNvbiBDb25uZXJ5IHdhcyBhIGdyZWF0IGNob2ljZSB0byBjb250aW51ZSB0aGUgc2VyaWVzIHdpdGguIFJheSBXaW5zdG9uZSwgTmljb2xhcyBHcmFjZSBhbmQgUm9iZXJ0IEFkZGllIGlzIHRlcnJpZmljIGluIHRoZWlyIHJvbGVzIGFzIFdpbGwgU2NhcmxldCwgVGhlIFNoZXJpZmYgb2YgTm90dGluZ2hhbSBhbmQgR3V5IG9mIEdpc2J1cm5lLiBJdMK0cyBhIHBpdHkgdGhhdCBhIGZvdXJ0aCBzZWFzb24gbmV2ZXIgZ290IG1hZGUsIGFuZCBJwrR2ZSBhbHNvIGhlYXJkIHRoYXQgdGhlIHdyaXRlciBSaWNoYXJkIENhcnBlbnRlciBhY3R1YWxseSBoYWQgcGxhbnMgdG8gbWFrZSBhIGZlYXR1cmUgZmlsbSBmb2xsb3dpbmcgdGhlIGV2ZW50cyBvZiB0aGUgc2VyaWVzLiBSb2JlcnQgb2YgSHVudGluZ2RvbiAoQ29ubmVyeSkgY291bGQgZmluYWxseSBoYXZlIG1hcnJpZWQgTWFyaW9uIChKdWRpIFRyb3R0KSwgb3IgbWF5YmUgSGVybmUgdGhlIEh1bnRlciBjb3VsZCByZXN1cnJlY3QgUm9iaW4gb2YgTG94bGV5IChQcmFlZCksIGFuZCBoZSBjb3VsZCB0YWtlIGhpcyByZXZlbmdlIGFnYWluc3QgdGhlIHNoZXJpZmYuIEFzIGhhdmUgYmVlbiBtZW50aW9uZWQgYmVmb3JlOyBpZiB0aGUgcHJvZHVjZXJzIG9mICJSb2JpbiBIb29kOiBUaGUgUHJpbmNlIG9mIFRoaWV2ZXMiIHdvdWxkIGhhdmUgYmVlbiBzbWFydCwgdGhleSB3b3VsZCBoYXZlIGdvdCB0aGUgY2FzdCBmcm9tICJSb2JpbiBvZiBTaGVyd29vZCIsIGFuZCBtYWRlIHRoZSBtb3ZpZSB0byBhIHNvcnQgb2Ygc2VxdWVsIHRvIHRoZSBzZXJpZXMuIEFzIFJheSBXaW5zdG9uZSBwdXRzIGl0IGluIHRoZSBEVkQgYm9udXNtYXRlcmlhbCwgaXQgd291bGQgaGF2ZSBiZWVuIGdyZWF0IHRvIHNlZSB0aGVtIGFzIG9sZCBtZW4sIGp1c3QgbGlrZSBpbiBTZWFuIENvbm5lcnnCtHMgIlJvYmluIGFuZCBNYXJpYW4iLiBXaG8ga25vd3MsIG1heWJlIHdlIHdpbGwgc2UgbW9yZSBvZiB0aGlzIHBlcmZlY3QgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGxlZ2VuZCBpbiB0aGUgZnV0dXJlLiBJbiBhbnkgY2FzZSwgd2UgY2FuIG5vdyB3YXRjaCBvdXIgZmF2b3JpdGUgc2VyaWVzIG92ZXIgYW5kIG92ZXIgYWdhaW4hKQAAAAAAAABACvABCPsBEPsBIt4BSSBoYXZlIHNlZW4gdGhpcyBmaWxtIGF0IGxlYXN0IDEwMCB0aW1lcyBhbmQgSSBhbSBzdGlsbCBleGNpdGVkIGJ5IGl0LCB0aGUgYWN0aW5nIGlzIHBlcmZlY3QgYW5kIHRoZSByb21hbmNlIGJldHdlZW4gSm9lIGFuZCBKZWFuIGtlZXBzIG1lIG9uIHRoZSBlZGdlIG9mIG15IHNlYXQsIHBsdXMgSSBzdGlsbCB0aGluayBCcnlhbiBCcm93biBpcyB0aGUgdG9wcy4gQnJpbGxpYW50IEZpbG0uKQAAAAAAAABACpgICPwBEPwBIoYISSBoYXZlIGJlZW4gZmFtaWxpYXIgd2l0aCB0aGUgZmFudGFzdGljIGJvb2sgb2YgJ0dvb2RuaWdodCBNaXN0ZXIgVG9tJyBmb3IgYWJzb2x1dGVseSBhZ2VzIGFuZCBpdCB3YXMgb25seSByZWNlbnRseSB3aGVuIEkgZ290IHRoZSBjaGFuY2UgdG8gd2F0Y2ggdGhpcyBhZGFwdGlvbiBvZiBpdC4gSSBoYXZlIGhlYXJkIGxvdHMgb2YgcG9zaXRpdmUgcmVtYXJrcyBhYm91dCB0aGlzLCBzbyBJIGhhZCBoaWdoIGhvcGVzLiBPbmNlIHRoaXMgZmlsbSBoYWQgZmluaXNoZWQsIEkgd2FzIGhvcnJpZmllZC48YnIgLz48YnIgLz5UaGlzIGZpbG0gaXMgbm90IGEgZ29vZCBmaWxtIGF0IGFsbC4gJ0dvb2RuaWdodCBNaXN0ZXIgVG9tJyB3YXMgYW4gZXh0cmVtZWx5IHBvb3IgYWRhcHRpb24gYW5kIHByYWN0aWNhbGx5IDQuNS8xMCBvZiB0aGUgYm9vayB3YXMgbWlzc2VkIG91dC4gUGFydGljdWxhcmx5LCBJIGZvdW5kIHRoYXQgYSBsb3Qgb2YgdGhlIGNoYXJhY3RlcnMgYW5kIHNvbWUgZ3JlYXQgc2NlbmVzIGluIHRoZSBib29rIHdlcmUgbm90IGluIHRoaXMuIFRoZXJlIHdhcyBub3QgbXVjaCBkaWFsb2d1ZSwgSXQgd2FzIHJ1c2hlZCBhbmQgZmFyIHRvbyBmYXN0LW1vdmluZywgYnV0IEkgd2FzIG1vc3RseSB1cHNldCBieSB0aGUgZmFjdCB0aGF0IHlvdSBuZXZlciBnb3QgdG8gc2VlIHRoZSBib25kaW5nIGFuZCBsb3ZlIGJldHdlZW4gV2lsbGlhbSBCZWVjaCBhbmQgVG9tIGluIHRoaXMgZmlsbSB3aGljaCB3YXMgYSB0cnVlIGxldCBkb3duLiBUaGUgY2FzdGluZyB3YXMgbm90IGFsbCB0aGF0IGdvb2QsZWl0aGVyLiBJIHRob3VnaHQgdGhpcyBjb3VsZCBoYXZlIGJlZW4gcmVhbGx5IGdvb2QsIGJ1dCBpdCB3YXMgc28gZGlmZmVyZW50IHRvIHRoZSBib29rISBBbmV4dHJlbWVseSBwb29yIGFkYXB0aW9uLCBvbmUgb2YgdGhlIHdvcnN0IEkndmUgc2Vlbi4gVGhpcyBkZXNlcnZlcyBhIGRlY2VudCByZW1ha2UgdGhhdCdkIGJldHRlciBiZSAxMDAwIHRpbWVzIGJldHRlciB0aGFuIHRoaXMgcGlsZSBvZiBnYXJiYWdlLikAAAAAAAAAQAqnBgj9ARD9ASKVBkkgaGF2ZSBiZWVuIGEgaHVnZSBMeW5uIFBldGVyc29uIGZhbiBldmVyIHNpbmNlIGhlciBicmVha3Rocm91Z2ggcm9sZSBpbiB0aGUgMTk4OCBibG9ja2J1c3RlciBtb3ZpZSAiRmFyIE5vcnRoIiwgYW5kIGV2ZW4gdGhvdWdoIEkgbG92ZWQgaGVyIGluIGhlciBvbmUgb3RoZXIgZmlsbSAiU2xvdyIgKDIwMDQpIHdoZXJlIHNoZSBwbGF5cyAiRnJhbmNpcyIsIHRoaXMgaXMgYnkgZmFyIGFuZCBhd2F5IGhlciBzdHJvbmdlc3Qgcm9sZS48YnIgLz48YnIgLz5MeW5uLCBhcyBJJ20gc3VyZSB5b3UgYWxsIGtub3cgKG9yIHNob3VsZCksIHBsYXlzIHRoZSBjcml0aWNhbCByb2xlIG9mICJEcml2ZXIiLjxiciAvPjxiciAvPlVuZm9ydHVuYXRlbHksIG90aGVyIHRoYW4gTHlubidzIGFtYXppbmcgcGVyZm9ybWFuY2UsIEknbSBhZnJhaWQgdGhpcyBtb3ZpZSBkb2Vzbid0IHJlYWxseSBoYXZlIG11Y2ggZ29pbmcgZm9yIGl0LjxiciAvPjxiciAvPk9oIHdhaXQgLSB0aGVyZSB3YXMgb25lIG90aGVyIHRoaW5nIC0gdGhlIGFtYXppbmcgY3JlYXRpdml0eSBvZiB0aGUgZWRpdGluZyB0byByZW1vdmUgcHJvZmFuaXR5IGZvciBUViB2aWV3ZXJzLiBNZW1vcmFibGUgbGluZXMgbGlrZTogIllvdSBzb24tb2YtYS1ndW4hIiwgIllvdSBzb24tb2YtYS13aXRjaCEiLCAiU2hvb3QhIiwgYW5kICJXZWxsLCBGb3JnZXQgWW91ISI8YnIgLz48YnIgLz5PLksuIEJ5ZS48YnIgLz48YnIgLz5QLlMuOiBEb2VzIGFueW9uZSBrbm93IHdoZXJlIEkgY2FuIGdldCBhbm90aGVyIEx5bm4gUGV0ZXJzb24gcG9zdGVyPykAAAAAAAAAQAr2Awj+ARD+ASLkA0kgaGF2ZSBhbHdheXMgYmVlbiBhIGh1Z2UgZmFuIG9mICJIb21pY2lkZTogTGlmZSBPbiBUaGUgU3RyZWV0IiBzbyB3aGVuIEkgaGVhcmQgdGhlcmUgd2FzIGEgcmV1bmlvbiBtb3ZpZSBjb21pbmcgdXAsIEkgY291bGRuJ3Qgd2FpdC48YnIgLz48YnIgLz5MZXQgbWUganVzdCBzYXksIEkgd2FzIG5vdCBkaXNhcHBvaW50ZWQgYXQgYWxsLiBJdCB3YXMgb25lIG9mIHRoZSBtb3N0IHBvd2VyZnVsIDIgaG91cnMgb2YgdGVsZXZpc2lvbiBJJ3ZlIGV2ZXIgc2Vlbi4gSXQgd2FzIGdyZWF0IHRvIHNlZSBldmVyeW9uZSBiYWNrIGFnYWluLCBidXQgdGhlIGJpZ2dlc3QgcGxlYXN1cmUgb2YgYWxsIHdhcyB0byBoYXZlIEFuZHJlIEJyYXVnaGVyIGJhY2ssIGJlY2F1c2UgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFBlbWJsZXRvbiBhbmQgQmF5bGlzcyB3YXMgYWx3YXlzIHRoZSBzdHJvbmdlc3QgcGFydCBvZiBhbiBhbGwtdG9nZXRoZXIgZ3JlYXQgc2hvdy4pAAAAAAAAAEAKvgQI/wEQ/wEirARJIGhhdmUgYWx3YXlzIGJlZW4gYSBmYW4gb2YgdGhlIHNob3cgc28gSSdsbCBhZG1pdCB0aGF0IEkgYW0gYmlhc2VkLiBXaGVuIHRoZSBzaG93J3MgcnVuIGVuZGVkLCBJIGZlbHQgbGlrZSB0b28gbWFueSBxdWVzdGlvbnMgcmVtYWluZWQgdW5hbnN3ZXJlZC4gVGhpcyBtb3ZpZSB0byBtZSBmZWx0IGxpa2UgY2xvc3VyZS4gVG8gc2VlIGFsbCB0aGUgcGVvcGxlIEknZCBmb2xsb3dlZCBvdmVyIHRoZSBwYXN0IGZldyB5ZWFycyB0b2dldGhlciBhdCBsYXN0IHdhcyBtb3N0IHJld2FyZGluZy4gSSBoYXZlIGhlYXJkIHRoYXQgdGhpcyBpcyBwcm9iYWJseSB0aGUgb25seSBIb21pY2lkZSBtb3ZpZSB0aGF0IHdlIGNhbiBleHBlY3QuIElmIHRoYXQgaXMgc28sIHRoaXMgaXMgdGhlIGFwcHJvcHJpYXRlIHdheSB0byBnbyBvdXQuIFRoaXMgbW92aWUgaXMgc29tZXRpbWVzIHBvaWduYW50LCBzb21ldGltZXMgdXBzZXR0aW5nLCBidXQgYWx3YXlzIHNhdGlzZnlpbmcuIElmIHlvdSBhcmUgb3IgZXZlciBoYXZlIGJlZW4gYSBmYW4gb2YgdGhlIHNob3csIHdhdGNoIHRoaXMgbW92aWUuKQAAAAAAAABACusKCIACEIACItkKSSBoYXZlIGFsd2F5cyBiZWVuIGEgZmFuIG9mIEJvdHRvbSwgZ3JhYmJpbmcgYXMgbWFueSB2aWRlb3MgYXMgSSBjb3VsZCBmaW5kIG9mIHRoZSBzZXJpZXMgaGVyZSBpbiB0aGUgc3RhdGVzLiBUaGUgY2hlbWlzdHJ5IGJldHdlZW4gUmlrIGFuZCBBZGUgaXMgYWx3YXlzIGdlbml1cywgYW5kIHRoZSBjb21iaW5hdGlvbiBvZiBzbWFydCB3cml0aW5nIGFuZCB1dHRlcmx5IHN0dXBpZCBodW1vciBzZWVtcyB0byB3b3JrIHdpdGhvdXQgZmFpbC4gSSB0aHVzIHNhdCBkb3duIHRvIHdhdGNoIHRoaXMgbW92aWUgd2l0aCBncmVhdCBlYWdlcm5lc3MuLi4gYW5kIHdhcyB1dHRlcmx5IGRpc2FwcG9pbnRlZCBieSB0aGUgZW5kLjxiciAvPjxiciAvPlRoZSBmaXJzdCAzLzQgb2YgdGhlIG1vdmllIGNhbiBiZXN0IGJlIGRlc2NyaWJlZCBhcyB1bmluc3BpcmVkIGFuZCBwb29ybHkgZGlyZWN0ZWQgKHNvcnJ5LCBBZGUhKSwgYnV0IHdpdGggc29tZSB1dHRlcmx5IGJyaWxsaWFudCBtb21lbnRzLiBVbmZvcnR1bmF0ZWx5LCB0aGVzZSBsYXVnaC1vdXQtbG91ZCBtb21lbnRzIG1ha2UgeW91IHJlYWxpemUgaG93IGxlc3MtdGhhbi1icmlsbGlhbnQgdGhlIHJlc3Qgb2YgdGhlIG1vdmllIGlzLiBUaGUgc2xhcHN0aWNrIHN0YXJ0cyBvZmYgZnVubnkgYnV0IGV2ZW50dWFsbHkgYmVjb21lcyBhIGJpdCBib3JpbmcsIHdpdGggb25seSB0aGUgcGVydmVydGVkIHNleCBqb2tlcyB0byBrZWVwIHRoaW5ncyBodW1vcm91cy48YnIgLz48YnIgLz5UaGUgZW5kIG9mIHRoZSBtb3ZpZSAodGhlICdncmVlbicgc2NlbmVzLCBmb3IgdGhvc2Ugb2YgeW91IHdobyd2ZSBzZWVuIGl0KSB3YXMuLi4gcGVyaGFwcyB0aGUgd29yc3QgZW5kaW5nIEkndmUgc2VlbiBpbiB0aGUgcGFzdCBkZWNhZGUuIEhvbmVzdGx5LiBJdCB3YXMgb25lIGpva2UgcmVwZWF0ZWQgYWJvdXQgdGhpcnR5IHRpbWVzLCBmb2xsb3dlZCBieSBhbiBhYnJ1cHQgZW5kaW5nIHRoYXQgbWFkZSBubyBzZW5zZSAod2hpY2ggZGlkbid0IGJvdGhlciBtZSkgYW5kIHdhc24ndCBmdW5ueSAod2hpY2ggZGlkKS48YnIgLz48YnIgLz5UbyBzdW0gdXAsIEkgd2FzIHNvcmVseSBkaXNhcHBvaW50ZWQgYnkgdGhpcyBtb3ZpZS4gSSBzaGFsbCBjbGluZyB0byB0aGUgZmV3IGJyaWxsaWFudCBtb21lbnRzIGluIGl0LCB0byByZXRhaW4gdGhlIGZvbmRlc3QgbWVtb3JpZXMgdGhhdCBJIGNhbi4uLiBidXQgSSBoYXZlIHRvIHdhcm4geW91LCBpZiB5b3UncmUgYWJvdXQgdG8gb3ZlcnBheSBmb3IgeW91ciBOVFNDIGNvbnZlcnNpb24gdGFwZSBmcm9tIHRoZSBsb2NhbCBpbXBvcnRlciwgZG9uJ3QuIFRoZXJlIGFyZSBmYXIgYmV0dGVyIHRoaW5ncyB0byBzcGVuZCB5b3VyIG1vbmV5IG9uLikAAAAAAAAAQArKBgiBAhCBAiK4BkkgaGFkIHNlZW4gUmlrIE1heWFsbCBpbiBCbGFja2FkZGVyIGFuZCB0aGUgTmV3IFN0YXRlc21hbiwgc28gSSB0aG91Z2h0IEknZCBnaXZlIHRoaXMgZmlsbSBhIHRyeS48YnIgLz48YnIgLz5BdCBhcm91bmQgNCBwbSBJIGJvdWdodCBpdCwgYXQgYXJvdW5kIDhwbSBJIHN0YXJ0ZWQgdG8gd2F0Y2gsIGF0IGFyb3VuZCA4LjE1cG0gSSBmYXN0IGZvcndhcmRlZCB0aGUgcmVtYWluaW5nIGZpbG0gdG8gc2VlIGlmIHRoZXJlIHdhcyBhbnl0aGluZyBsZWZ0IHdhdGNoYWJsZSBmb3IgYSBodW1hbiBiZWluZyB3aXRoIGEgYnJhaW4uLi4gYnV0IHRoZXJlIHdhc24ndC4gQXQgYXJvdW5kIDguNDVwbSBJIHRocmV3IHRoZSBEVkQgaW50byB0aGUgZHVzdGJpbi4gQW5kIHRoYXQncyB3aGVyZSB0aGlzICJmaWxtIiBiZWxvbmdzLjxiciAvPjxiciAvPldoYXQgZXZlciBoYXBwZW5lZCB0byBCcml0aXNoIGh1bW91cj8gVGhlIGh1bW91ciBzbyBmaW5lIGFuZCB3aXR0eSwgaW50ZWxsaWdlbnQgYW5kIGFydGZ1bCB0aGF0IHlvdSBmaW5kIGluIFllcywgTWluaXN0ZXIsIEJsYWNrYWRkZXIsIFZpY2FyIG9mIERpYmxleSwgRmF3bHR5IFRvd2VycyBvciBUaGUgRmFzdCBTaG93PyBUaGUgYmxhY2sgaHVtb3VyIEJyaXRhaW4gaXMgc28gZmFtb3VzIGZvcj8gSSBkb24ndCB3YW50IHRvIGluc3VsdCBhbnlib2R5LCBidXQgSSBwcmVzdW1lIGV2ZW4gc3R1cGlkIGNoaWxkcmVuIHdvdWxkbid0IGZpbmQgdGhpcyBmdW5ueS4gVGhleSBkZXNlcnZlIG1vcmUgaW50ZWxsaWdlbnQgZnVuLiBBbmQgUmlrIE1heWFsbCwgeW91IGNhbiBkbyBiZXR0ZXIsIHNvIHBsZWFzZSwgZG8hKQAAAAAAAABACvgFCIICEIICIuYFSSBnb3QgaW50ZXJlc3RlZCBpbiB0aGlzIG1vdmllIGJlY2F1c2Ugc29tZWJvZHkgaGFkIG1hZGUgYSBiZWF1dGlmdWwgdmlkZW8gZm9yIEJqw7Zya3MgIkJhY2hlbG9yZXR0ZSIgd2l0aCBjbGlwcyBmcm9tIGl0LiBTbyBJIHdhdGNoZWQgdGhlIG1vdmllLiBBbmQgaXQgaXMgaW5kZWVkIHN0dW5pbmdseSBiZWF1dGlmdWwuIEEgbWFzdGVycGllY2Ugb2YgYW5pbWF0aW9uLjxiciAvPjxiciAvPlVuZm9ydHVuYXRlbHksIHRoZSBzdG9yeSBkb2Vzbid0IGtlZXAgdXAuIEl0IHN0YXJ0cyBvdXQgd2VsbCwgd2l0aCBpbnRlcmVzdGluZyBwbG90bGluZXMgYWJvdXQgcGVvcGxlIGZlbmNpbmcgZm9yIHRoZSBwb3NzZXNzaW9uIG9mIHRoZSBSb3NlIEJyaWRlLCBidXQgc3VkZGVubHkgZWxldmF0b3JzIGZpbGwgdXAgd2l0aCB3YXRlciBhbmQgbG9vc2VzIHRoZWlyIHdhbGxzLCBwZW9wbGUgZmxvYXQgYXdheSwgYW5kIGZpbmFsbHkgZm9yIG5vIHJlYXNvbiB3aGF0c29ldmVyLCBVdGVuYSBpcyB0cmFuZm9ybWVkIGludG8gYSBjYXIsIGFuZCBhIGhpZ2hzcGVlZCBjaGFzZSBlbnN1ZXMuPGJyIC8+PGJyIC8+SSBsaWtlIG11Y2ggQW5pbWUgZm9yIGl0J3MgYWJpbGl0eSB0byBtYWtlIGFsdGVybmF0aXZlIHVuaXZlcnNlcywgYnV0IHRoaXMgdW5pdmVyc2UgaXMganVzdCBzdHVwaWQuIElmIHlvdSBhcmUgZ29ubmEgd2F0Y2ggdGhpcyBtb3ZpZSwgdHVybiBvZiB0aGUgc291bmQsIGl0J3MgYmV0dGVyIHRoYXQgd2F5LikAAAAAAAAAQArEBwiDAhCDAiKyB0kgZm91bmQgaXQgaGFyZCB0byBjYXJlIGFib3V0IHRoZXNlIGNoYXJhY3RlcnMsIHdobyB3ZXJlIGVpdGhlciBhbm5veWluZyBvciBpbnNpcGlkLCBhbGwgbGl2aW5nIHRoZWlyIGZhYnVsb3VzbHkgaGlsYXJpb3VzbHkgdXJiYW4gbGl2ZXMuPGJyIC8+PGJyIC8+VGhlIGRpYWxvZ3VlIHdhcyBleGNydWljaWF0aW5nIGF0IHRpbWVzLCBhbmQgYXQgb3RoZXIgdGltZXMgdGhlIG5hcnJhdGl2ZSBzZWVtZWQgaGFyZCB0byBmb2xsb3cgLSB3YXMgaXQgbWUgb3Igd2VyZSBlbnRpcmUgc2NlbmVzIGRlbGV0ZWQ/PGJyIC8+PGJyIC8+SXQgZmVsdCBsaWtlIGEgcG9vciBzaXRjb20gc29tZWhvdyB0dXJuZWQgaW50byBhIGZpbG0uIFRoZSBzdGVyZW90eXBlcyBhbmQgam9rZXMgYWJvdXQgIm1lbidzIGdyb3VwcyIgd291bGQgcGVyaGFwcyBoYXZlIGJlZW4gZnVubnkgaW4gdGhlIGVhcmx5IDkwcy4gQXMgaXQgaXMsIHRoaXMgaXMgd2hlcmUgbXVjaCBvZiB0aGUgaHVtb3VyIG9mIHRoZSBmaWxtIGNvbWVzIGZyb20gLSBhbmQgYm95LCBkb2VzIGl0IGdldCBvbGQgZmFzdC48YnIgLz48YnIgLz5BcGFydCBmcm9tIHRoZSBhdHRyYWN0aXZlIElyaXNoIG1hbiAtIHRoaXMgZmlsbSB3YXMgYSBkdWQuIEFuZCBub3QgZXZlbiBpbiBhICJzbyBiYWQgaXQncyBnb29kIHdheSIuIFRoZSBsYXN0IDIwIG1pbnV0ZXMgd2VyZSBwYXJ0aWN1bGFybHkgcGFpbmZ1bC4gUGVyaGFwcyBpZiB5b3UndmUgbmV2ZXIgbWV0IGFueSBnYXkgcGVvcGxlIG9yIG5ldmVyIHRob3VnaHQgYWJvdXQgaG9tb3NleHVhbGl0eSBiZWZvcmUsIHRoZW4gdGhpcyBmaWxtIG1pZ2h0IGhhdmUgc29tZXRoaW5nIG1lYW5pbmdmdWwgdG8gc2F5LiBPdGhlcndpc2UgLSBkYXJsaW5ncywgeW91J2Qgc3RpbGwgYmUgYmV0dGVyIG9mZiByZW50aW5nIFRoZSBCb3lzIGluIFRoZSBCYW5kIG9yIEJlYXV0aWZ1bCBUaGluZy4pAAAAAAAAAEAKwgkIhAIQhAIisAlJIGZpbmQgaXQgcmF0aGVyIHVzZWxlc3MgdG8gY29tbWVudCBvbiB0aGlzICJtb3ZpZSIgZm9yIHRoZSBzaW1wbGVzdCByZWFzb24gdGhhdCBpdCBoYXMgbm90aGluZyB0byBjb21tZW50IHVwb24uSXQncyBzaW1pbGFyIHRvIGEgcm90dGVuIGVnZyB3aGljaCBoYXMgbm90aGluZyBnb29kIHRvIHNob3cgdG8gdGhlIHdvcmxkIGV4Y2VycHQgZm9yIHRoZSBmYWN0IHRoYXQgaXQgaXMgcm90dGVuIGFzIG90aGVyIGVuZGxlc3MgbnVtYmVyIG9mIGVnZ3MgaGF2ZSBiZWVuIGJlZm9yZSBpdC4gQnV0IHNpbmNlIGEgY29tbWVudCBpcyBtYW5kYXRvcnkgZm9yIHN1Y2ggYSBncmFuZGlvc2UgaW5zaWduaWZpY2FuY2UgLi4uIDxiciAvPjxiciAvPkZpbHRoIGlzIGRlZmluaXRlbHkgdGhlIHByb3BlciB3b3JkIHRvIGRlc2NyaWJlIHRoaXMgbW92aWUgY3JlYXRlZCBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgYW55IG90aGVyIFJvbWFuaWFuICJtb3ZpZSIgZGlyZWN0ZWQgYnkgTHVjaWFuIFBpbnRpbGllIHdobyBpbnNpc3RzIHRvIGRlcGljdCB0aGUgc28gY2FsbGVkICJSb21hbmlhbiByZWFsaXR5IiBmb2xsb3dpbmcgdGhlIENvbW11bmlzdCBlcmEgKDE5OTAgdG8gcHJlc2VudCBkYXlzKS48YnIgLz48YnIgLz5VbmRlciBubyBjaXJjdW1zdGFuY2VzIHJlY29tbWVuZGVkIGZvciBwZW9wbGUgb3V0c2lkZSBSb21hbmlhIGFzIGZvciB0aGUgb3RoZXJzICh3aG8gbGF0ZWx5IGZpbmQgYW1hdGV1cmlzaCBjYW1lcmEsIGxhY2sgb2YgcGxvdCwgbGFjayBvZiBkaXJlY3RvcmlhbCAvIGFjdG9ycydzIHF1YWxpdHkgZXRjLCBub2lzZSBldGMuIGFzIGJlaW5nIHRyZW5keSBhbmQgZXZlbiBhcnQtbGlrZSkgOiB3YXRjaCAmIGVuam95IHRoaXMgIm1vdmllIiAoYXMgSSBrbm93IHlvdSB3aWxsKSBidXQgZG8gdGhlIG90aGVyIHdlbGwgaW50ZW50aW9uZWQgSU1EYiBtZW1iZXJzIGEgZmF2b3IsIGRvbid0IHdyaXRlIGFuIG9ubGluZSByZXZpZXcgZm9yIGl0IHdpbGwgbWlzZ3VpZGUsIGlycml0YXRlIGFuZCBpbiB0aGUgZW5kIHdhc3RlIHRoZWlyIHRpbWUuPGJyIC8+PGJyIC8+T24gdGhlIG90aGVyIGhhbmQgdGhpcyBtb3ZpZSAoYW1vbmcgb3RoZXJzKSBoYXMgc29tZSB2YWx1ZSB3aGF0c29ldmVyLCBhbiBlZHVjYXRpb25hbCBvbmUgZm9yIGl0IHNldHMgdGhlIGV4YW1wbGUgZm9yIDogIkhvdyBOT1QgdG8gbWFrZSBhIG1vdmllLiIpAAAAAAAAAEAKmAcIhQIQhQIihgdJIGZlZWwgbGlrZSBJJ3ZlIGp1c3Qgd2F0Y2hlZCBhIHNudWZmIGZpbG0uLi4uYSBiZWF1dGlmdWxseSBhY3RlZCwgdGF1dCwgZW5ncm9zc2luZyBhbmQgaG9ycmlibGUgdGhpbmchIEEgdHdvIGhvdXIgbGl0YW55IG9mIHBlcnZlcnNpb24gaW4gdGhlIG1vc3QgYmFzaWMgYW5kIGFsbCBpbmNsdXNpdmUgc2Vuc2Ugb2YgdGhlIHdvcmQsIHNleHVhbCB2aW9sZW5jZSBhbmQgdG9ydHVyZSwgcmFwZSwgZGVjYXBpdGF0aW9uLCBpbmNlc3QsIGNvcnJ1cHRpb24sIGxpdmUgYnVyaWFsLCBhbmQgYWJ1c2UsIGFidXNlLCBhYnVzZS4gTm8gcmVkZW1wdGlvbiB3aGF0c29ldmVyLiBBbmQgSSBXQVMgZW50ZXJ0YWluZWQuIEkgY291bGRuJ3Qgc3RvcCB3YXRjaGluZy4gV2hhdCBkb2VzIHRoaXMgc2F5IGFib3V0IG1lLCBhYm91dCB0aGUgcGVvcGxlIHdobyBtYWtlIGFuZCBhY3QgaW4gdGhpcyBzb3J0IG9mIHRoaW5nLCBhbmQgYSB3b3JsZCB0aGF0IGhhcyBiZWNvbWUgc28gZGVzZW5zaXRpemVkIHRoYXQgZXZlbnR1YWxseSByZWFsIHNudWZmIGZpbG1zIHdpbGwgYmUgdGhlIG5vcm0uIEFuZCBJJ20gbmVpdGhlciBwdXJpdGFuaWNhbCBub3IgaHVtb3JsZXNzLCBJIGRvbid0IHRyeSB0byBoaWRlIGZyb20gdGhlIGV4aXN0ZW5jZSBvZiBkYXJrbmVzcywgYW5kIEkgZGVmaW5pdGVseSBoYXZlIG5vdCBsZWQgYSBzaGVsdGVyZWQgbGlmZSwgYnV0IEkgYW0gYXNoYW1lZCBvZiBteXNlbGYuIEFORCBJJ20gc29ycnkgdG8gc2VlIG15IEJyaXRpc2ggY291c2lucyBkcmFnZ2luZyB0aGUgc3ViamVjdC1tYXR0ZXIgc2V3ZXJzIHRoZSB3YXkgbXkgb3duIHRyaWJlIGRvZXMuIEl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBjb3p5LCBidXQgZG9lcyBpdCBoYXZlIHRvIHdhbGxvdyBpbiB2aWNhcmlvdXMgc2FkaXNtPykAAAAAAAAAQAqmAgiGAhCGAiKUAkkgZW5qb3llZCBDYXJheCdzICJMZXMgQW1hbnRzIGR1IFBvbnQgTmV1ZiIgYW5kIHdhcyB0aGVyZWZvcmUgZXhwZWN0aW5nIHRoaXMgZmlsbSB0byBiZSBvZiBhIHNpbWlsYXIgc3RhbmRhcmQuIFdlbGwsIHRoZSBmaXJzdCAxMCBtaW51dGVzIHdlcmUgT0ssIGJ1dCB0aGVuIGl0IGRpc2ludGVncmF0ZXMgaW50byBhIHJhdGhlciBwcmV0ZW50aW91cyBqb3VybmV5IG9mIGEgeW91bmcgbWFuIGxvb2tpbmcgZm9yIHRoZSBlc3NlbmNlIG9mIGxpZmUuIEEgc2FkIGRpc2FwcG9pbnRtZW50LikAAAAAAAAAQArTCgiHAhCHAiLBCkkgZG8gbm90IGZhaWwgdG8gcmVjb2duaXplIEhhbmVrZSdzIGFib3ZlLWF2ZXJhZ2UgZmlsbS1tYWtpbmcgc2tpbGxzLiBGb3IgZXhhbXBsZSwgSSBhcHByZWNpYXRlIGhpcyBsaW5nZXJpbmcgb24gdW5yZW1hcmthYmxlLW5hdHVyYWwtZGF5LWxpZ2h0ZWQgc2V0dGluZ3MgYXMgYSBwb3dlcmZ1bCB3YXkgdG8gZm9yY2UgYSBzdHJvbmcgc2Vuc2Ugb2YgcmVhbGlzbS4gSG93ZXZlciwgcmVnYXJkaW5nIHRoZSBjb250ZW50IG9mIHRoaXMgZmlsbSwgSSBhbSB2ZXJ5IHNhZCB0byBzZWUgdGhhdCBpbiB0aGUgMjFzdCBjZW50dXJ5IHRoZXJlIGlzIHN0aWxsIGFuIHVyZ2UgdG8gcGF0aG9sb2dpemUgZG9taW5hdGlvbi1zdWJtaXNzaW9uIHJlbGF0aW9ucyBvciBmZWVsaW5ncyAoYW5kL29yIEJEU00gcHJhY3RpY2VzKS4gVGhlIHByb2JsZW0gdGhhdCB0aGUgbWFpbiBjaGFyYWN0ZXIgaGFzIHdpdGggaGVyIG1vdGhlciBpcyB1bmJlbGlldmFibHkgdG9waWNhbCBhcyBpcyB0aGUgYWxpZW5hdGlvbiBhbmQgdW5jb21wcmVoZW5zaW9uIGZlbHQgYnkgV2FsdGVyIChJIGRvbid0IG1lYW4gdGhlIGZydXN0cmF0aW9uIG9mIGEgbG92ZXIgd2hpY2ggaXMgbm90IGxvdmVkIGJhY2sgaW4gdGhlIHNhbWUgd2F5LCB3aGljaCBpcyB1bmRlcnN0YW5kYWJsZTsgSSBtZWFuIHRoYXQgaGUgbG9va3MgdXBvbiBoZXIgYXMgaWYgc2hlIHdlcmUgY3JhenksIG9yIGFzIGlmIGhlIHdhcyBhIG1vbmssIGNvbWUgb24hKS4gSSBtZWFuIEQvcyBpcyBub3Qgc29tZXRoaW5nIG5ldyBpbiB0aGUgd29ybGQgYW5kIEkgdGhpbmsgaXQgaXMgcmF0aGVyIHNpbGx5IHRvIHRyZWF0IHRoZSBzdWJqZWN0IGFzIGlmIGl0IHdlcmUgc29tZXRoaW5nICJmcmVha2lzaCIgb3IgcGF0aG9sb2dpY2FsOyBpdCBpc24ndC4gSW4gZ2VuZXJhbCwgZmlsbXMgZGVhbGluZyB3aXRoIHRoaXMgc3ViamVjdCBhcmUgcmVhbGx5IGxhZ2dpbmcgYmVoaW5kIHRoZSB0aW1lcy48YnIgLz48YnIgLz5TbywgZm9yIG1lLCBJIGZlZWwgdGhhdCB0aGlzIGZpbG0gZW5kcyB1cCBiZWluZyBxdWl0ZSBhIHByb2dyYW1tYXRpY2FsIGZpbG0sIHdvcnJpZWQgd2l0aCB2ZXJ5IG91dGRhdGVkIHBzaWNvYW5hbGl0aWNhbCB0aGVvcmllcyAoaXNuJ3QgaXQgbmVhcmx5IGVtYmFycmFzc2luZz8pLCBhbmQgdGhhdCBkb2VzIG5vdCByZWFsbHkgcmVsYXRlIHdpdGggcmVhbC1saWZlIGxpdmVzIGFuZCBleHBlcmllbmNlcyBvZiB0aG9zZSBlbmdhZ2VkIGluIEQvcyByZWxhdGlvbnNoaXBzIChwZXJzb25hbCBleHBlcmllbmNlLCBmb3J1bXMsIGlyYyBjaGF0cm9vbXMgZXZlbiByZWNlbnQgc2Nob2xhciBzdHVkaWVzIHdpbGwgc2hvdyB0aGlzKS4pAAAAAAAAAEAKnQYIiAIQiAIiiwZJIGNhbiBvbmx5IGFzc3VtZSB0aGUgcHJldmlvdXMgcG9zdHMgY2FtZSBmcm9tIGV4ZWNzIGF0IHRoZSBwcm9kdWN0aW9uIGNvbXBhbnkuLi48YnIgLz48YnIgLz5BdHRlbmRlZCB0aGUgVUsgcHJlbWllcmUgbGFzdCBuaWdodC4gWmFuZSBhbmQgQnJvb2sgYXR0ZW5kZWQgKHRoZXkgcHJvYmFibHkga25ldyBJIHdhcyBnb25uYSBiZSB0aGVyZSkgYW5kIGFyZSB1bmRvdWJ0ZWRseSBzdGFycywgYnV0IHdoYXQgYSB0dXJrZXkgb2YgYSBmaWxtLiBJIGZlbHQgc29ycnkgZm9yIHRoZW0gYXQgdGltZXMsIHdoZW4gdGhlIGF1ZGllbmNlIGVydXB0ZWQgaW4gbGF1Z2h0ZXIgYXQgd2hhdCB3ZXJlIHNlcmlvdXMgJ3RocmlsbGVyJyBzY2VuZXMuPGJyIC8+PGJyIC8+QnV0IHBlcmhhcHMgSSB3YXMgbWlzc2luZyB0aGUgcG9pbnQuIFBlcmhhcHMgYW4gZWxlbWVudCBvZiB0b25ndWUtaW4tY2hlZWsgd2FzIGludGVuZGVkLiBJZiBzbywgcHVyZSBnZW5pdXMuIElmIG5vdCwgY2FyZWVyIGdlbm9jaWRlLjxiciAvPjxiciAvPk9uIHRoZSBwbHVzIHNpZGUsIFphbmUgYWx3YXlzIHNoaW5lcywgYW5kIEJyb29rIGNhbiBhY3R1YWxseSBhY3QgYSBsaXR0bGUuIEFzIHRoZSBvdGhlciBoYWxmIHNhaWQgKGFzIHdlIHJhbiBvdXQgdGhlIGNpbmVtYSwgYXZlYyBicm9rZW4gcmlicyksIHRoZXkgY2FuIGJlIGZvcmdpdmVuIGZvciB0aGlzIGZpbG0gYXMgdGhleSBib3RoIHNlZW0gbGlrZSBuaWNlIHBlb3BsZSEgVGhlIHNjcmlwdHdyaXRlciwgaG93ZXZlciwgc2hvdWxkIGJlIG1hcm9vbmVkLikAAAAAAAAAQArYCAiJAhCJAiLGCEkgYm91Z2h0IHRoaXMgdmlkZW8gb24gYSB0aHJvdy1vdXQgdGFibGUgYXQgdGhlIHZpZGVvIHN0b3JlIGV4cGVjdGluZyBhIGdvb2QgY2FzdCBpbiB3aGF0IHdhcyB0b3V0ZWQgYXMgYW4gYXdhcmQtd2lubmluZyBCcml0IHNleCBjb21lZHkuIEkgZ3Vlc3MgSSBzaG91bGQgaGF2ZSByZWFkIHRoZSBmaW5lciBwcmludC4gSSByYXJlbHkgd3JpdGUgYSBwYW5uaW5nIHJldmlldywgYnV0IGhlcmUgZ29lcy48YnIgLz48YnIgLz5UaGVzZSBhY3RvcnMgaW4gZ2F5IHJvbGVzIHJlYWxseSBwbGF5IGdhbWVzIHdpdGggeW91ciBtZW1vcmllcyBvZiBhIGxvdCBvZiBmYXIgbW9yZSB3b3J0aHkgZmlsbXMuIFRoaXMgY29tZWR5IHdhcyBhIHZlcnkgY3J1ZWwgam9rZSBhdCB0aGUgZXhwZW5zZSBvZiB0aGUgYWN0b3JzLCB0aGUgdGhlYXRyZS1nb2luZyBwdWJsaWMgYW5kIG9mIGFsbCB0aGUgbmljZSBmaWxtcyB0aGF0IGhhdmUgY29udHJpYnV0ZWQgdG8gdGhlaXIgcmVwdXRhdGlvbnMuPGJyIC8+PGJyIC8+SSByZXBlYXQ6IGlzIHRoZSBqb2tlIGFib3V0IHRyYXNoaW5nIHRoZSBhY3RvcnMnIG90aGVyIGhpZ2hseSByZXNwZWN0YWJsZSBvbi1zY3JlZW4gcGVyc29uYWUgd2l0aCB0aGlzIHNjdXJyaWxvdXNseSB0cmFzaHkgZmxpY2s/IENhbiB0aGUgcmVmZXJlbmNlIHRvIHRoZSBBdXN0ZW4gY2xhc3NpY3MgJ1ByaWRlIGFuZCBQcmVqdWRpY2UnIGFuZCAnU2Vuc2UgYW5kIFNlbnNpYmlsaXR5JyBiZSBhbnl0aGluZyBlbHNlPyBIb3cgbXVjaCBvZiBhIHBvbGl0aWNhbCBzdGF0ZW1lbnQgd2FzIGl0IHRvIHByb2R1Y2UgdGhpcyBtZWxvZHJhbWEgdXNpbmcgdGhlc2Ugc3RhcnM/IEFyZSB3ZSBtZWFudCB0byBzaW1wbHkgdGFrZSBpdCBhcyBhIGxheS1kb3duIG1pc2VyZSB0aGF0IGFsbCBhY3RvcnMgYXJlIGdheSBhbmQgdGh1cyBsZXR0aW5nIHRoZWlyIG9uLXNjcmVlbiByb2xlcGxheSBhZmZlY3Qgb3VyIGxpZmVzdHlsZXMgaXMgYWNjZXB0aW5nIHRoZWlyIHByaXZhdGUgaG9tb3NleHVhbCBkZWFsaW5ncyBpbiBvdXIgZmFjZXMsIHRvbz8gSSdtIHNvcnJ5LCBidXQgSSBkb24ndCB0aGluayBzby4gSSBzYXkgTk8gdG8gdGhpcyBvbmUuKQAAAAAAAABACpEICIoCEIoCIv8HSSBiZWNhbWUgYSBmYW4gb2YgdGhlIFRWIHNlcmllcyBgSG9taWNpZGU6IExpZmUgb24gdGhlIFN0cmVldCcgbGF0ZSBpbiB0aGUgc2hvdydzIHJ1biwgYnV0IGJlY2FtZSBhIGZhbiB2ZXJ5IHF1aWNrbHkuIEl0IHdhcyBhIGNvcCBzaG93IHVubGlrZSBhbnkgb3RoZXI6IHZpc3VhbGx5IGRpZmZlcmVudCBpbiBpdHMgdXNlIG9mIGhhbmQtaGVsZCBjYW1lcmFzLCB0YWtpbmcgdGhlIHZpZXdlciBldmVyeXdoZXJlLCB3aXRoIGl0cyBtdWx0aWV0aG5pYyBhbmQgbXV0aXJhY2lhbCBjYXN0IGFuZCB0aGVpciB2YXJ5aW5nIGFuZCBmYXNjaW5hdGluZyBwZXJzb25hbGl0aWVzLCBhbmQgdGhhdCBpdCBjb3ZlcmVkIGFsbCBvZiB0aGUgZ29vZCBhbmQgYmFkIG9mIGEgcG9saWNlIGRlcGFydG1lbnQsIGluY2x1ZGluZyB0aGUgY29ycnVwdGlvbiBhbmQgcGVyc29uYWxpdHkgY2xhc2hlcyB0aGF0IGJ1YmJsZSB1cCB0byB0aGUgc3VyZmFjZS4gPGJyIC8+PGJyIC8+SG9taWNpZGU6IFRoZSBNb3ZpZSwgdGhlIHJldW5pb24gZm9sbG93LXVwIHRvIHRoZSBzZXJpZXMsIGlzIGFzIGdvb2QgYXMgYSBtYWRlLWZvci10ZWxldmlzaW9uIGZpbG0gY2FuIGJlLiBBZnRlciBMdC4gR2lhcmRlbGxvIChZYXBoZXQgS290dG8pLCBub3cgYSBjYW5kaWRhdGUgZm9yIG1heW9yIG9mIEJhbHRpbW9yZSwgaXMgc2hvdCwgdGhlIHNlcmllcycgY2FzdCBtZW1iZXJzIGFyZSBiYWNrIHRvIGhlbHAgZmluZCB0aGUga2lsbGVyLiBJbiBhZGRpdGlvbiwgdGhlIGNhc3QgbWVtYmVycyB3aG8gbGVmdCB0aGUgZm9yY2UgYW5kIHRob3NlIHdobyBkaWVkLCBhbHNvIG1hbmFnZSB0byBoYXZlIHRoZWlyIHBsYWNlIGluIHRoZSBmaWxtLiBUaGUgaW50ZW5zaXR5IGFuZCBmaXJlIHRoYXQgbWFya2VkIHRoZSBzZXJpZXMgcmV0dXJuLCBhbmQgdGhlIHNjcmlwdCBicmlzdGxlcyB3aXRoIHRoZSBzYW1lIGZpcmUgdGhhdCBtYXJrZWQgdGhlIHNlcmllcy4gQWxsIGluIGFsbCwgYSB0ZXJyaWZpYyBUViBtb3ZpZS48YnIgLz48YnIgLz5Wb3RlOiA5KQAAAAAAAABACsoCCIsCEIsCIrgCSSBhbmQgYSBmcmllbmQgcmVudGVkIHRoaXMgbW92aWUuIFdlIGJvdGggZm91bmQgdGhlIG1vdmllIHNvdW5kdHJhY2sgYW5kIHByb2R1Y3Rpb24gdGVjaG5pcXVlcyB0byBiZSBsYWdnaW5nLiBUaGUgbW92aWUncyBwbG90IGFwcGVhcmVkIHRvIGRyYWcgb24gdGhyb3VnaG91dCB3aXRoIGxpdHRsZSBzdXJwcmlzZSBpbiB0aGUgZW5kaW5nLiBXZSBib3RoIGFncmVlZCB0aGF0IHRoZSBtb3ZpZSBjb3VsZCBoYXZlIGJlZW4gY29tcHJlc3NlZCBpbnRvIHJvdWdobHkgYW4gaG91ciBnaXZpbmcgaXQgbW9yZSBzdXNwZW5zZSBhbmQgbW92aW5nIHBsb3QuKQAAAAAAAABACrEKCIwCEIwCIp8KSSBhbSBwYXJ0bHkgYSBmYW4gb2YgTWl5YXpha2kncyB3b3JrLiBJIHNheSAicGFydGx5IiBiZWNhdXNlIG1vc3Qgb2YgaGlzIGZpbG1zIGZhbGwgaW50byB0d28gY2F0ZWdvcmllczogYnJpbGxpYW50LCBhbmQgYm9yaW5nLiBTYWRseSB0aGlzIGZpbG0gZmFsbHMgaW50byB0aGUgbGF0ZXIgY2F0ZWdvcnkuPGJyIC8+PGJyIC8+VGhpcyBmaWxtIHN1ZmZlcnMgZnJvbSB0aGUgc2FtZSBmdW5kYW1lbnRhbCBwcm9ibGVtcyBhcyBNaXlhemFraSdzIHJlY2VudCBmaWxtICJIb3dsJ3MgTW92aW5nIENhc3RsZSIuIEFuIGludHJpZ3VpbmcgcHJlbWlzZSBpcyBzZXQgdXAsIGJ1dCB0aGVuIGltbWVkaWF0ZWx5IHJlZHVjZWQgdG8gbGl0dGxlIG1vcmUgdGhhbiBhIGJhY2tkcm9wIGZvciBzb21lIHVuZmF0aG9tYWJsZSBldmVudHMgdGhhdCBvbmx5IHNlcnZlIHRvIGNvbmZ1c2UgdGhlIHBsb3QgcmF0aGVyIHRoYW4gZXhwbGFpbiBpdC48YnIgLz48YnIgLz5UaGUgZmlyc3QgdGhpcmQgb2YgdGhlIGZpbG0gcmV2ZWFscyB0aGUgcG9zdC1hcG9jYWx5cHRpYyB3b3JsZCB0aGUgc3RvcnkgaXMgc2V0IGluLCBhbmQgYWN0dWFsbHkgbG9va3MgbGlrZSBhbiB2ZXJ5IGludGVyZXN0aW5nIHN0b3J5IGlzIGFib3V0IHRvIHVuZm9sZC4gRnJvbSB0aGVuIG9uIHRoaW5ncyBnbyBkb3duIGhpbGwuIFRoZSBtaWRkbGUgcGFydCBvZiB0aGUgZmlsbSBpcyBtb3N0bHkgbWFkZSB1cCBvZiB0aGlubHktdmVpbGVkIGVjby1wcm9wYWdhbmRhLCBhbmQgdGhlIGVuZGluZyBpcyBoZWF2aWx5IG1hcnJlZCBieSB0aGUgcmVsaWFuY2Ugb24gdGhlIGtpbmQgb2YgaW1wZW5ldHJhYmxlIHNwaXJpdHVhbGlzbSB3aGljaCBydWlucyBhIGxhcmdlIG51bWJlciBvZiBKYXBhbmVzZSBhbmltYXRlZCBmaWxtcy48YnIgLz48YnIgLz5PdmVyYWxsIHRoZSBmaWxtIGZlZWxzIGFzIHRob3VnaCBzb21lb25lIHJpcHBlZCBvdXQgZXZlcnkgb3RoZXIgcGFnZSBmcm9tIHRoZSBzY3JpcHQgYmVmb3JlIHBhc3NpbmcgaXQgb24gdGhlIHRoZSBhbmltYXRvcnMuIFdoYXQgaXMgbGVmdCBpcyBzb21ldGhpbmcgd2hpY2ggaXMgdmlzdWFsbHkgc3R1bm5pbmcgKGFsdGhvdWdoIHNhZGx5IHRoZSB2ZXJzaW9uIEkgc2F3IHdhcyBhbiBOdGgtZ2VuZXJhdGlvbiBjb3B5LCB3aXRoIHBvb3IgY29sb3VyIC0gd2hpY2ggZ2l2ZXMgcmlzZSB0byB0aGUgY29tbW9uIG15dGggdGhhdCBOYXVzaWNhYSBzaG93cyBoZXIgYmFyZSBib3R0b20gd2hlbiBmbHlpbmcpLCBidXQgd2hpY2ggbWFrZXMgbGl0dGxlIHNlbnNlIGFuZCB1bHRpbWF0ZWx5IGxlZnQgbWUgY29uZnVzZWQuKQAAAAAAAABACs4NCI0CEI0CIrwNSSBhbSBub3Qgc28gbXVjaCBsaWtlIExvdmUgU2ljayBhcyBJIGltYWdlLiBGaW5hbGx5IHRoZSBmaWxtIGV4cHJlc3Mgc2V4dWFsIHJlbGF0aW9uc2hpcCBvZiBBbGV4LCBraWssIFNhbmR1IHRoZWlyIHRyaWFuZ2xlIGxvdmUgd2VyZSBmdWxsIG9mIGludGVuc2VuZXNzLCBmcnVzdHJhdGlvbiBhbmQgamVhbG91cywgYXQgbGFzdCwgQWxleCB3YWtlZCB1cCBhbmQgcmVhbGl6ZWQgdGhhdCB0aGV5IHdvdWxkIG5vdCBoYXZlIHJlc3VsdCBhbmQgZnV0dXJlLkVuZGluZyB1cCB3YXMgc2FkLjxiciAvPjxiciAvPlRoZSBkaXJlY3RvciBUdWRvciBHaXVyZ2l1IHdhcyBpbiBBTUMgdGhlYXRyZSBvbiBTdW5kYXkgMTI6MDBQTSBvbiAwOC8xMC8wNiwgd2l0aCB1cyB3YXRjaGVkIHRoZSBtb3ZpZSB0b2dldGhlci4gQWZ0ZXIgdGhlIG1vdmllIGhlIHRvbGQgdGhlIGF1ZGllbmNlcyB0aGF0IHRoZSBwdXJwb3NlZCB0byBjcmVhdGUgdGhpcyBmaWxtIHdoaWNoIHdhcyB0byBleHByZXNzIHRoZSBzZXh1YWwgcmVsYXRpb25zaGlwcyBvZiBSb21hbmlhbiB3ZXJlIGtpbmQgb2YgY29tcGxpY2F0ZS48YnIgLz48YnIgLz5PbiBteSBwb2ludCBvZiB2aWV3IHNleHVhbCBsaWZlIGlzIGFsd2F5cyBjb21wbGljYXRlZCBpbiBldmVyeXdoZXJlLCBJIGRvbid0IGZlZWwgYW55IHBhcnRpY3VsYXIgaW1wcmVzc2lvbiBhbmQgZWZmZWN0IGZyb20gdGhlIG1vdmllLiBUaGUgbG92ZSBwcm9jZWVkaW5nIG9mIEFsZXggYW5kIEtpa2ksIGFuZCBLaWtpIGFuZCBoZXIgYnJvdGhlciBTYW5kdSB3ZXJlIGtpbmQgb2YgbmV4dCBkb29yIG5laWdoYm9yaG9vZCBzdG9yeS48YnIgLz48YnIgLz5UaGUgdHdvIG1haW4gcmVhc29ucyBJIGRvbid0IGxpa2UgdGhpcyBtb3ZpZSBhcmUsIGZpcnN0bHksIHRoZSBmaWxtIGRpZG4ndCB0b2xkIHVzIGhvdyB0aGV5IHN0YXJ0ZWQgdG8gZmFsbCBpbiBsb3ZlPyBTb3VuZHMgbGlrZSBhZnRlciBBbGV4IG1vdmVkIGludG8gdGhlIGJ1aWxkaW5nIHdoaWNoIEtpa2kgd2FzIGxpdmluZywgdGhlbiB0d28gZ2lybHMgYXJlIGZhbGwgaW4gbG92ZS4gSXQgZG9lc24ndCBtYWtlIHNlbnNlIGF0IGFsbC4gSG93IGEgZ2lybCB3b3VsZCBmYWxsIGluIGxvdmUgd2l0aCBhbm90aGVyIGdpcmwgaW5zdGVhZCBvZiBhIG1hbi4gVG9vIG11Y2ggZnJhZ21lbnRzLCB5b3UgbmVlZCB0byBpbWFnZSBhbmQgY29ubmVjdCB0aG9zZSBzdG9yaWVzIGJ5IHlvdXIgbWluZC4gU2Vjb25kbHksIFRoZSB3aG9sZSBmaWxtIGRpZG4ndCBoYXZlIGEgc2NlbmUgb2YgQWxleCBhbmQgS2lrJ3Mgc2V4dWFsIGludGVyY291cnNlLCB0aGF0ICdzIHdoYXQgSSB3YXMgd2FpdGluZyBmb3LChcKFLiBIb3dldmVyLCBpdCBzdGlsbCBoYWQgc29tZSBwYXJ0cyB3ZXJlIGRlc2VydmVkIHRvIHJlY29tbWVuZC4gVGhlICJlYXIgcGllcmNpbmcgIiBwYXJ0IHdhcyBraW5kIG9mIGludGVyZXN0aW5nLiBBbGV4IHdhcyB3aWxsaW5nIHRvIHN1ZmZlciB0aGUgcGFpbiBvZiBlYXIgcGllcmNpbmcgdG8gYXBwcmVjaWF0ZSBraWsncyBsb3ZlLiBUaGF0IHdhcyBhIHRvdWNoaW5nIHNjZW5lIHdoaWNoIGdhdmUgeW91IGEgbGl0dGxlIGlkZWEgb2YgdGhlaXIgbG92ZS4gQWxzbywgdGhlIHNjZW5lIG9mIHRoZXkgd2VyZSBseWluZyBpbiB0aGUgc29jY2VyIGZpZWxkLCB0aGUgY29udmVyc2F0aW9uIGV4cHJlc3MgdGhlaXIgbG92ZXMgd2VyZSB0cnV0aGZ1bCBhbmQgcGFzc2lvbmF0ZS4pAAAAAAAAAEAKnAYIjgIQjgIiigZJIGFtIGluc3VsdGVkIGFuZCBhbmdyeSBvdmVyIHRoZSBpZGVhIHRoYXQgYSBzZXF1ZWwgdG8gJ0dvbmUgd2l0aCB0aGUgV2luZCcgc2hvdWxkIEVWRVIgaGF2ZSBiZWVuIHVuZGVydGFrZW4uIEhhdmluZyBleHByZXNzZWQgdGhhdCwgSSBoYXZlIG5vIHByb2JsZW0gd2l0aCB0aGUgcXVhbGl0eSBvZiB0aGUgYWN0aW5nIG9yIHRoZSBhY3RvcnMgaW4gdGhpcyBmaWxtLiBUaGUgcGVyZm9ybWVycyBhcmUgdGFsZW50ZWQgcGVvcGxlIHdob3NlIHRhbGVudHMgd2VyZSB3YXN0ZWQgb24gdGhpcyBwaWVjZSBvZiBnYXJiYWdlLiBUaGUgaHlwZSBzdXJyb3VuZGluZyB0aGlzIGJvb2sgYW5kIGZpbG0ganVzdCBoYXBwZW5zIHRvIGJlIGFuIGV4ZXJjaXNlIGluIGZ1dGlsaXR5LiBJIHRoaW5rIGl0IHdpbGwgZ28gZG93biBhcyBvbmUgb2YgdGhlIG1pc2d1aWRlZCBmaWxtcyBvZiBIb2xseXdvb2QuIEkgZG9uJ3QgYmVsaWV2ZSB0aGF0IHRoZSBiZWxvdmVkIGNoYXJhY3RlcnMgY3JlYXRlZCBieSBNYXJnYXJldCBNaXRjaGVsbCBzaG91bGQgaGF2ZSBiZWVuIHNvaWxlZCBieSB0aGUgaWRlYXMgYW5kIGludGVycHJldGF0aW9ucyBvZiBhbm90aGVyIHdyaXRlci4gVGhlIGZpbG0gYW5kIHRoZSBib29rIHNob3VsZCBiZSBvbiB0aGUgbGlzdCBvZiB3b3JzdCBpZGVhcyBjb25jZWl2ZWQgaW4gdGhlIHdvcmxkIG9mIHB1Ymxpc2hpbmcgYW5kIGZpbG0tbWFraW5nLiBUaGUgc2FkIHRoaW5nIGlzIHRoYXQgcGVvcGxlIGFjdHVhbGx5IG1hZGUgbW9uZXkgb2ZmIG9mIHRoaXMgdHJpcGUuKQAAAAAAAABACqcNCI8CEI8CIpUNSSBhbSBkZWNpZGVkbHkgbm90IGluIHRoZSB0YXJnZXQgYXVkaWVuY2UgZm9yIHRoaXMgZmlsbS4gSSBhbSBhIG1hbiBuZWFybHkgNTAgd2hvIGhhcyBvbmx5IHJlY2VudGx5IHN0dW1ibGVkIGFjcm9zcyB0aGUgd29ybGQgb2YgaW5kZXBlbmRlbnQgZmlsbS4gVGhpcyBoYXBwZW5lZCBxdWl0ZSBieSBhY2NpZGVudCwgd2l0aCB0aGUgZGlzY292ZXJ5IG9mIGEgbW92aWUgY2FsbGVkIENsZXJrcyBsYXRlIG9uZSBuaWdodCBvbiB0ZWxldmlzaW9uLiBUaGUgZmlyc3QgdHdvIHRoaW5ncyBJIG5vdGljZWQgYWJvdXQgdGhhdCBmaWxtIHdlcmUgdGhhdCBpdCB3YXMgMSkgdGVjaG5pY2FsbHkgYW1hdGV1cmlzaCBhbmQgMikgYnJpbGxpYW50bHkgd3JpdHRlbi4gV2hlbiBJIHJlYWQgYW4gaW50ZXJ2aWV3IHdpdGggdGhlIGRpcmVjdG9yIGluIHRoZSBsb2NhbCBwYXBlciBhbmQgaGUgc2FpZCB0aGF0IG9uZSBvZiBoaXMgaW5mbHVlbmNlcyB3YXMgQ2xlcmtzLCBJIHN0YXJ0ZWQgdG8gZ2V0IGludGVyZXN0aW5nLiBXaGVuIGhlIHNhaWQgaGlzIG1haW4gaW5mbHVlbmNlIHdhcyBUaGUgU3RhdGlvbiBBZ2VudCwgYSBtb3ZpZSBJJ2Qgc2VlbiBvbiBEVkQgYSB3ZWVrIHByaW9yLCBJIGRlY2lkZWQgSSBoYWQgdG8gZ28gYW5kIGNoZWNrIGl0IG91dC4gVGhlIHJlc3VsdCBjb3VsZCBiZSBkZXNjcmliZWQgYWxvbmcgdGhlIHNhbWUgbGluZXMgYXMgQ2xlcmtzLCBhbHRob3VnaCB0aGUgdHdvIGZpbG1zIGFyZSBub3RoaW5nIGFsaWtlIGNvbnRlbnQgd2lzZS4gQm90aCBmaWxtcyBzdWZmZXIgZnJvbSB0ZWNobmljYWwgZ2FmZmVzIHRoYXQgYXJlIG92ZXJjb21lIHRocm91Z2ggYW1hemluZyB3cml0aW5nLiBXaGVyZWFzIENsZXJrcyBpcyBhIGRheSBpbiB0aGUgbGlmZSBvZiBhIG1hbiB3aG8gaGFzIG5vdGhpbmcgaW4gaGlzIGxpZmUgYXQgYWxsIGFuZCBpcyBhZnJhaWQgdG8gYXNrIHRvdWdoIHF1ZXN0aW9ucyBhYm91dCBoaW1zZWxmIGFuZCBoaXMgc2l0dWF0aW9uLCBMZXNzIExpa2UgTWUgaXMgYWJvdXQgYSBtYW4gd2hvIHNlZW1pbmdseSBmb3JjZXMgaGltc2VsZiB0byBiZSBjb25zdGFudGx5IGJ1c3ksIGhlJ3MgYWx3YXlzIHJ1bm5pbmcgb25lIHdheSBvciBhbm90aGVyLCBmaWxsaW5nIGhpcyBsaWZlIHdpdGggbGl0dGxlIHRoaW5ncyBzbyB0aGF0IGhlIHdpbGwgbmV2ZXIgaGF2ZSB0byBkZWFsIHdpdGggdGhlIGJpZyBvbmVzLiBUaGUgdGhlbWVzIGFuZCBpZGVhcyBvZiB0aGlzIGZpbG0gYXJlIHN0cm9uZyBhbmQgcG9pZ25hbnQuIEkgY2FuIHRlbGwgZnJvbSB3YXRjaGluZyBpdCB0aGF0IG5vdCBtdWNoIGhhcyBjaGFuZ2VkIHNpbmNlIEkgd2FzIGdyb3dpbmcgdXAsIHlvdW5nIG1lbiBzdGlsbCBoYXZlIHRoZSBzYW1lIHByb2JsZW1zIHRoZXkgYWx3YXlzIGhhdmUuIFRoZSB3cml0ZXIgZHJlc3NlcyB1cCB0aGVzZSBwcm9ibGVtcyBhbmQgdGhlbWVzIGluIHRoZSBtb2Rlcm4gdmVybmFjdWxhciwgY3JhZnRzIHdvbmRlcmZ1bGx5IGhvbmVzdCBjaGFyYWN0ZXJzLCBhbmQgaGFzIHRoZW0gZG8gY29tcGxldGVseSBiZWxpZXZhYmxlIHRoaW5ncy4gQXMgZmFyIGFzIGluZGllIGNpbmVtYSBnb2VzLCB0aGlzIG1heSBub3QgYmUgcGVyZmVjdCBmcm9tIGEgdGVjaG5pY2FsIHN0YW5kcG9pbnQsIGJ1dCBmcm9tIGFuIGFydGlzdGljIG9uZSwgaXQgaXMgdmVyeSBjbG9zZS4pAAAAAAAAAEAKvAYIkAIQkAIiqgZJIGFncmVlIHdpdGggImpvaG5sZXdpcyIsIHdobyBzYWlkIHRoYXQgdGhlcmUgaXMgYSBsb3QgZ29pbmcgb24gYmV0d2VlbiB0aGUgbGluZXMgaW4gdGhpcyBmaWxtLiBXaGlsZSBJIGRvIHRoaW5rIHRoZSBwYWNpbmcgb2YgdGhpcyBmaWxtIGNvdWxkIGJlIGltcHJvdmVkLCBJIGRvIHRoaW5rIHRoYXQgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgY2hhcmFjdGVycyBpcyBmYXNjaW5hdGluZy48YnIgLz48YnIgLz5FeGFtcGxlcyA6IDxiciAvPjxiciAvPlBpZXJyZSBpcyBnb2luZyB0byBtYXJyeSBoaXMgY291c2luLCBldmVuIHRob3VnaCBoaXMgbG92ZSBmb3IgaGVyIHNlZW1zIHZlcnkgY291c2luLXkgPyA8YnIgLz48YnIgLz5QaWVycmUgYW5kIGhpcyBzdGVwbW90aGVyIGhhdmUgYSByYXRoZXIuLi5jdXJpb3VzIHJlbGF0aW9uc2hpcC48YnIgLz48YnIgLz5QaWVycmUsIEx1Y2llLCBhbmQgVGhpYmF1bHQgc2VlbSB0byBoYXZlIGEgdHJpYW5ndWxhciByZWxhdGlvbnNoaXAsIGFuZCB0aGUgYWN0dWFsIHBvaW50cyB0byB0aGUgdHJpYW5nbGUgYXJlIG5vdCBxdWl0ZSBjZXJ0YWluLi4uPGJyIC8+PGJyIC8+THVjaWUncyBicm90aGVyIGlzIGEgYml0IG9mIGEgZXVudWNoLCBvciBpcyBoZSA/IDxiciAvPjxiciAvPkFuZCBJc2FiZWxsZSwgd2hvIGlzIHNoZSByZWFsbHkgPz8gPGJyIC8+PGJyIC8+T3ZlcmFsbCwgSSB0aGluayBpdCB3YXMgd29ydGggbXkgdGltZS4gQW4gaW50ZXJlc3RpbmcgZmlsbSwgYW5kIG9uZSB0aGF0IG1ha2VzIG1lIHdhbnQgdG8gcmVhZCBNZWx2aWxsZS4pAAAAAAAAAEAKmwUIkQIQkQIiiQVJIGFic29sdXRlbHkgaGF0ZSB0aGlzIHByb2dyYW1tZSwgd2hhdCBraW5kIG9mIHBlb3BsZSBzaXQgYW5kIHdhdGNoIHRoaXMgZ2FyYmFnZT8/IE9LIG15IGRhZCBhbmQgbXVtIGxvdmUgaXQgbG9sIGJ1dCBpIG1ha2Ugc3VyZSBJJ20gd2VsbCBvdXQgb2YgdGhlIHJvb20gYmVmb3JlIGl0IGNvbWVzIG9uLiBJdHMgc28gZGVwcmVzc2luZyBhbmQgZHJlYXJ5IGJ1dCB0aGUgd29yc3QgdGhpbmcgYWJvdXQgaXQgaXMgdGhlIGFjdGluZyBpIGNhbnQgc3RhbmQgYWxsIGRldGVjdGl2ZSBwcm9ncmFtbWVzIHN1Y2ggYXMgdGhpcyBiZWNhdXNlIHRoZSBkZXRlY3RpdmVzIGFyZSBzbyB3b29kZW4gYW5kIGhlYXJ0bGVzcy4gV2hhdCBoYXBwZW5lZCB0byBkZXRlY3RpdmUgcHJvZ3JhbW1lcyB3aXRoIHJlYWwgbXlzdGVyeT8/PyBJIG1lYW4gd2hvIHdhbnRzIHRvIGtub3cgd2hhdCBoYXBwZW5lZCB0byBmaWN0aW9uYWwgY2hhcmFjdGVycyB3ZSBrbm93IG5vdGhpbmcgYWJvdXQgdGhhdCBkaWVkIG92ZXIgMjAgeWVhcnMgYWdvPz8/IEkgd2lzaCB0aGUgYmJjIHdvdWxkIHB1dCBtb3JlIGNvbWVkeSBvbiBiYmMxIGNvcyBub3cgd2l0aCB0aGUgdmljYXIgb2YgZGlibGV5IGZpbmlzaGVkIHRoZXJlIGlzIG1vcmUgcm9vbSBmb3IgY3JhcCBsaWtlIHRoaXMuKQAAAAAAAABACvkCCJICEJICIucCSSBFbmpveWVkIFdhdGNoaW5nIFRoaXMgV2VsbCBBY3RlZCBNb3ZpZSBWZXJ5IE11Y2ghSXQgV2FzIFdlbGwgQWN0ZWQsUGFydGljdWxhcmx5IEJ5IEFjdHJlc3MgSGVsZW4gSHVudCBBbmQgQWN0b3JzIFN0ZXZlbiBXZWJlciBBbmQgSmVmZiBGYWhleS5JdCBXYXMgQSBWZXJ5IEludGVyZXN0aW5nIE1vdmllLEZpbGxlZCBXaXRoIERyYW1hIEFuZCBTdXNwZW5zZSxGcm9tIFRoZSBCZWdpbm5pbmcgVG8gVGhlIFZlcnkgRW5kLkkgUmVjY29tZW5kIFRoYXQgRXZlcnlvbmUgVGFrZSBUaGUgVGltZSBUbyBXYXRjaCBUaGlzIE1hZGUgRm9yIFRlbGV2aXNpb24gTW92aWUsSXQgSXMgRXhjZWxsZW50IEFuZCBIYXMgR3JlYXQgQWN0aW5nISEpAAAAAAAAAEAK0wQIkwIQkwIiwQRIdW1tLCBhbiBJdGFsaWFuIG1vdmllIHN0YXJyZWQgYnkgRGF2aWQgaGFzc2VsaG9mZiBhbmQgTGluZGEgQmxhaXIsIEkgd2FzbsK0dCBleHBlY3RpbmcgdmVyeSBtdWNoLCB0byBiZSBob25lc3QgYW5kIGluIGZhY3QsIEkgdG9vayBldmVuIGxlc3MgdGhhbiBJIHdhcyBleHBlY3RpbmcuIEl0IGRvZXNuwrR0IG1lYW4gdGhpcyBtb3ZpZSBpcyB0aGUgd29yc3QgSSBoYXZlIHNlZW4gYmVjYXVzZSBJIGhhdmUgd2F0Y2hlZCB3b3JzZSB0aGluZ3MgdGhhbiB0aGlzIGJ1dCB0aGUgcGxvdCB3YXMgbW9zdCBvZiB0aGUgdGltZXMgY29uZnVzaW5nIGFuZCB1bmludGVyZXN0aW5nIGFuZCBzb21lIGdvb2QgZ29yZSBzY2VuZXMgYXJlIHRoZSBvbmx5IHRoaW5nIHNhdmluZyB0aGlzLiBBcGFydCBmcm9tIHRoYXQgeW91IGFyZSBnb2luZyB0byBsb3ZlIHNvbWUgc3BlY2lhbCBlZmZlY3RzLCB0aGV5IGFyZSByZWFsbHkgY2hlZXN5IGFuZCBiYWQuIE5vdyBJIG9ubHkgd2FudCB0byB3YXRjaCAiVHJvbGwgMyIgYnkgdGhpcyBzYW1lIGRpcmVjdG9yLCBzdXJlIGl0IGlzIG5vdCBnb2luZyB0byBiZSB3b3JzZSB0aGFuIHRoYXQuKQAAAAAAAABACo8FCJQCEJQCIv0ESG93IHBvaW50bGVzcywgaGlkZW91cyBjaGFyYWN0ZXJzIGFuZCBib3JpbmcgZmlsbS4gU2F2ZWQgYnkgYnJpZWYgc2V4IHNjZW5lcywgbWFkIHdpdGNoLCBnb3JnZW91cyBkZXNlcnQgaXNsYW5kIGFuZCBCcm9va3MgYm9keS4gVGhlIHBsb3QgaXMgdGVudW91cywgdGhlIGNoYXJhY3RlcnMgYXJlIHNoYWxsb3cgYW5kIHVubGlrZWFibGUuIEhhdmluZyBzYWlkIHRoYXQgSSBkaWQgbWFuYWdlIHRvIHdhdGNoIGl0IGFsbCwgbWFpbmx5IGJlY2F1c2UgSSB3YXMgdG90YWxseSB0cmFuc2ZpeGVkIGJ5IHRoZSBqaWdnbGluZyBhbmQga2luZCBvZiBob3BpbmcgdGhhdCBoZXIgY2hhcmFjdGVyIHdvdWxkIGNvbWUgZ29vZCBpbiB0aGUgZW5kLiBUaGUgZmlsbSB3YXMgd2VsbCBzaG90LCB3ZWxsIGRpcmVjdGVkIGJ1dCBwZXJoYXBzIHRoZSBjYXN0aW5nIGxldCBpdCBkb3duIGluIHNvbWUgd2F5cy4gRGlzYXBwb2ludGluZy4gUmVhbGx5IHN1bW1lZCB0aGUgcmV2aWV3IHVwIGluIHRoZSBmaXJzdCBsaW5lIGJ1dCB0aGlzIHdlYnNpdGUgZGljdGF0ZXMgdGhhdCB5b3UgbmVlZCB0byB3cml0ZSAxMCBsaW5lcyBtaW5pbXVtLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gc3BlbmQgdGhlIHRpbWUgd2F0Y2hpbmcgYW5vdGhlciBmaWxtLikAAAAAAAAAQAq/BgiVAhCVAiKtBkhvdyBtdWNoIGRvIEkgbG92ZSB0aGlzIGZpbG0/ISBOb3cgSSdtIG5vdCBhIGZhbiBvZiBiYWQgZmlsbXMsIGJ1dCBJIGRvIGxvdmUgYSBmaWxtIHRoYXQgaXMgc28gYmFkIGl0J3MgZ29vZC4gVGhpcyBpcyBvbmUgb2YgdGhvc2UuIEp1YW4gUGFibG8gRGkgUGFjZSBoYXMgYSBncmVhdCBidXR0LCBsb29rcyBmYWIgb24gc2NyZWVuLCBhbmQgZGVmaW5pdGVseSBkb2Vzbid0IG1ha2UgYSBiYWQgdHVybiBhdCBoaXMgYWN0aW5nIGRlYnV0IChJIGJlbGlldmUpLiBCaWxseSBaYW5lIGlzIHN1aXRhYmx5IG1lYW4gYW5kIG1vb2R5LCB0aG91Z2ggSSBzdGlsbCBjb25zdGFudGx5IGZlZWwgdGhhdCB0aGVyZSBpcyBzb21ldGhpbmcgbW9yZSBpbiBoaW0uIEkgZmVsdCBpdCBpbiBUaXRhbmljLCB0aGUgbG9vayBvbiBoaXMgZmFjZSB3aGVuIExhIFdpbnNsZXQgc3BhdCBvbiBoaW0gZm9yIGV4YW1wbGUsIHRvdGFsbHkgYnJva2VuLCBzaG9ja2VkLCBhbmQgcHV0LWRvd24gLi4uIGZpZXJjZSEgS2VsbHkgQnJvb2sgaXMgYSBwcmV0dHkgZmFjZSAuLi4gbm8gc2VyaW91c2x5LCBJIHRoaW5rIHRoYXQncyBpdCEgSXQncyB3b3J0aCBjYXRjaGluZyB0aGlzIHRvIHNlZSBvbmUgcmVhbGx5IGhvdCBndXksIHNvbWUgYmlnIGJyYSBmaWxsZXJzIGZyb20gQnJvb2ssIG5hc3R5IGdyb3dsaW5nIGZyb20gQmlsbHksIGxhdWdoIGF0IHRoZSBkaWFsb2d1ZSwgcmV2ZWwgaW4gdGhlIHNjZW5lcnkgYW5kIG1hZG5lc3Mgb2YgdGhlIHdob2xlIGFmZmFpciAuLi4gSSdtIGdvbmEgZ28gd2F0Y2ggaXQgYWdhaW4gbm93IC0geWVzLCBJIGJvdWdodCBpdCEhISkAAAAAAAAAQArUBAiWAhCWAiLCBEhvcnJpYmxlIG1vdmllLiBUaGlzIG1vdmllIGJlYXQgb3V0IHJldmVuZ2Ugb2YgdGhlIGxpdmluZyB6b21iaWVzIGZvciB0aGUgV09SU1QgbW92aWUgSSBoYXZlIGV2ZXIgc3VmZmVyZWQgdGhyb3VnaC4gV2hhdCB0aGUgIUAkJSB3ZXJlIHRoZSBtb3JvbnMgd2hvIG1hZGUgdGhpcyBmaWxtIHRoaW5raW5nLiBXYXMgaXQgc3VwcG9zZWQgdG8gYmUgc2NhcnkuIEJlY2F1c2UgbWFuIGxldCBtZSB0YWxsIHlvdSBpdCB3YXNuJ3QuIEl0IHdhcyBzbyBkdW1iIGl0IHdhc24ndCBmdW5ueS4gV2UgYWxsIGtub3cgdGhhdCB0cm9waWNhbCBpc2xhbmRzIGFyZSB0aGUgbmF0dXJhbCBodW50aW5nIGdyb3VuZHMgZm9yIGtpbGxlciBzbm93bWVuLiBBbmQgdGhvc2Ugc3R1cGlkIGJhYnkgc25vd2JhbGxzLiBTdHVwaWQgU3R1cGlkIFN0dXBpZCBTdHVwaWQgU3R1cGlkIFN0dXBpZCBTdHVwaWQgU3R1cGlkLiBGYWtlIHNub3cgYW5kIGxvdXN5IGFjdG9ycy4gT0ggYW5kIGZyb3N0IGxvb2tzIG5vdGhpbmcgbGlrZSBoZSBkb2VzIG9uIHRoZSBib3guIERPIE5PVCBXQVNURSBZT1VSIFRJTUUuIFJFbnQgaXQgYW5kIGRlc3Ryb3kgaXQuKQAAAAAAAABACukFCJcCEJcCItcFSG9taWNpZGU6IFRoZSBNb3ZpZSBwcm92ZWQgdG8gYmUgYSBnb29kIHdyYXAtdXAgdG8gYSB3ZWxsLXdyaXR0ZW4sIHdlbGwtZGlyZWN0ZWQsIGFuZCB3ZWxsLWFjdGVkIHNlcmllcy4gTG9vc2UgZW5kcyB3ZXJlIHRpZWQgdXAgdGhhdCB3ZXJlbid0IHByb3Blcmx5IGFkZHJlc3NlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaW5hbCBzZWFzb24uIFRoZSBlbnRpcmUgc2VyaWVzLCBhbmQgZXNwZWNpYWxseSB0aGUgbW92aWUsIHByb3ZpZGVkIGEgbGlmZS1saWtlIGxvb2sgYXQgbGlmZSAoYW5kIGRlYXRoKSBpbiBCYWx0aW1vcmUsIGEgY3VsdHVyYWxseSB1bmlxdWUgY2l0eSB3aXRoIGFuIGV4dHJlbWVseSBoaWdoIG11cmRlciByYXRlLiBNeSBhdHRyYWN0aW9uIHRvIHRoZSBzZXJpZXMgYmVnYW4gbG9uZyBiZWZvcmUgSSBtb3ZlZCB0byBCYWx0aW1vcmUsIGJ1dCBvbmNlIEkgZXhwZXJpZW5jZWQgbGlmZSBoZXJlIGZvciBteXNlbGYsIEkgcmVhbGl6ZWQgaG93IHJlYWxpc3RpYyBpdCB3YXMuIEFuZCB0aGUgbW92aWUgY2VydGFpbmx5IHJldGFpbmVkIHRoYXQgc3Bpcml0LiBJIHdpbGwgY2VydGFpbmx5IG1pc3MgbmV3IG9yaWdpbmFsIGVwaXNvZGVzIG9mIHRoZSBzZXJpZXMsIGJ1dCBhbSB2ZXJ5IGdyYXRlZnVsIHRvIE5CQyBhbmQgdGhlIHByb2R1Y2VycyBhbmQgY2FzdCBmb3IgZ2l2aW5nIHVzIG9uZSBsYXN0IGdsaW1wc2UgYXQgdGhlIGRhcmsgc2lkZSBvZiBDaGFybSBDaXR5LikAAAAAAAAAQAqKBgiYAhCYAiL4BUhvbHkgZnJlYWtpbmcgR29kIGFsbC1mcmVha2luZy1taWdodHkuIFRoaXMgbW92aWUgd2FzIHNvIGJhZCwgSSB0aG91Z2h0IEkgd2FzIG9uIGRydWdzLiBJbiBhIGJhZCB3YXkuLi4gVGhlIGNoYXJhY3RlciBhY3RpbmcgaXMgdGhlIHBvb3Jlc3QgdGhpbmcgSSd2ZSBzZWVuIGluIHF1aXRlIHNvbWUgdGltZS4gVGhpcyBtb3ZpZSB3YXMgbW9yZSBha2luIHRvIExvcmQgb2YgdGhlIEctU3RyaW5ncywgSU1ITyhpdCdzIGEgcmVhbCBtb3ZpZSkuIE1vc3Qgb2YgdGhlIG1vdmllIGFwcGVhcmVkIHRvIGJlIGRvbmUgb24gYSBob3JyaWJsZSBncmVlbiBzY3JlZW4uIE15IGZhdm9yaXRlIHBhcnQgd2FzIHdoZW4gdGhleSBhcmUgaW4gdGhlIGNhcnJpYWdlLCBhbmQgeW91IGNhbiB0ZWxsIHRoZXJlJ3Mgbm8gaG9yc2UuIFRoZXkncmUgZmxlZWluZyBmcm9tIGFsaWVuIG1vbnN0ZXJzLCBhbmQgZ29pbmcgYWJvdXQgdGhlIHNhbWUgc3BlZWQgYXMgYSBzd2lmdCBqb2cuIFRoZW4gaXQgc3dpdGNoZXMgdG8gYSBmYXItc2hvdCB3aXRoIGEgcmlkaWN1bG91cyBDRyBob3JzZS4gQW5kIHRoZSBDRyBpbiBnZW5lcmFsIHNlZW1zIHRvIGJlIHN1Yi1wYXIgdG8gMTk5MidzIEJleW9uZCB0aGUgTWluZCdzIEV5ZS4gSSBtZWFuLCBDb21lIG9uLCByZWFsbHkuIEl0IGZlbHQgbGlrZSBhIGhvcnJpYmxlIGVwaXNvZGUgb2YgSGVyY3VsZXMsIG9ubHkgd2l0aG91dCBLZXZpbiBTb3JibyB0aGVyZSB0byBzYXZlIHRoZSBkYXkuIFdvcnN0LiBNb3ZpZS4gRXZlci4pAAAAAAAAAEAKqQYImQIQmQIilwZIb2x5IGNvdywgd2hhdCBhIHBpZWNlIG9mIHNoKnQgdGhpcyBtb3ZpZSBpcy4gSSBkaWRuJ3QgaG93IHRoZXNlIGZpbG1tYWtlcnMgY291bGQgdGFrZSBhIDI1MCB3b3JkIGJvb2sgYW5kIHR1cm4gaXQgaW50byBhIG1vdmllLiBJIGd1ZXNzIHRoZXkgZGlkbid0IGtub3cgZWl0aGVyISBJIGRvbid0IHJlbWVtYmVyIGFueSBmYXJ0aW5nIG9yIGJlbGNoaW5nIGluIHRoZSBib29rLCBkbyB5b3U/PGJyIC8+PGJyIC8+VGhleSB0b29rIHRoaXMgYWxsIHRpbWVzIGNoaWxkcmVucyBjbGFzc2ljLCBhZGRlZCBzb21lIGZhcnRpbmcsIGJlbGNoaW5nIGFuZCBzZXh1YWwgaW51aW5kbywgYW5kIHByb3N0aXR1dGVkIGl0IGludG8gYSBLQUtBIGpva2UuIFRoaXMgc2hvdWxkIGdpdmUgeW91IGEgZ29vZCBpZGVhIG9mIHdoYXQgdGhlc2UgaG9sbHl3b29kIHByb2R1Y2VycyB0aGluayBsaWtlLiBJIGhhdmUgdG8gc2F5LCB2aXN1YWxseSBpdCB3YXMgaW50ZXJlc3RpbmcsIGJ1dCB0aGUgYnJpbGxpYW50IHZpc3VhbCBzdG9yeSBpcyBydWluZWQgYnkgdG9pbGV0IGh1bW9yIChpZiB5b3UgZXZlbiB0aGluayB0aGF0IGtpbmQgb2YgdGhpbmcgaXMgZnVubnkpIEkgRE9OJ1Qgd2FudCB0aGUga2lkcyB0aGF0IEkga25vdyB0byB0aGluayBpdCBpcy48YnIgLz48YnIgLz5Eb24ndCB0YWtlIHlvdXIga2lkcyB0byBzZWUsIGRvbid0IHJlbnQgdGhlIERWRC4gSSBob3BlIHRoZSBnaG9zdCBvZiBEb2N0b3IgU3Vlc3MgZ2hvc3QgY29tZXMgYW5kIGhhdW50cyB0aGUgcGVvcGxlIHRoYXQgbWFkZSB0aGlzIG1vdmllLikAAAAAAAAAQArKEQiaAhCaAiK4EUhlbGxvIGl0IGlzIEkgRGVycmljayBDYW5ub24gYW5kIEkgd2VsY29tZSB5b3UgdG8gdGhlIGZpcnN0IGV2ZXIgQ2Fubm9uaXRlIHJldmlldyBzaG93LiBNeSBtb3ZpZSBmb3IgdGhpcyB3ZWVrIHdhcyBkZWJhdGFibGUsIHdoYXQgcm91dGUgd2hhdCBtb3ZpZSwgd2hhdCBleGNlbGxlbnQgZm91ciBzdGFyIGVwaWMgd291bGQgSSBjaG9vc2UsIGd1ZXNzIHdoYXQgSSBkZWNpZGVkIHRvIHB1bGwgYSBvbmUgZWlnaHR5IGFuZCBnbyB0aGUgb3RoZXIgcm91dGUsIEkndmUgZGVjaWRlZCB0byByZXZpZXcgYSBtb3ZpZSBzbyBhdHJvY2lvdXMgdGhhdCBpdCB0b3RhbGx5IGtpbGxlZCB3aGF0IGNvdWxkIGhhdmUgYmVlbiBhIHZlcnkgdW5pcXVlIGNvbmNlcHQuIFRoZSBtb3ZpZSBJIHdpbGwgcmV2aWV3IHRvZGF5IGlzIEphY2sgRnJvc3QgVHdvIHJldmVuZ2Ugb2YgdGhlIG11dGFudCBraWxsZXIgc25vd21hbi4gVGhlIFN0YXJzIGluIHRoaXMgbW92aWUgaW5jbHVkZSBDaHJpc3RvcGhlciBBbGxwb3J0IGFzIFNhbSBUaWxsZXIsIEVpbGVlbiBTZWVsZXkgYXMgQW5uZSBUaWxsZXIsIE1hcnNoYSBDbGFyayBhcyBNYXJsYSBEYXZpZCBBbGxlbiBCcm9va3MgYXMgQWdlbnQgTWFubmVycywgU2VhbiBQYXRyaWNrIE11cnBoeSBhcyBDYXB0YWluIEZ1biwgUmF5IENvb25leSBhcyB0aGUgQ29sb25lbCBhbmQgU2NvdHQgTWFjRG9uYWxkIGFzIHRoZSBraWxsZXIgc25vd21hbiBoaW1zZWxmIEphY2sgRnJvc3QuPGJyIC8+PGJyIC8+SXQncyBoYXJkIHRvIGJlbGlldmUgdGhhdCB0aGlzIG1vdmllIHdhcyBpbiB0aGUgc2FtZSBzZXJpZXMgdGhhdCBnYXZlIHVzIHRoZSBpbmNyZWRpYmx5IGZ1bm55IEphY2sgRnJvc3QobG92ZWQgdGhlIGNhcnJvdCBzY2VuZSksYnV0IGl0J3MgZXZlbiBoYXJkZXIgdG8gYmVsaWV2ZSB0aGF0IHRoaXMgaXMgdGhlIGV4YWN0IHNhbWUgY2FzdC4gVGhlIG1vdmllIHdhcyBydWluZWQgZm9yIG1lIGFzIHNvb24gYXMgdGhleSBhcnJpdmVkIG9uIHRoZSBpc2xhbmQgYW5kIENhcHRhaW4gRnVuIHdhcyBpbnRyb2R1Y2VkLiBXaGF0IHdhcyB0aGUgcG9pbnQgb2YgaGlzIGNoYXJhY3RlciBhbmQgaG93IGRpZCBoZSBmaXQgaW50byBhIGhvcnJvciBtb3ZpZT9UaGUgb25seSBwb3NzaWJsZSByZWFzb24gSSBjb3VsZCBzZWUgd2FzIHRoYXQgdGhleSB3YW50ZWQgdG8gZ2l2ZSB1cyBhIGNoYXJhY3RlciB0aGF0IHdhcyB0b3RhbCBraWxsZXIgc25vd21hbiBmb2RkZXIuIFNhbSBUaWxlciBzZWVtZWQgbW9yZSBwYXJhbm9pZCB0aGVuIGhlIGRpZCBpbiB0aGUgb3JpZ2luYWwsIGhpcyBiYWJibGluZyBhYm91dCBhbnRpIGZyZWV6ZSB3YXMgb25lIG9mIHRoZSBtb3N0IHBhdGhldGljIGRpc3BsYXkgSSBoYWQgc2VlbiBpbiBhIG1vdmllLiBIaXMgd2lmZSBob3dldmVyIHdhcyBvbmUgb2YgdGhlIGZldyBicmlnaHQgc3BvdHMuIFNoZSBwbGF5ZWQgaGVyIHJvbGUgYXMgdGhlIG1haW4gd29tYW4gdG8gYSBoaWx0LiBTaGUgd2FzIGEgdm9pY2Ugb2YgcmVhc29uIGluIGZpbG0gb2YgcHVyZSBpZGlvY3kuIFRoZSBzY2VuZSB3aGVyZSBzaGUgZmlndXJlcyBvdXQgaG93IHRvIGtpbGwgdGhlIHNub3dtZW4gd2FzIG9uZSBvZiB0aGUgbW9zdCBhbnRpY2lwYXRlZCBwYXJ0cyBvZiB0aGUgbW92aWUuIFJheSBNYWNEb25hbGQgb25jZSBhZ2FpbiBkaWQgYSBncmVhdCBqb2IgYXMgSmFjayBGcm9zdCBkZXNwaXRlIHdoYXQgaGUgd2FzIGdpdmVuLiBJZiBpdCB3YXNuJ3QgZm9yIHN1Y2ggd2VhayBjaGFyYWN0ZXJzIGhlIGNvdWxkIGhhdmUgYmVlbiBpbW1vcnRhbGl6ZWQgbGlrZSBDaHVja3ksRnJlZGR5IGFuZCBKYXNvbi4gTGF1Z2ggaWYgeW91IG11c3QgYnV0IHdoZW4gaXQgY29tZXMgZG93biB0byBpdCBKYWNrIEZyb3N0IGhhZCBzcHVuaywgaGUgaGFkIGh1bW9yLCBhbmQgbW9zdCBpbXBvcnRhbnRseSBoZSBoYWQgYW4gdW5kb3VidGFibGUgdmljaW91cyBzdHJlYWsuPGJyIC8+PGJyIC8+VGhpcyBtb3ZpZSBjb3VsZCBoYXZlIGJlZW4gc28gbXVjaCBtb3JlLCBpdCBjb3VsZCBoYXZlIGJlZW4gYSBjb250aW51YXRpb24gb2YgYSBncmVhdCBmcmFuY2hpc2UsIGluc3RlYWQgYW55IHBsYW5zIHRvIG1ha2UgYSBKYWNrIEZyb3N0IHRocmVlIGhhdmUgYmVlbiBjYW5jZWxlZC48YnIgLz48YnIgLz5UaGlzIG1vdmllIGdldHMgYSB0d28gb3V0IG9mIHRlbiBmb3IgbWUsIGFuZCBpdCdzIGx1Y2t5IHRoYXQgaXQgZXZlbiBnZXRzIGEgb25lLikAAAAAAAAAQAr/DQibAhCbAiLtDUhhdmluZyBiZWVuIHBsZWFzYW50bHkgc3VycHJpc2VkIGJ5IFNhbmRyYSBCdWxsb2NrJ3MgcGVyZm9ybWFuY2UgaW4gTWlzcyBDb25nZW5pYWxpdHksIEkgZGVjaWRlZCB0byBnaXZlIE11cmRlciBCeSBOdW1iZXJzIGEgc2hvdC4gV2hpbGUgZGVjZW50IGluIHBsdWNreSwgc2VsZi1lZmZhY2luZyByb2xlcywgTXMuIEJ1bGxvY2sncyBwZXJmb3JtYW5jZSBpbiAic2VyaW91cyIgcm9sZXMgKHNlZSBIb3BlIEZsb2F0cywgU3BlZWQgMiwgMjggRGF5cykgbGVhdmUgbXVjaCB0byBiZSBkZXNpcmVkLiBIZXIgY2hhcmFjdGVyIGlzIGF0IHRoZSBzYW1lIHRpbWUgb21uaXNjaWVudCwgY29uZnVzZWQsIGFuZCBzZXh1YWxseSBtYWxhZGp1c3RlZCAodGhlIHN1Yi1wbG90IG9mIFNhbmRyYSdzIHBhc3QgY29tZXMgYWNyb3NzIGFzIG5lZWRsZXNzIGZpbGxlciB0aGF0IGRvZXMgbGl0dGxlIHRvIGRldmVsb3AgaGVyIGFscmVhZHkgc2hhbGxvdyBjaGFyYWN0ZXIpLiBUaGUgdHdvIHRlZW5hZ2UgYm95cyBnYXZlIGRlY2VudCBwZXJmb3JtYW5jZXMsIGFsdGhvdWdoIHRoZWlyIGZvcmVuc2ljcyBleHBlcnRpc2UgYW5kIGNhdGNoLW1lLWlmLWNhbiBhdHRpdHVkZSBpcyBiZWxpZWQgYnkgc3R1cGlkIGVycm9ycyB0aGF0IHNjcmVhbSAiV2UgZGlkIGl0ISIgQ2hyaXMgUGVubiBhcyB0aGUgYWxsLXRvby1vYnZpb3VzIHN1c3BlY3QgaXMgd2FzdGVkIGhlcmUsIGFzIGlzIEJlbiBDaGFwbGluJ3MgdG9rZW4gcGFydG5lci9sb3ZlIGludGVyZXN0IGNoYXJhY3Rlci48YnIgLz48YnIgLz4qKipTcG9pbGVycyBBaGVhZCoqKiBNZWRpb2NyZSBhY3RpbmcgYXNpZGUsIHRoZSBiaWdnZXN0IGZsYXdzIGNhbiBiZSB0cmFjZWQgdG8gYSBUVi1vZi10aGUtd2VlayBwbG90IHRoYXQgbmV2ZXIgaGFzIHlvdSB0b3RhbGx5IGJ1eWluZyBpbnRvIHRoZSBtdXJkZXIgbW90aXZlcyBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCBhcyBtZW50aW9uZWQsIHRoZSBzdHVwaWQgZXJyb3JzICh2b21pdGluZyB1cCBhIHJhcmUgZm9vZCBvbiB0aGUgbXVyZGVyIHNjZW5lLCBhbiBhbGwgdG9vIGNvbnZlbmllbnQgYW5kIGZyYW1pbmcgb2YgdGhlIHNjaG9vbCBqYW5pdG9yLCB0aGUgdHdvIGJveXMgaGFuZ2luZyBvdXQgdG9nZXRoZXIgaW4gcHVibGljLCBhIGNvbnZlbmllbnQgbG92ZSBpbnRlcmVzdCB0byBjYXVzZSBmcmljdGlvbiwgZXRjLiBldGMpIGNhdXNlIHRoZSB2aWV3IHRvIGdvIGZyb20gYmVpbmcgaW50cmlndWVzIHRvIGJlaW5nIGJvcmVkIGFuZCBkaXNhcHBvaW50ZWQgYnkgdGhlIG11cmRlcmVycy4gVGhlIGVuZGluZyB3YXMgc3RyaWN0bHkgIkJ5IHRoZSBOdW1iZXJzIiBhbmQgd2FzIHByb2JhYmx5IHRoZSBtb3N0IGRpc2FwcG9pbnRpbmcgYXNwZWN0IG9mIHRoZSBtb3ZpZS4gVXNpbmcgdGhlIG5vdy1jbGljaGVkIHRhY3RpYyBvZiBhbG1vc3Qgc2hvd2luZyB0aGUgY2xpbWFjdGljIHNjZW5lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbG0sIGFuZCB0aGVuIGZpbGxpbmcgdGhlIGF1ZGllbmNlIGluIGhvdyB3ZSBhcnJpdmVkIGF0IHRoYXQgbW9tZW50LCB0aGUgZmluYWwgc2NlbmVzIHN1cnByaXNlIG5vIG9uZSBhbmQgbGFja2VkIGFueSBvZiB0aGUgc28tY2FsbGVkIGludGVsbGlnZW5jZSB0aGUgZmlsbSBwdXJwb3J0ZWQgdG8gYXJyaXZlIGF0IGl0J3MgY29uY2x1c2lvbi4gQSBzb21ld2hhdCBwcm9taXNpbmcgY29uY2VwdCwgYnV0IHBvb3JseSBleGVjdXRlZCBhbmQgd2VhayBpbiBuZWFybHkgZXZlcnkgd2F5LiAqIG91dCBvZiAqKioqLikAAAAAAAAAQArACQicAhCcAiKuCUhhdmluZyBhbHJlYWR5IHNlZW4gdGhlIG9yaWdpbmFsICJKYWNrIEZyb3N0IiwgSSBuZXZlciB0aG91Z2h0IHRoYXQgIkphY2sgRnJvc3QgMiIgd291bGQgYmUgYXMgYWJzdXJkIGFzIGl0IGlzLiBCb3kgd2FzIEkgd3JvbmchIFRoZW4gYWdhaW4sIEEtUElYIG1vdmllcyBoYXZlIGEgd2F5IG9mIHNob3dpbmcgdW5iZWxpZXZhYmx5IGJhZCBtYXRlcmlhbCwgZXZlbiB3b3JzZSB0aGFuIHlvdSBtaWdodCBleHBlY3QuIEkgYmVsaWV2ZSB0aGlzIGlzIHRoZSBmaXJzdCBBLVBJWCBzZXF1ZWwsIGFuZCBpdCBtYXkgYmUgYW4gaW5kaWNhdGlvbiBvZiB3aGF0IHRvIGV4cGVjdCBpbiB0aGUgZnV0dXJlOiBtb3JlIEEtUElYIHNlcXVlbHMuPGJyIC8+PGJyIC8+SXQncyBoYXJkIHRvIHdhdGNoIHRoaXMgd2l0aG91dCBsYXVnaGluZywgZXNwZWNpYWxseSBkdXJpbmcgdGhlIGxhdGVyIHBhcnRzIG9mIHRoZSBtb3ZpZSBpbiB3aGljaCBKYWNrIEZyb3N0J3Mgb2Zmc3ByaW5nICh3aGljaCBhcmUgZXNzZW50aWFsbHkgc25vd2JhbGxzIHdpdGggZXllcywgYXJtcywgYSBtb3V0aCBhbmQgc2hhcnAgdGVldGgpIHN0YXJ0IGtpbGxpbmcgcGVvcGxlIHdpdGggdGhlIHR5cGljYWwgY29tZWRpYyBkaWFsb2d1ZSBhbmQgc2lsbHkgdm9pY2VzIHRvIGdvIHdpdGggaXQuIFRoZXkgYXJlIHNob3duIGJvdGggYXMgcHVwcGV0cyAod2l0aCBhIHN0aWNrIHVuZGVybmVhdGggdG8gbW92ZSB0aGVtKSBhbmQgYXMgY29tcHV0ZXIgYW5pbWF0aW9uLCB3aGljaCBJIGhhdmUgdG8gc2F5IGxvb2tzIHZlcnkgY2hlZXN5LiBUaGUgY29tcHV0ZXIgYW5pbWF0aW9uIHN1cnByaXNlZCBtZSwgYXMgdGhlIGZpcnN0ICJKYWNrIEZyb3N0IiBoYWQgbm8gc3VjaCBlZmZlY3RzLjxiciAvPjxiciAvPkknZCBzdHJvbmdseSByZWNvbW1lbmQgdGhhdCB5b3Ugc2VlIHRoZSBvcmlnaW5hbCAiSmFjayBGcm9zdCIgYmVmb3JlIHNlZWluZyB0aGlzIG9uZSAoYm90aCBvZiB3aGljaCBpdCB3b3VsZCBiZSBwcmVmZXJhYmxlIHRvIHdhdGNoIHdpdGggYSBncm91cCBvZiBmcmllbmRzKSB0byBnZXQgdGhlIGZ1bGwgYW11c2VtZW50IG91dCBvZiBpdCwgYW5kIGJlY2F1c2UgaXQgd291bGQgbWFrZSBtb3JlIHNlbnNlICgic2Vuc2UiIGJlaW5nIGEgcmVsYXRpdmUgdGVybSkuPGJyIC8+PGJyIC8+Tm93IG9ubHkgaWYgdGhlcmUgd2FzICJVbmNsZSBTYW0gMiIuLi4pAAAAAAAAAEAK2QgInQIQnQIixwhIYXJkIHRvIGJlbGlldmUgdGhhdCBkaXJlY3RvciBCYXJiZXQgU2Nocm9lZGVyIG9uY2UgZGlkIHRoZSBtYWplc3RpYyBhbmQgdmVyeSBmdW5ueSBNYWl0cmVzc2UgKDE5NzYpLCBhbmQgbm93IG9ubHkgc2VlbXMgdG8gZG8gImJ5IHRoZSBudW1iZXJzIiBIb2xseXdvb2QgdGhyaWxsZXJzLjxiciAvPjxiciAvPlRoaXMgaXMgdmVyeSBsaWdodHdlaWdodCBKb2huIEdyaXNoYW0gbWF0ZXJpYWwsIGNyb3NzZWQgd2l0aCB0aGUgcGxvdCBvZiBhIFRWIG1vdmllLiBCdWxsb2NrIGlzIENhc3MgTWF5d2VhdGhlciwgYSBmZWlzdHkgYW5kIGluZGVwZW5kZW50IGNyaW1lIGludmVzdGlnYXRvciBzcGVjaWFsaXNpbmcgaW4gc2VyaWFsIGtpbGxlcnMuIEJlbiBDaGFwbGluIGlzIGhlciByZXNlcnZlZCBwb2xpY2UgcGFydG5lciBTYW0gS2VubmVkeSwgYW5kIHRvZ2V0aGVyIHRoZXkgbWFrZSBhbiB1bmNvbWZvcnRhYmxlIGR1by4gTm90IGdvb2QsIHdoZW4gdHdvIHVuYmFsYW5jZWQgY29sbGVnZSBtYWxhZHJpb3RzIChHb3NsaW5nIGFuZCBQaXR0KSBkZWNpZGUgdG8gc2VuZCB0aGVtIG9uIGEgd2lsZCBnb29zZSBjaGFzZSAtIGJ5IHBsYW50aW5nIHZlcnkgY2xldmVyIGFuZCBtaXNsZWFkaW5nIGZvcmVuc2ljIGV2aWRlbmNlIGF0IGEgY3JpbWUgc2NlbmUuPGJyIC8+PGJyIC8+RmFpciBlbm91Z2gsIGJ1dCB3aGlsZSBCdWxsb2NrIGFuZCBDaGFwbGluIGZhaWwgdG8gY3JlYXRlIGFueSBzcGFya3MsIHdlIGFsc28gaGF2ZSB0byBlbmR1cmUgYSBzZXZlcmFsIGR1bGwgb3Zlcmx5LW1lbG9kcmFtYXRpYyBmbGFzaGJhY2tzIGlsbHVzdHJhdGluZyBhbiBpbXBvcnRhbnQgZXZlbnQgaW4gQ2FzcydzIGhpc3RvcnkuIFRoZW4gb2YgY291cnNlIHRoZXJlIGFyZSB0aGUgZnJlcXVlbnQgc2hvdHMgb2YgYSBjbGlmZi1zaWRlIGxvZyBjYWJpbiB3aGVyZSB0aGVyZSdzIGFic29sdXRlbHkgbm8gZG91YnQgdGhlIE9UVCBlbmRpbmcgd2lsbCBiZSBzZXQuIE9vb2guLi4gdGhlIGF0bW9zcGhlcmUuPGJyIC8+PGJyIC8+V2F0Y2ggYW55IGVwaXNvZGUgb2YgQ1NJIGluc3RlYWQuIEl0J3MgdG8gdGhlIHBvaW50IGFuZCBmYXIgbW9yZSBleGNpdGluZy4pAAAAAAAAAEAKtwQIngIQngIipQRITE9UUyB3YXMgYW4gb3V0c3RhbmRpbmcgc2VyaWVzLCBpdHMgd2hhdCBOWVBEIEJsdWUgd2lsbCBuZXZlciBiZSwgb24gSExPVFMgdGhlIHBsb3RzIGFyZSByZWFsLCB0aGUgZGlhbG9nIGlzIHJlYWwsIHRoZSBSZWxhdGlvbnNoaXBzIGFyZSByZWFsLiBXaXRoIEhMT1RTIGJhY2sgYXMgYSBtb3ZpZSwgVHlpbmcgdXAgYWxsIHRoZSBsb29zZSBlbmRzLCBpdCB3YXMgZ29vZCB0byBoYXZlIGFsbCB0aGUgZ2FuZyBiYWNrIHRvZ2V0aGVyLCBldmVuIGEgZmV3IHRoYXQgcGFzc2VkIGF3YXkgc2hvdyB1cCAod29udCBzYXkgaG93KSBUaGUgc3RvcnlsaW5lIHdhcyBmYXN0IHBhY2VkLCBlbW90aW9uYWwgYW5kIGZ1bGwgb2YgdGhlIHNwaXJpdCB0aGUgc2VyaWVzIGhhZCB3ZWVrIGluIGFuZCB3ZWVrIG91dC4gSG9taWNpZGUgLCBMaWZlIG9uIHRoZSBTdHJlZXRzLCBOZXR3b3JrIGRyYW1hIGF0IEl0cyBCRVNUISEhISA1IFNUQVJTISEhISBUaHVtYnMgVVAgYW5kIGFsbCBUaGF0LiBUaGFua3MgTkJDIGZvciBnaXZpbmcgdXMgdGhlIEZpbmFsbHkgd2UgZGlkbid0IGdldCEpAAAAAAAAAEAK0QoInwIQnwIivwpHb29kbmlnaHQsIE1pc3RlciBUb20gYmVnaW5zIGluIGFuIGltcG9zc2libHkgZXhxdWlzaXRlIHZpbGxhZ2UgaW4gdGhlIHNvdXRoIG9mIEVuZ2xhbmQgd2hlcmUgdGhlIHN1biBhbHdheXMgc2VlbXMgdG8gc2hpbmUuIEJlZm9yZSB3ZSBoYXZlIG11Y2ggaWRlYSBvZiB0aGUgcGVyaW9kIHdlIGhlYXIgYSByYWRpbyBhbm5vdW5jZW1lbnQgb2YgdGhlIGRlY2xhcmF0aW9uIG9mIFdvcmxkIFdhciBJSS4gU29vbiBhIHRyYWluIGJsb3dpbmcgY2xvdWRzIG9mIHN0ZWFtIGJyaW5ncyByZWZ1Z2VlIGNoaWxkcmVuIGZyb20gTG9uZG9uIGFuZCB3aGVuIHNoeSBsaXR0bGUgV2lsbGlhbSBpcyBiaWxsZXRlZCB3aXRoIHJlbHVjdGFudCwgZ3J1ZmYgb2xkIFRvbSAod2hvIHlvdSBqdXN0IGtub3cgd2lsbCB0dXJuIG91dCB0byBoYXZlIGEgaGVhcnQgb2YgZ29sZCkgb3VyIHRhbGUgYmVnaW5zLjxiciAvPjxiciAvPkFuZCB3aGF0IGEgbG9hZCBvZiBzZW50aW1lbnRhbCBjbGFwdHJhcCBpdCBpcy4gSW4gZmFjdCBpdCdzIGp1c3QgdGhlIG9sZCBvZGQtY291cGxlIGJ1ZGR5IGZvcm11bGEuIEFyZW4ndCBhbnkgbmV3IHN0b3JpZXMgYmVpbmcgd3JpdHRlbj88YnIgLz48YnIgLz5BcyBJIHN1Z2dlc3RlZCB0aGVyZSdzIGhhcmRseSBhbnkgcGVyaW9kIGZlZWwgaW4gdGhlIHZpbGxhZ2UgYW5kIG5vdCBtdWNoIG1vcmUgaW4gTG9uZG9uIGFwYXJ0IGZyb20gdGhlIG9kZCBvbGQgYW1idWxhbmNlIHJhdHRsaW5nIGFyb3VuZC4gQW5kIGNlcnRhaW5seSBubyBoaW50IG9mIHRoZSBob3Jyb3Igb2YgdGhlIEJsaXR6IGFzIExvbmRvbidzIGNpdGl6ZW5zIGZpbGUgcG9saXRlbHkgaW50byBhaXItcmFpZCBzaGVsdGVycy4gRXZlbiB3aGVuIHRoZSBsb2NhbCBzY2hvb2x0ZWFjaGVyJ3MgaHVzYmFuZCBpcyBkZWNsYXJlZCBtaXNzaW5nIHByZXN1bWVkIGtpbGxlZCwgaGUgaXMgbGF0ZXIgcmVzdG9yZWQgdG8gbGlmZS48YnIgLz48YnIgLz5JIGZvdW5kIGBHb29kbmlnaHQsIE1pc3RlciBUb20nIGNsaWNoZWQgYW5kIG9idmlvdXMgYW5kIEpvaG4gVGhhdydzIGFjY2VudCBjb25qdXJlZCB1cCBhIHBpY3R1cmUgb2YgUm9ubmllIEJhcmtlciBvZiB0aGUgVHdvIFJvbm5pZXMgd2l0aCBhIHN0cmF3IGluIGhpcyBtb3V0aCBkb2luZyBoaXMgYGNvdW50cnkgYnVtcGtpbicgYWNjZW50LjxiciAvPjxiciAvPkluY2lkZW50YWxseSBteSB3aWZlIGVuam95ZWQgdGhpcyBtb3ZpZSBmb3IgYWxsIHRoZSByZWFzb25zIHRoYXQgSSBkaXNsaWtlZCBpdCBhbmQgbG9va2luZyBhdCBmZWxsb3ctaW1kYiByZXZpZXdlcnMgSSBzZWVtIHRvIGJlIGluIGEgbWlub3JpdHkgb2Ygb25lLjxiciAvPjxiciAvPikAAAAAAAAAQArSBwigAhCgAiLAB0dvZCwgSSB3YXMgYm9yZWQgb3V0IG9mIG15IGhlYWQgYXMgSSB3YXRjaGVkIHRoaXMgcGlsb3QuIEkgaGFkIGJlZW4gZXhwZWN0aW5nIGEgbG90IGZyb20gaXQsIGFzIEknbSBhIGh1Z2UgZmFuIG9mIEphbWVzIENhbWVyb24gKGFuZCBub3QganVzdCBzaW5jZSAiVGl0YW5pYyIsIEkgbWlnaHQgYWRkKSwgYW5kIGhpcyBuYW1lIGluIHRoZSBjcmVkaXRzIEkgdGhvdWdodCB3b3VsZCBiZSBhIGd1YXJhbnRlZSBvZiBxdWFsaXR5IChUaGVuIGFnYWluLCBoZSBhbHNvIHdyb3RlIHRoZSBsZWFkZW4gU3RyYW5nZSBEYXlzLi4pLiBCdXQgdGhlIHRoaW5nIGZhaWxlZCBtaXNlcmFibHkgYXQgZ3JhYmJpbmcgbXkgYXR0ZW50aW9uIGF0IGFueSBwb2ludCBvZiBpdHMgYWxtb3N0IHR3byBob3VycyBvZiBkdXJhdGlvbi4gSW4gYWxsIHRoYXQgdGltZSwgaXQgYmFyZWx5IHdlbnQgYmV5b25kIGl0cyB0d28gbGluZSBzeW5vcHNpcywgYW5kIEkgd291bGQgYmUgdmVyeSBoYXJkIHByZXNzZWQgdG8gdHJ5IHRvIGZpZ3VyZSBvdXQgYW55IGtpbmQgb2YgY29oZXJlbnQgcGxvdCBvdXQgb2YgYWxsIHRoZSBtZXNzIG9mIHN0cmFuZHMgdGhhdCB3ZW50IG5vd2hlcmUuIE9uIHRvcCBvZiB0aGF0LCBJIGRvbid0IHRoaW5rIHRoZSBhY3JvYmF0aWNzIG91dGRpZCBldmVuIHRob3NlIG9mIGFueSByZWd1bGFyICJBLVRlYW0iIGVwaXNvZGUuIEFzIGZvciBBbGJhLCB5ZXMsIHNoZSBpcyBnb3JnZW91cywgb2YgY291cnNlLCBidXQgdGhlIGZhY3QgdGhhdCBzaGUgb25seSBkaXNwbGF5cyBvbmUgc2luZ2xlIGZhY2lhbCBleHByZXNzaW9uIHRoZSBlbnRpcmUgbW92aWUgKHBvdXR5IGFuZCBzdXJseSksIG1ha2VzIG1lIGFsc28gZ2V0IGJvcmVkIG9mIGhlciAiZ2FsIHdpdCBhbiBhdHRpdHVkZSIgc2NodGljayBwcmV0dHkgc29vbi4gWW91IGNhbiBjb3VudCBtZSBvdXQgb2YgdGhpcyBvbmUsIE1yLiBDYW1lcm9uISkAAAAAAAAAQArNHwihAhChAiK7H0dlcm1hbiBmaWxtbWFrZXIgVWxsaSBMb21tZWwgaGFzIG1hbmFnZWQgYSB0YXNrIG1hbnkgaG9ycm9yIGZhbnMgdGhvdWdodCB3YXMgaW1wb3NzaWJsZTogaGUncyB1bnNlYXRlZCBmZWxsb3cgVGV1dG9uIFV3ZSBCb2xsIGZvciB0aGUgY3Jvd24gb2YgZGlyZWN0b3Igb2YgdGhlIHdvcnN0IGhvcnJvciBmaWxtIGV2ZXIgbWFkZS48YnIgLz48YnIgLz5Mb21tZWwgaXMgdHJ1bHkgdGhlIEVkIFdvb2Qgb2YgdGhlIG5ldyBtaWxsZW5uaXVtLiBUaGlzIGZpbG0gaXMgYXMgc2hvZGR5IGFuZCBsYXVnaGFibGUgYXMgdGhlIGJlc3Qtd29yc3Qgb2YgRVcuIEkgYW0gYm90aCBwcm91ZCBhbmQgZW1iYXJyYXNzZWQgdG8gc2F5IHRoYXQgSSB3YXRjaGVkIGl0IGluIHRvdG8sIG1vcmJpZGx5IGZhc2NpbmF0ZWQgdG8gc2VlIGp1c3QgbG93IHRoZSBiYXIgY291bGQgYmUgc2V0LiBUaGUgYW5zd2VyIGlzOiBzdWJ0ZXJyYW5lYW47IExvbW1lbCBkdWcgYSBwaXQgYW5kIGJ1cmllZCBpdC48YnIgLz48YnIgLz5UaGUgZnVuIGJlZ2lucyB3aXRoIHRoZSBjYXN0IG9mIGludGVybmF0aW9uYWwgbm9ib2RpZXMuIE9ubHkgc29tZW9uZSB3aG8gaGFzIGxpdmVkIGluIExvcyBBbmdlbGVzLCB3aGVyZSBldmVyeSBhdXRvIG1lY2hhbmljLCBkb2N0b3IgYW5kIG1haWxtYW4gaXMgYW4gYWN0b3Igb3Igc2NyZWVud3JpdGVyIHdhaXRpbmcgdG8gYmUgZGlzY292ZXJlZCwgY291bGQgZWFzaWx5IHVuZGVyc3RhbmQgaG93IExvbW1lbCBtYW5hZ2VkIHRvIGZpbmQgc28gbWFueSB3YW5uYWJlIGFjdG9ycyB3aWxsaW5nIHRvIHNwZXcgaGlzIHJpZGljdWxvdXMgZGlhbG9nIHdpdGggYSBzdHJhaWdodCBmYWNlLjxiciAvPjxiciAvPlRoZSBtYWluIGNoYXJhY3RlciwgYSB2aWxsYWlub3VzIGJlYXQgY29wLCBpcyBwbGF5ZWQgYnkgYSBHZXJtYW4gYWN0b3Igd2l0aCBhIHRoaWNrIEdlcm1hbiBhY2NlbnQuIEFzaWRlIGZyb20gYmVpbmcgYSBzZXJpYWwga2lsbGVyLCBoZSBpcyBhbHNvIHRoZSBvbGRlc3QgYmVhdCBjb3AgaW4gTEEuIERlc3BpdGUgdGhlIGZhY3QgdGhhdCBoZSBzdG9wcyBpbm5vY2VudCB3b21lbiBkcml2ZXJzIGFuZCB0YWtlcyB0aGVtIGludG8gY3VzdG9keSwgdGhlbiBkcmFncyB0aGVtIGludG8gaGlzIGhvbWUgKHdoaWNoIGluZXhwbGljYWJseSBpcyB0aGUgdG9wIGZsb29yIG9mIGEgZnVybml0dXJlIHdhcmVob3VzZSksIGFuZCBkb2VzIGFsbCB0aGlzIGluIHBsYWluIHNpZ2h0IG9mIGhpcyByb29raWUgcGFydG5lcnMsIHRoZSBMQVBEIHJlZnVzZXMgdG8gaW52ZXN0aWdhdGUsIGdvaW5nIHNvIGZhciBhcyB0byBwaHlzaWNhbGx5IGF0dGFjayBvbmUgb2YgaGlzIGFjY3VzZXJzIGluIGEgbmluamEgc3R5bGUgcmFpZCBvbiBoaXMgYXBhcnRtZW50LjxiciAvPjxiciAvPlRoZSBzZXRzIGFyZSBleGNydWNpYXRpbmdseSBiYWQuIFRoZSBwcm9kdWN0aW9uIGRlc2lnbmVyJ3MgYnVkZ2V0IGFwcGFyZW50bHkgaW5jbHVkZWQganVzdCBlbm91Z2ggbW9uZXkgZm9yIGEgY2FuIG9mIHBhaW50OyBlbm91Z2ggdG8gcGFpbnQgIlByZWNpbmN0IDcwNyIgb24gYSBjYXJkYm9hcmQgd2FsbC48YnIgLz48YnIgLz5TaW5jZSB0aGUgYWN0b3JzIHdlcmUgb2J2aW91c2x5IHVucGFpZCBub24tcHJvZmVzc2lvbmFscy0tYSBzYWQgYXNzb3J0bWVudCBvZiBFdXJvcGVhbiBlbWlncmVzIChwb3NzaWJseSBkZXBvcnRlZXMgaWYgdGhleSBhY3RlZCBpbiB0aGVpciBuYXRpdmUgbGFuZHMpLCBiaW1ib3MsIG1pbWJvcywgYW5kIGRlc3BlcmF0ZSBtaWRkbGUtYWdlZCB3b21lbi0tYW5kIHNpbmNlIGxpdHRsZSBpZiBhbnkgbW9uZXkgd2FzIHNwZW50IG9uIHNldHMsIHNwZWNpYWwgZWZ4LCBsb2NhdGlvbnMgb3Igb3RoZXIgcHJvZHVjdGlvbiB2YWx1ZSwgaXQgaXMgb25seSBmYWlyIHRvIG1lbnRpb24gdGhhdCB0aGV5IGRpZCBzcHJpbmcgZm9yIGEgZmV3IGdlbnVpbmUtbG9va2luZyBwb2xpY2UgdW5pZm9ybXMuIFNhZGx5LCB0aGV5IGNvdWxkbid0IGFmZm9yZCBhIHBvbGljZSBjYXI7IHRoZSB1bmlmb3JtZWQgY29wcyBjcnVpc2UgdGhlIHN0cmVldHMgaW4gYSBzaGlueSBuZXcgTWVyY3VyeSByZW50YWwuPGJyIC8+PGJyIC8+TW9yZSB0aGFuIGhhbGYgb2YgdGhlIHN0b3J5IGZvY3VzZXMgb24gdGhlIGRpcnR5IGRlZWRzIG9mIG91ciBkZXJhbmdlZCBHZXJtYW4gTEFQRCBvZmZpY2VyIGFuZCB0aGUgZnV0aWxlIGVmZm9ydHMgb2YgdHdvIHlvdW5nIHJvb2tpZXMgdG8gc3RvcCBoaW0uIE9uZSBvZiB0aGVzZSB5b3VuZyBhY3RvcnMgaXMgZXNwZWNpYWxseSBwaXRpYWJsZSBiZWNhdXNlIGhlJ3MgdGhlIG9ubHkgYWN0b3IgaW4gdGhpcyB3aG9sZSBtZXNzIHdpdGggZXZlbiBhIHZhZ3VlIHNob3QgYXQgYSByZWFsIGNhcmVlciBpbiB0aGUgbW92aWVzLiBUaGUgb3RoZXIgZml0cyByaWdodCBpbiwgd2l0aCBhIHJvY2thYmlsbHkgaGFpcmRvIGFuZCB0b3J0dXJlZCBCcmFuZG8gcG9zaW5nIHRoYXQgbmVlZHMgdG8gYmUgc2VlbiB0byBiZSBhcHByZWNpYXRlZC48YnIgLz48YnIgLz5UaGUgbGF0dGVyIHBhcnQgb2YgdGhlIGZpbG0gaXMgd2hlcmUgdGhlIHRpdGxlIGdldHMgaXRzIHpvbWJpZSwgYXMgdGhlIHZpY3RpbXMgb2Ygb3VyIGtpbGxlciBhcmUgcmVzdXJyZWN0ZWQgYWZ0ZXIgaGUgbXVyZGVycyBhIGdpcmwgd2hvIGhhZCBqdXN0IHZpc2l0ZWQgc29tZSB2b29kb28gcHJpZXN0ZXNzZXMgdG8gaGF2ZSBhIHByb3RlY3RpdmUgc3BlbGwgcHV0IG9uIGhlci4gRG9uJ3QgYXNrIHdoeSBhIGdpcmwgZnJvbSBSb21hbmlhIHdvdWxkIHJlc29ydCB0byB2b29kb29pc20gaW4gYW50aWNpcGF0aW9uIG9mIGJlaW5nIG11cmRlcmVkLCBqdXN0IGFjY2VwdCBMb21tZWwncyBsb2dpYyBhbmQgZW5qb3kgdGhlIGFic3VyZCByaWRlLjxiciAvPjxiciAvPkFmdGVyIG11Y2ggcHJvbG9uZ2VkIGhhbmQtY2xhd2luZyBvdXQgb2Ygc3RyYXctY292ZXJlZCByb2Fkc2lkZSBncmF2ZXMsIHRoZSB6b21iaWUgZ2lybHMgbWFuYWdlIHRvIG1ha2UgdGhlaXIgYXBwZWFyYW5jZS4gVGhleSBsb29rIGV4YWN0bHkgYXMgdGhleSBkaWQgYmVmb3JlIGRlYXRoLCBtYXliZSBldmVuIHByZXR0aWVyLCB3aXRoIGJsYWNrIGdsYW1vciBtYWtlLXVwIGdlbmVyb3VzbHkgYWlyYnJ1c2hlZCBhcm91bmQgdGhlaXIgZXllcy4gTG9va2luZyBub3RoaW5nIGxpa2Ugem9tYmllcywgdGhleSBsb29rIG1vcmUgbGlrZSBoaWdoIGZhc2hpb24gbW9kZWxzIHJlYWR5IGZvciB0aGUgcnVud2F5LjxiciAvPjxiciAvPkF0IHRoaXMgcG9pbnQgaW4gdGhlIG1vdmllIExvbW1lbCBib3Jyb3dzIGEgY3JlYXRpdmUgbm90ZSBmcm9tIGhpcyBsYXVkZWQgY291bnRyeW1hbiBCb2xsLCBhbmQgaW5qZWN0cyBsYXJnZSBkb3NlcyBvZiBjaGVlc3kgRXVyby10cmFzaCB0ZWNobm8gaW50byB0aGUgc291bmR0cmFjay4gV2UncmUgdGFsa2luZyBwcmVoaXN0b3JpYyBlbGVjdHJvbmljIGJ1bWJsZWJlZSBub2lzZS4gU3R1ZmYgdGhleSBtaWdodCBoYXZlIHBsYXllZCBpbiBhbiBJYml6YSBkaXNjbyB3aGVuIExvbW1lbCB3YXMgc3RpbGwgeW91bmcgZW5vdWdoIHRvIHNoYWtlIGhpcyBib290eS48YnIgLz48YnIgLz5Vbmxpa2Ugb3RoZXIgem9tYmllcywgTG9tbWVsJ3MgZ2lybHMgc3BlYWsgYW5kIGZ1bmN0aW9uIGFzIG5vcm1hbC4uLiBlciwgSSBtZWFuLCBhcyB0aGV5IGRpZCBiZWZvcmUgYmVjb21pbmcgem9tYmlmaWVkLiBUaGlzIGdpdmVzIG91ciBhdXRldXIgYW1wbGUgb3Bwb3J0dW5pdGllcyB0byBzaG93ZXIgdXMgd2l0aCBtb3JlIG9mIGhpcyBnb2xkZW4gZGlhbG9nLiBZZXMsIGEgZ29sZGVuIHNob3dlciBpdCBpcy48YnIgLz48YnIgLz5JIHdvbid0IHNwb2lsIGFueXRoaW5nIGJ5IHJldmVhbGluZyB0aGUgc2hvY2sgZW5kaW5nLiBBbGwgSSBjYW4gc2F5IGlzIGl0J3MgcGVyZmVjdGx5IGluIHR1bmUgd2l0aCB0aGUgcmVzdCBvZiB0aGlzIG1hc3RlcnBpZWNlLiBUaGUgc3Bpcml0IG9mIEVkIFdvb2QgbGl2ZXMgb24uLi4gb3Igc2hvdWxkIEkgc2F5IGhpcyBnZWlzdC4pAAAAAAAAAEAKuQcIogIQogIipwdGcm9tIHRoZSBhY3RpbmcsIGRpcmVjdGlvbiwgc2NyaXB0d3JpdGluZyBhbmQgYXJ0IGRpcmVjdGlvbiB0aGlzIGZpbG0gaXMganVzdCBlbnRpcmVseSBpbGwgY29uY2VpdmVkIGFuZCB0aGUgbW9uZXkgd291bGQgaGF2ZSBiZWVuIGJldHRlciBzcGVudCBvbiBzaG9lcyBmb3IgbGFuZCBtaW5lIHZpY3RpbXMuIFdoZW4gZGlkIHdlIGdldCBzbyBzYWQgdGhhdCB0aGV5IGhhdmUgdG8gZmlsbCBhIGEgY2hpbGRyZW4ncyBtb3ZpZSB3aXRoIHNleHVhbCBpbm51ZW5kbyB0byBrZWVwIHRoZSBwYXJlbnRzIGF0dGVudGlvbi48YnIgLz48YnIgLz5EciBTdWVzcyBpcyByb2xsaW5nIGluIGhpcyBncmF2ZSByaWdodCBub3csIHdoYXQgd2l0aCB0aGUgImRpcnR5IGhvIiAiUy5ILkkuVCIgYW5kIGZha2UgZXJlY3Rpb24gc2NlbmVzIGV0YyBldGMgZXRjLiBJdHMgc2hhbWVmdWwgaG93IHRoZXkgdHJhZGUgb24gdGhlIG5hbWUgb2YgU3Vlc3MgdG8gZ2V0IHRoZSBwYXJlbnRzIHRvIGJyaW5nIHRoZWlyIGtpZHMsIHRocm93IGluIHRoZSBwcm9mYW5pdGllcyB0byB0cnkgZm9yIHRoZSB0ZWVucyBhbmQgYSBmZXcgc2FkIHBhcmVudHMgd2hvIHdvbid0IHdhdGNoIGEgYSBmaWxtIHdpdGggdGhlaXIgY2hpbGQgaWYgdGhlcmUgaXMgbm8gVCAmIEEuIEdyZWVkIGdyZWVkIGFuZCBtb3JlIGdyZWVkLjxiciAvPjxiciAvPkNvbXBhcmUgdGhpcyB0byB0aGUgY2xhc3NpYyBjaGlsZHJlbidzIGZpbG1zIGFuZCB3ZSBjYW4gZ2V0IGEgZGlzdHVyYmluZyB2aWV3IG9mIHdvcmxkIGlzIHR1cm5pbmcgaW50by4gVGhlc2UgZ3V5cyBzaG91bGQgc3RpY2sgdG8gbWFraW5nIE1UViB2aWRlb3MuIEhvdyBvbiBlYXJ0aCB0aGlzIG1vdmllIGdvdCA+NDAwIHZvdGVzIGFzIGEgcGVyZmVjdCAxMCBpcyBiZXlvbmQgbWUuICh1bmxlc3MgaXRzIHRoZSBkaXJlY3RvcnMgZmFtaWx5KSkAAAAAAAAAQArQCQijAhCjAiK+CUZyb20gZGlyZWN0b3IgQmFyYmV0IFNjaHJvZGVyIChSZXZlcnNhbCBvZiBGb3J0dW5lKSwgSSB0aGluayBJIHNhdyBhIGJpdCBvZiB0aGlzIGluIG15IE1lZGlhIFN0dWRpZXMgY2xhc3MsIGFuZCBJIHJlY29nbmlzZWQgdGhlIGxlYWRpbmcgYWN0cmVzcywgc28gSSB0cmllZCBpdCwgZGVzcGl0ZSB0aGUgcmF0aW5nIGJ5IHRoZSBjcml0aWNzLiBCYXNpY2FsbHkgY29vbCBraWQgUmljaGFyZCBIYXl3b29kIChIYWxmIE5lbHNvbidzIFJ5YW4gR29zbGluZykgYW5kIEp1c3RpbiBQZW5kbGV0b24gKEJ1bGx5J3MgTWljaGFlbCBQaXR0KSB0ZWFtIHVwIHRvIG11cmRlciBhIHJhbmRvbSBnaXJsIHRvIGNoYWxsZW5nZSB0aGVtc2VsdmVzIGFuZCBzZWUgaWYgdGhleSBjYW4gZ2V0IGF3YXkgd2l0aCBpdCB3aXRob3V0IHRoZSBwb2xpY2UgZmluZGluZyB0aGVtLiBJbnZlc3RpZ2F0aW5nIHRoZSBtdXJkZXIgaXMgaG9taWNpZGUgZGV0ZWN0aXZlIENhc3NpZSAnVGhlIEh5ZW5hJyBNYXl3ZWF0aGVyIChTYW5kcmEgQnVsbG9jaykgd2l0aCBuZXcgcGFydG5lciBTYW0gS2VubmVkeSAoQmVuIENoYXBsaW4pLCB3aG8gYXJlIHByZXR0eSBiYWZmbGVkIGJ5IHRoZSBldmlkZW5jZSBmb3VuZCBvbiB0aGUgc2NlbmUsIGUuZy4gbm9uLXJlbGF0aW5nIGhhaXJzLiBUaGUgcGxhbiBkb2Vzbid0IHNlZW0gdG8gYmUgY29tcGxldGVseSBnb2luZyB3ZWxsIGJlY2F1c2UgQ2Fzc2llIGFuZCBTYW0gZG8gcXVpdGUgcXVpY2tseSBoYXZlIFJpY2hhcmQgb3IgSnVzdGluIGFzIHN1c3BlY3RzLCBpdCBpcyBqdXN0IGEgcXVlc3Rpb24gb2YgaWYgdGhleSBjYW4gc3dheSB0aGVtIGF3YXkuIEFsc28gc3RhcnJpbmcgQWduZXMgQnJ1Y2tuZXIgYXMgTGlzYSBNaWxscywgQ2hyaXMgUGVubiBhcyBSYXkgRmVhdGhlcnMsIFIuRC4gQ2FsbCBhcyBDYXB0YWluIFJvZCBDb2R5IGFuZCBUb20gVmVyaWNhIGFzIEFzc3QuIEQuQS4gQWwgU3dhbnNvbi4gSSBjYW4gc2VlIG5vdyB0aGUgc2FtZSBjb25jZXB0IGFzIFNpciBBbGZyZWQgSGl0Y2hjb2NrJ3MgUm9wZSB3aXRoIHRoZSBtdXJkZXJpbmcgZm9yIGEgY2hhbGxlbmdlIHRoaW5nLCBidXQgdGhpcyBmaWxtIGRvZXMgaXQgaW4gYSB2ZXJ5IHNpbGx5IHdheSwgYW5kIG5vdCBldmVuIGEgcmVhc29uYWJseSBnb29kIEJ1bGxvY2sgY2FuIHNhdmUgaXQgZnJvbSBiZWluZyBkdWxsIGFuZCBwcmVkaWN0YWJsZS4gQWRlcXVhdGUhKQAAAAAAAABACv4LCKQCEKQCIuwLRnJlbmNoIENpbmVtYSBzdWNrcyEgRG93biB3aXRoIGFsbCB0aGVzZSBwc3ljaGlvdHJpYyB2aXNpb25zIHdpdGggdGhlaXIgbXktR29kLWFtLUktY3VsdGl2YXRlZCBkaXN0aW5ndWlzaGVkIGF0dGl0dWRlcyEgUGVzdGlsZW5jZSB0byBjb25jZWl0ZWQgc3ltYm9saWMgZmlsbS1sYW5ndWFnZSBhbmQgaW1wZXJ2aW91cyBjaGlmZnJlcyEgSSdsbCBubyBsb25nZXIgaGF2ZSBhIG1pbmQgZm9yIHRoYXQhIEzDqW9zIENhcmF4LCBkaWQgeW91IGV2ZXIgdGhpbmsgYWJvdXQsIHRoYXQgYSBkaWFsb2d1ZSBpbiBhIGZpbG0gY291bGQgYmUgbmF0dXJhbCBhbmQgdml2aWQ/Pz8gTWF5YmUgSSdtIHRvbyBjb21tb24gdG8gdW5kZXJzdGFuZCB5b3U/IE9yIGhhZCBpdCBiZWVuIHlvdXIgdGFzayB0byBjb25maXJtIGFsbCB0aGUgY2xpY2jDqXMgb2YgYSBGcmVuY2htYW4gdGhlIHdvcmxkIGNhbiBoYXZlPyBHdWlsbGF1bWUgdGhlIHRvLWJlLWd1aWxsaW90aW5lZCBjb21lcyB0byBoaXMgaG9tZS1wYWxhY2UsIE1tZS4gRGVuZXV2ZSwgbm90IGluIHRoZSBwaWN0dXJlLCBwbGF5cyB0aGUgZmx1dGU6ICJIZXJlIGFtIEksIGRhcmxpbmchIiBJbiB0aGlzIG1vbWVudCwgSSBrbmV3LCB0aGF0IHNoZSdzIGluIHRoZSBiYXRodHViLCBhbmQgd2VgbGwgc2VlIGhlciBseWluZyBpbiB0aGVyZSBzb29uLiBEb24ndCBtaXN1bmRlcnN0YW5kIG1lLCBJJ20gbm90IHBydWRpc2gsIGFuZCB0aGUgaW5jZXN0b3VzIHNleCBzY2VuZSB3YXMgdGhlIGNsaW1heCBvZiB0aGUgZmlsbS4gQnV0IHRoaXMgaXMsIGluIEJlcmxpbiwgd2Ugc2F5ICJldGVwZXRldGUiLCB3aGF0IG1lYW5zIHNvbWV0aGluZyBsaWtlICLDqnRyZS1wZXV0LcOqdHJlIiwgYSBzbm9iaXN0aWMsIHNlbGYtc2F0aXNmaWVkLCBhbmQsIHRoZSB3b3JzdCwgc2VlbiB0aGF0IG9mdGVuIGluIEZyZW5jaCBtb3ZpZXMgSSBjYW4gdGVsbCEgT3RoZXIgZXhhbXBsZTogU2hlLCBiZWF1dGlmdWwgYW5kIHdpbGxpbmcsIGlzIGxvb2tpbmcgYXQgaGVyc2VsZiBpbiBhIG1pcnJvciwgY29tYmluZyBoZXIgaGFpciwgYW5kIGhlciB3aWxkLWJlYXJkZWQsIGRpcnR5IHlvdW5nIGd1cnUgcnVzaHMgaW50byB0aGUgcm9vbSwgYnJlYXRobGVzcyBzaG91dGluZzogIlRoZXJlJ3Mgbm8gZXNjYXBlLCB0aGVyZSdzIG5vIGVzY2FwZSEiIEZvcnR5IHllYXJzIGFmdGVyIGV4aXN0ZW5jaWFsaXN0aWMgU2FydHJlcyBhbmQgY29uc29ydHMtIHdoYXQncyBuZXcsIHdoYXQncyBleGNpdGluZyBhYm91dD8gTXkgR29kLCB0aGVyZSdzIHRoYXQgd29tYW4gYW5kIHNoZSBsb3ZlcyBhbmQgYWRtaXJlcyB5b3UsIHdoYXQgd291bGQgYmUgbW9yZSBuYXR1cmFsIHRvIGJlIGhhcHB5IHdpdGggeW91ciBsaWZlPyBBbmQgd2hlbiB5b3UncmUgbm90LCBwbGVhc2UgZXhwbGFpbiBtdWNoIGJldHRlciwgd2h5ISEgQm9ybiBGcmVuY2ggbWVhbnMgeW91IGhhdmUgdG8gbGl2ZSBhIGxpZmUgaW4gZXh0cmF2YWdhbnphLCBubyBlc2NhcGUsIGlzIHRoYXQgdGhlIHBvaW50PykAAAAAAAAAQArVAwilAhClAiLDA0ZvciBhbnlvbmUgd2hvIGxpa2VkIHRoZSBzZXJpZXMgdGhpcyBtb3ZpZSB3aWxsIGJlIHNvbWV0aGluZyB0byB3YXRjaC4gSG93ZXZlciwgaXQgYWxzbyBsZWF2ZXMgeW91IHdhbnRpbmcgbW9yZS4gSSBsb3ZlZCB0aGUgd2F5IHRoYXQgZXZlcnkgY2hhcmFjdGVyIChkZXRlY3RpdmUpbWFkZSBhbiBhcHBlYXJhbmNlLiBMZWFzdCB3aXRoIHRoZSBlbmRpbmcgb2Ygd2hvIGlzIHRoZSBmb3VydGggY2hhaXIgZm9yIHRoZXkgbGVhdmUgYSByZWFzb24gZm9yIGFub3RoZXIgbW92aWUuIE15IGd1ZXNzIGlzIEJheWxlc3Mgb2YgY291cnNlLiBUaGlzIGxpa2UgdGhlIHNlcmllcyB3YXMgYSB2ZXJ5IHdlbGwgcHV0IHRvZ2V0aGVyIHNlcmllcyBvZiBzY2VuZXMuIFRoaXMgaXMgYSBzZXJpZXMgSSB3aXNoIGhhZCBsaXZlZCBvbi4gVGhhbmtzIHRvIHRoZSBjYXN0IGZvciBzb21lIHdvbmRlcmZ1bCBUVi4pAAAAAAAAAEAK7QQIpgIQpgIi2wRGb3IgYWxsIHRoZSBIb21pY2lkZSBqdW5raWVzIG91dCB0aGVyZSwgdGhpcyBtb3ZpZSB3YXMgZ3JlYXQhIEV2ZXJ5IHNpbmdsZSBjaGFyYWN0ZXIgdGhhdCBldmVyIHdhcyBvbiB0aGUgc2hvdyBtYWRlIGFuIGFwcGVhcmFuY2UgaW4gdGhlIG1vdmllLiBJdCBoZWxwZWQgdG8gcmVzb2x2ZSBzb21lIChidXQgbm90IGFsbCkgaXNzdWVzIGZyb20gdGhlIHNlcmllcy4gVW5mb3J0dW5hdGVseSwgdW5sZXNzIHlvdSBhY3R1YWxseSBkaWQgd2F0Y2ggdGhlIHNlcmllcywgbW9zdCBvZiB0aGUgZW5qb3ltZW50IHdvdWxkIGJlIGxvc3QsIGFzIHRoZSBtb3ZpZSBtYWRlIGhlYXZ5IHJlZmVyZW5jZXMgdG8gZXZlcnkgc2Vhc29uIG9mIHRoZSBzaG93J3MgZXhpc3RlbmNlLiBUaGlzIHByb2JhYmx5IHdvdWxkIGhhdmUgYmVlbiBhcHByb3ByaWF0ZSBhcyBhIHNlcmllcyBmaW5hbGUgYXMgb3Bwb3NlZCB0byBiZWluZyBhIHNlcGFyYXRlIG1vdmllLCBidXQgd2UgZ290dGEgdGFrZSB3aGF0IHdlIGNhbiBnZXQuIEkgaG9wZSB0aGV5IG1ha2UgbW9yZSBtb3ZpZXMsIGFuZCBjb250aW51ZSB0byBmZWF0dXJlIEhvbWljaWRlIGNoYXJhY3RlcnMgb24gTGF3IGFuZCBPcmRlci4pAAAAAAAAAEAKuwkIpwIQpwIiqQlGb290cHJpbnRzIGlzIGEgdmVyeSBpbnRlcmVzdGluZyBtb3ZpZSB0aGF0IGlzIHNvbWV3aGF0IGRpZmZpY3VsdCB0byBjYXRlZ29yaXplLiAiUHN5Y2hvbG9naWNhbCB0aHJpbGxlciIgaXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZGVzY3JpcHRpb24gSSBjYW4gdGhpbmsgb2YuIFRoZSBmZW1hbGUgcHJvdGFnb25pc3QsIEFsaWNlIENlc3BpLCBkaXNjb3ZlcnMgdGhhdCBzaGUgZG9lc24ndCByZW1lbWJlciBhbnl0aGluZyBvZiB0aGUgbGFzdCB0aHJlZSBkYXlzLiBUaGUgb25seSBjbHVlIHNoZSBoYXMgaXMgYSB0b3JuIHBob3RvIG9mIGEgaG90ZWwuIFNoZSBpcyBhbHNvIGhhdW50ZWQgYnkgYSByZWN1cnJpbmcsIHZlcnkgdml2aWQsIGRyZWFtIGFib3V0IGEgc2NpZW5jZSBmaWN0aW9uIG1vdmllIHRoYXQgc2hlIGJlbGlldmVzIHNoZSBzYXcgbWFueSB5ZWFycyBhZ28uIEluIGhlciBwdXJzdWl0IG9mIHRoZSB0cnV0aCBiZWhpbmQgaGVyIGFtbmVzaWEgc2hlIGRvZXNuJ3QgdHJ1c3QgYW55b25lLCBidXQgbGl0dGxlIGJ5IGxpdHRsZSBpdCBiZWNvbWVzIG9idmlvdXMgdGhhdCBzaGUgaGFzIHZpc2l0ZWQgdGhlIHRvd24gd2hlcmUgdGhlIGhvdGVsIGlzIGxvY2F0ZWQgYmVmb3JlLiBUaGlzIGlzIGFuIGV4Y2l0aW5nIGZsaWNrIHdob3NlIG1haW4gdmlydHVlIGlzIHRoYXQgaXQgaXMgdmlydHVhbGx5IGltcG9zc2libGUgdG8gcHJlZGljdCBob3cgdGhlIGV2ZW50cyB3aWxsIHVuZm9sZCwgYW5kIHBhcnRpY3VsYXJseSwgaG93IGl0IHdpbGwgZW5kLiBUaGUgdW51c3VhbCBsb25lbGluZXNzIG9mIHRoZSBtYWluIGNoYXJhY3RlciBhbmQgdGhlIHVucmVsaWFiaWxpdHkgb2YgZXZlcnlvbmUgZWxzZSBlbnN1cmUgdGhhdCB0aGUgZ29vZCBvbGQgcGFyYW5vaWQgZmVlbGluZyBpcyBwcmVzZW50IHRocm91Z2hvdXQgdGhlIGZpbG0sIHdoZXJlYXMgYmVhdXRpZnVsIGNvbG9ycyBhbmQgc29tZSBzcGVjdGFjdWxhcmx5IGZpbG1lZCBzZXF1ZW5jZXMgbWFrZSB0aGlzIGEgdmlzdWFsbHkgYXR0cmFjdGl2ZSBtb3ZpZSBhcyB3ZWxsLiBUaGUgaW1wb3J0YW50IHBhcnQgb2YgdGhlIG9uZSBhbmQgb25seSBOaWNvbGV0dGEgRWxtaSwgZXZlcnlvbmUncyBhbGwgdGltZSBmYXZvcml0ZSByZWRoZWFkZWQgb2Jub3hpb3VzIGNoaWxkIHN0YXIgb2YgSXRhbGlhbiBob3Jyb3IsIGlzIGFuIGV4dHJhIGJvbnVzLikAAAAAAAAAQArYFAioAhCoAiLGFEZvbGxvd2luZyBhIHJvdWdobHkgNyB5ZWFyIHJvY2t5IHJvYWQgb24gTkJDLCBpdCB3YXMgZGVjaWRlZCB0byBkbyBqdXN0IG9uZSBsYXN0IFN1cGVyIEluc3RhbGxtZW50LiBUaGUgU2VyaWVzIGhhZCBiZWVuIG9uIHRoZSBidWJibGUgc2V2ZXJhbCB0aW1lcyB0aGFua3MgdG8gbm90IGhhdmluZyB0aGUgbnVtYmVycyB0aGF0IHdvdWxkIHF1YWxpZnkgaXQgYXMgYSBibG9jay1idXN0ZXIgb2YgYSBUViBob3VyLiBJdCBoYWQgYWx3YXlzIGhhZCBhIHNpemFibGUsIGhhcmQgY29yZSBvZiBoYXJkIGNvcnBzIG9mIGZvbGxvd2Vycy4gPGJyIC8+PGJyIC8+SXQgd2FzIGFsbW9zdCBhcyBpZiB0aGUgc2VyaWVzIHdpdGggdGhlIGZ1bGwgdGl0bGUgb2YgIkhPTUlDSURFOiBMSUZFIE9OIFRIRSBTVFJFRVQiICgxOTkzLTk5KSB3YXMgYSBzb3J0IG9mICJNci4gSW4tQmV0d2VlbiIgb2Ygc2VyaWVzLiBJdCB3YXMgdG9vIGJpZyB0byBqdXN0IGNhbmNlbCwgYnV0IHRvbyBzbWFsbCB0byBnZXQgYSBjYXNlIG9mICdSYWJpZCBSYXRpbmdzIFJhdmluZ3MnIG92ZXIuIDxiciAvPjxiciAvPkR1cmluZyB0aGUgcHJlY2FyaW91cyB0ZW51cmUgb24gRnJpZGF5IGV2ZW5pbmdzLCB0aGV5IGhhZCBwcmVzZW50ZWQgc29tZSBvZiB0aGUgYmVzdCBhbmQgbW9zdCBkYXJpbmdseSBBcnRpc3RpYyBvZiBIb3VybHkgRHJhbWFzLiBUaGVyZSwgSSd2ZSBzYWlkIGl0IEFydGlzdGljLCBBcnRpc3RpYyEhIEJ1dCBwbGVhc2UsIHJlbWVtYmVyIHdlIG1lYW4gQXJ0aXN0aWMsIGJ1dCBub3QganVzdCBQaG9ueSwgUHJldGVudGlvdXMsIFBlZGFudGljLCBQb2xpdGljYWxseSBDb3JyZWN0IHByZWFjaGluZy48YnIgLz48YnIgLz5XaGVuIGF0IGxhc3QsIGl0IHdhcyBhIHN1cmUgdGhpbmcgdGhhdCBpdCB3YXMgdGhlIGVuZCBvZiB0aGUgbGluZSBmb3IgIkhPTUlDSURFIjsgdGhpcyBzdXBlciBlcGlzb2RlIHdhcyBwcmVwYXJlZCBhcyB0aGlzIDIgaG91ciBtYWRlIGZvciBUViBNb3ZpZS4gPGJyIC8+PGJyIC8+TG9va2luZyBhdCBhbGwgdGhlIHBhc3Qgc2Vhc29ucycgaGFwcGVuaW5ncyBhbmQgcGFyYWRlIG9mIHJlZ3VsYXIgY2hhcmFjdGVycywgdGhlIFByb2R1Y3Rpb24gdGVhbSB3ZW50IG91dCBhbmQgZ2F2ZSB1cyB3aGF0IHByb3ZlZCB0byBiZSBhIHN1cGVyIHNlbmQgb2ZmLjxiciAvPjxiciAvPk9VUiBTVE9SWcKFwoXChS4gQXMgd2Ugam9pbiB0aGUgc3RvcnksIHdlIGZpbmQgdGhhdCBCYWx0aW1vcmUgSG9taWNpZGUgVW5pdCBDb21tYW5kaW5nIE9mZmljZXIsIEx0LiBBbCBHaWFyZGVsbG8gaGFzICJwdWxsZWQgdGhlIHBpbiIsIFJldGlyZWQgZnJvbSB0aGUgam9iLCB0aGF0IGlzLiBCdXQgJ0cnIGlzbid0IHJlYWR5IHRvIHJlYWxseSByZXRpcmUtcmV0aXJlIHlldC4gU28sIGluc3RlYWQgb2YgYSByb2NraW5nIGNoYWlyIG8gYSBmaXNoaW5nIHJvZCwgd2UgZmluZCB0aGF0IEFsIGlzIHJ1bm5pbmcgZm9yIE1heW9yIG9mICdDaGFybSBDaXR5Lic8YnIgLz48YnIgLz5XaGlsZSBvdXQgaW4gdGhlIENpdHksIG1ha2luZyBzb21lIGNhbXBhaWduIHN0b3BzIGFuZCBzcGVlY2hlcywgdGhlIGZvcm1lciBEZXRlY3RpdmUgTGlldXRlbmFudCB0YWtlcyBhbiBhc3Nhc3NpbidzIGJ1bGxldC4gQWxpdmUsIGJ1dCBpbiBhIGNvbWF0b3NlIHN0YXRlLCBoZSBpcyB0YWtlbiB0byB0aGUgSG9zcGl0YWwuIDxiciAvPjxiciAvPk5ld3Mgc3ByZWFkcyBxdWlja2x5IGFuZCBhcyBpZiBvZmZpY2lhbGx5IHN1bW1vbmVkLCB3ZSBmaW5kIGFsbCBvZiB0aGUgRGV0ZWN0aXZlcyBvZiB0aGUgQmFsdGltb3JlIFVuaXQgd2UndmUgc2VlbiBvbiB0aGUgc2hvdyBzaG93aW5nIHVwIHRvIG9mZmVyIHRoZWlyIHNlcnZpY2VzIGFuZCBhc3Npc3RhbmNlLiBUaGVyZSBpcyBhIGdyZWF0IG1lZXRpbmcgb2YgYWxsIG9mIHRoZXNlIGZvcm1lciBhbmQgcHJlc2VudCBndW1zaG9lcyBhcyB0aGV5IHBpdGNoIGluIGFuZCBmb2xsb3cgZXZlcnkgbGVhZCBhbmQgcG9zc2liaWxpdHkgb2YgYSBsZWFkLjxiciAvPjxiciAvPlRoZSBQcm9kdWNlciBmb3VuZCBhIHdheSB0byBkZWFsIHdpdGggdGhvc2Ugd2hvIGhhZCBkaWVkIHByZXZpb3VzbHkgaW4gYnJpbmdpbmcgdGhlaXIgbWVtb3J5IGludG8gdGhlIHN0b3J5LiBUaGV5IG1hbmFnZWQgdG8gYW5zd2VyIHNvbWUgbG9uZyBzdGFuZGluZyBxdWVzdGlvbnMgYW5kIGV2ZW4gaW50cm9kdWNlZCBzb21lIGhlcmUgdG8gdW5yZXZlYWxlZCBvbmVzLiBUaGUgd2hvbGUgc3Rvcnkgd2luZHMgdXAgdGhlIHNlcmllcyBpbiBhIG1vc3Qgc2F0aXNmeWluZyBhbmQgb3JpZ2luYWwgd2F5LiBCdXQgYXQgbGVhc3QgZm9yIG5vdywgd2UnbGwgbGVhdmUgdGhhdCBhcyAiY2xhc3NpZmllZCIuPGJyIC8+PGJyIC8+SW4gd3JhcHBpbmcgdXAgZXZlcnl0aGluZyBpbnRvIGEgbmVhdCwgbGl0dGxlIHBhY2thZ2UsIHRoaXMgVFYgTW92aWUgc3VyZWx5IGdldHMgb3VyIGVuZG9yc2VtZW50LiBBcyBmb3IgZ3JhZGluZyAiVEhFIEhPTUlDSURFIE1PVklFIiwgd2UgbXVzdCBnaXZlIGl0IGFuIEEgb3IgQSssIGV2ZW4uIEJ1dCwgbm8gbWF0dGVyIHRoZSBHcmFkZSBoZXJlLCBpdCBkaWRuJ3Qgc2NvcmUgYXMgaGlnaCBhcyBhIHR5cGljYWwgd2Vla2x5IGVwaXNvZGUuKQAAAAAAAABACoEGCKkCEKkCIu8FRmlyc3QsIElGQyBydW5zIFRvd24gYW5kIENvdW50cnksIGFuZCBub3cgdGhpcy4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGF0IHN0aW5rZXIgYW5kIHRoaXMgUGluayBQYW50aGVyIHJpcC1vZmYgaXMgdGhhdCBUb3duIGFuZCBDb3VudHJ5IHdhcyB3YXRjaGFibGUuIFRoaXMgaXNuJ3QuPGJyIC8+PGJyIC8+SSBjYW4gb25seSBzdXJtaXNlIHRoYXQgdGhlIGNhc3Qgc2lnbmVkIHVwIGZvciB0aGlzIHNvIHRoZXkgY291bGQgZ29vZiBvZmYgaW4gRXVyb3BlIG9uIHNvbWVib2R5IGVsc2UncyBkaW1lLiBCZWx1c2hpIGlzIGVzcGVjaWFsbHkgaXJyaXRhdGluZy4gSGlzIHNjZW5lIHdpdGggQ2FuZHkgKGRvaW5nIGEgWi1ncmFkZSBEb20gRGVMdWlzZSkgd2FzIHRvcnR1cmUuIFNwZWFraW5nIG9mIHRvcnR1cmUsIGZpdmUgbWludXRlcyBvZiB0aGUgdGFsZW50bGVzcyBTaGVwaGVyZCwgYW5kIEkgYmV0IHRoZSBwcmlzb25lcnMgYXQgR2l0bW8gd291bGQgY3JhY2sgbGlrZSB3YWxudXRzITxiciAvPjxiciAvPlRoZSByZWFsICJDcmltZSIgKGJlc2lkZXMgdGhpcyBiZWluZyBncmVlbi1saWdodGVkKSBpcyBTaGVwaGVyZCdzIGNoYXJhY3RlcjogYSBtb3VzeSB3aWZlIHdobyB0YWtlcyBhIE1vbnRlIENhcmxvIGNhc2lubyBmb3IgYSBoYWxmLW1pbGxpb24gYnVja3MhIElmIHlvdSBidXkgdGhhdCwgSSBoYXZlIHNvbWUgb2NlYW5mcm9udCBwcm9wZXJ0eSBpbiBBcml6b25hIHlvdSBtaWdodCBiZSBpbnRlcmVzdGVkIGluISkAAAAAAAAAQArICAiqAhCqAiK2CEZpcnN0LCBJIGRvbid0IHNlZSBob3cgdGhlIG1vdmllIGlzIG9uIGFueSAiYmVzdCIgbGlzdCBvciBob3cgaXQgd29uIGFueSBhd2FyZHMuIENvbXBhcmVkIHRvIExhIFBpYW5pc3RlLCB3aGljaCBpcyBhbHNvIG9uIGEgImJlc3QiIGxpc3QsIExhIFBpYW5pc3RlIGlzIGdvbGQuIFRoaXMgbW92aWUgbGFja2VkIHNvIG1hbnkgdGhpbmdzLCBvbiBzbyBtYW55IGRpZmZlcmVudCBsZXZlbHMsIGJ1dCBJIGNhbid0IHF1aXRlIGV4cGxhaW4gd2h5IEkgZGlzbGlrZWQgaXQgc28gbXVjaC4gVGhlIGxlYWQgYWN0b3Igd2FzIGFubm95aW5nLCBJIGZlbHQgYXMgdGhvdWdoIEkgbmV2ZXIga25ldyB3aGF0IHdhcyBnb2luZyBvbiwgYW5kIEkgd2FzIEJPUkVEISEgRXZlbiB0aG91Z2ggdGhpcyB3YXMgc3VwcG9zZWQgdG8gYmUgc29tZSB3b3J0aHdoaWxlIGxpZmUgY2hhbmdlIHRoYXQgUGllcnJlIHdhcyBzdGFydGluZywgSSB3YW50ZWQgaXQgdG8gZW5kLi4uLiBhcyBzb29uIGFzIHBvc3NpYmxlLiBXaHkgZGlkIGl0IGhhdmUgdG8gYmUgaGlzIHNpc3RlciBhbmQgY291c2luPyBVZ2guIEFuZCB3aHkgZGlkIFRoaWJhdWx0IGdldCBtZWFuPyBIZSBqdXN0IGJpcG9sYXJseSB0dXJuZWQgbWVhbi4gQW5kIGFsc28sIHdhcyBpdCBtZSBvciBkaWQgSSBtaXNzIHRoZSB3aG9sZSBwdXJwb3NlIG9mIHdoYXQgdGhhdCBndXkgaW4gYmxhY2sgd2FzIGFsbCBhYm91dD8gV2hvIHdlcmUgYWxsIHRob3NlIHBlb3BsZSBwbGF5aW5nIG11c2ljIGluIHRoZSBiaWcgYmFzZW1lbnQgb2YgdGhlIGJpZyB3YXJlaG91c2U/IFdoeSBkaWQgdGhleSBoYXZlIGFsbCB0aGF0IHdlaXJkIGVxdWlwbWVudCBhbmQgdGhlIGd1bnMgYW5kIGFsbCB0aG9zZSBleHRyYSByb29tcyBmb3IgcGVvcGxlIHRvIGxpdmUgaW4/IEkgbWVhbiB0aGlzIGluIGFsbCBzZXJpb3VzbmVzcywgYnV0IGRvZXMgaW5jZXN0IGhhcHBlbiBhIGxvdCBpbiBGcmVuY2ggY3VsdHVyZT8gRXVyb3BlYW4gY3VsdHVyZT8gSSB0b29rIDUgeWVhcnMgb2YgbGVhcm5pbmcgYWJvdXQgdGhlIGN1bHR1cmUgYW5kIEkgbmV2ZXIgaGVhcmQgYW55dGhpbmcgYWJvdXQgdGhhdCEpAAAAAAAAAEAKyggIqwIQqwIiuAhGaXJzdCBvZmYsIEkganVzdCB3YXRjaGVkIGEgbW92aWUgb24gU0hPV1RJTUUgY2FsbGVkIFN1cnZpdmFsIElzbGFuZC4gSXQgc2F5cyBpdCB3YXMgYSAyMDA2IG1vdmllIHdpdGggQmlsbHkgWmFuZSBhbmQgc2luY2UgSSBsaWtlIGhpbSBhbmQgY291bGRuJ3Qgc2xlZXAgSSB0aG91Z2h0IEkgd291bGQgY2hlY2sgaXQgb3V0LiBMb29rZWQgaW50ZXJlc3RpbmcuIFdhdGNoZWQgaXQsIGFuZCBkZWNpZGVkIHRvIGxvb2sgdXAgb24gdGhlIElNRGIgd2hvIHdhcyB0aGlzIG5ldyBmYWNlIEp1YW4gUGFibG8gRGkgUGFjZSBhbmQgT01HIEkgY291bGQgbm90IGJlbGlldmUgaXQsIHRoaXMgbW92aWUgaGFzIGJlZW4gcmVuYW1lZCBUSFJFRSBhbmQgd2lsbCBiZSBhIG5ldyBtb3ZpZT8/IEl0IGlzIHBsYXlpbmcgYWdhaW4gaW4gMSBociBhbmQgMzAgbWlucyBvbiBTaG93dGltZSBDaGFubmVsIGFnYWluIGFuZCB0aGlzIGRhdGUgaXMgTWF5IDI4IGFuZCBFRFQgb3IgRmxvcmlkYSB0aW1lLiBZb3UgY2FuIGNoZWNrIHlvdXIgc2hvd3RpbWUgbGlzdGluZ3MgYnkgdGl0bGUgYW5kIHNlZSBpdC4gSSB3b250IGdldCBpbnRvIGRldGFpbHMgc28geW91IGNhbiBzZWUgdGhlIG1vdmllIGJ1dCBhdCBvbmUgcG9pbnQgdGhlcmUgaXMgYSBsYWR5IGluIGEgd2hpdGUgYmlraW5pIHRoYXQgZ29lcyBpbnRvIHRoZSB3YXRlciB0YWtpbmcgaXQgYWxsIG9mZiwgeW91IHNlZSBoZXIgbmFrZWQgYm9keS4uLi4gd2hlbiBzaGUgcnVucyBiYWNrIG91dCBvZiB0aGUgd2F0ZXIgeW91IHNlZSBoZXIgYm90dG9tcyBvbi4gRnVubnksIHRoZXJlIGFyZSBhIGxvdCBvZiBvdGhlciBtZXNzIHVwcyB0b28uIEkgY2FuJ3QgYmVsaWV2ZSBieSBjb2luY2lkZW5jZSBJIGRlY2lkZWQgdG8gbG9vayB1cCB0aGlzIG1vdmllLi4uIEdvIGZpZ3VyZSEgV29uZGVyIGlmIHRoZSBwZW9wbGUgcmVuYW1pbmcgaXQgc29sZCBpdCB0byBzb21lIG1vdmllIHN0dWRpbyB0byBwdXQgb3V0IGJ1dCBpdCBpcyBhbHJlYWR5IHBsYXlpbmcgb24gU2hvd3RpbWUsIGhhIGhhLiBHb29kIGxhdWdoLiBJIGdpdmUgaXQgMS0xLzIgc3RhcnMuIEMtLCBEKyBtb3ZpZS4pAAAAAAAAAEAK3gwIrAIQrAIizAxGaXJzdCBvZiBhbGwsIG5vIG9uZSB3aXRoIGFueSBsYXcgZW5mb3JjZW1lbnQgZXhwZXJpZW5jZSAoTm90IEVSIG9yIEVNVCwgYnV0IHJlYWwgbGF3IGVuZm9yY2VtZW50KSB0YWtlcyB0aGlzIHNob3cgc2VyaW91c2x5LiBXYWxrZXIgd291bGQgYmUgZHJ1bW1lZCBvdXQgb2YgYW55IHBvbGljZSBmb3JjZSBpbiB0aGUgVVMgZm9yIGhpcyBpbGxlZ2FsIGFuZCB0b3RhbGx5IHVucHJvZmVzc2lvbmFsIHRhY3RpY3MuIE9uIHRvcCBvZiB0aGF0LCBoZSBpcyBhIGNvbWljIGJvb2sgY2hhcmFjdGVyLS0tbm8gYWN0aW5nIGFiaWxpdHksIGluY3JlZGlibHkgdHJpdGUgbGluZXMsIG5vIGNoYXJhY3RlciBkZXZlbG9wbWVudC4gVGhlIGZhY3QgdGhhdCBBbGV4IENhaGlsbCBsb3ZlcyBoaW0gc2hvd3MganVzdCBob3cgZHVtYiBibG9uZGVzIHJlYWxseSBhcmUuIEFuZCBUcml2ZXR0IGlzIHRoZSB1bHRpbWF0ZSBjbG93biBpbiBibGFjay1mYWNlLiBDb21lIG9uLS0taWYgeW91IHRoaW5rIFdhbGtlciBpcyBhIGhlYXJ0ZmVsdCBzaG93IHdpdGhvdXQgYmlhcywgdGhlbiBleHBsYWluIHdoeSBKVCBpcyB0cmVhdGVkIGFzIGEgZG9sdCwgYWx3YXlzIGlzIHRoZSBzdWJqZWN0IG9mIFdhbGtlcidzIGpva2VzLCBuZXZlciBpcyBhbGxvd2VkIHRvIGJlIHRoZSBvbmUgdG8gc29sdmUgdGhlIGNyaW1lLCBhbmQgbmV2ZXIgcmVzY3VlcyBXYWxrZXIsIHdobyBzaG91bGQgYmUgZGVhZCA1MCB0aW1lcyBvdmVyIGZvciB0aGUgc3R1cGlkIHRoaW5ncyBoZSBkb2VzLiBXaGlsZSBpdCBtYXkgYmUgdHJ1ZSB0aGF0IG1hbnkgY3JpbWluYWxzIGFyZSBldmVuIGR1bWJlciB0aGFuIHRoZSBkZXRlY3RpdmVzIHdobyBnbyBhZnRlciB0aGVtIChhbmQgYmVsaWV2ZSBtZSwgbW9zdCBjb3BzIGFyZSBkdW1iZXIgdGhhbiBkaXJ0KSwgdGhlIHNtYXJ0IG9uZXMgV2Fsa2VyIGNvbWVzIHVwIGFnYWluc3QgbmV2ZXIgc2VlbSB0byBnZXQgdGhlIHBvaW50IHRoYXQgb25jZSBXYWxrZXIgaXMgY2FwdHVyZWQsIHRoZSBqZXJrIG5lZWRzIHRvIGJlIHB1dCBvZiBoaXMgbWlzZXJ5LiBCdXQgdGhlbiBhZ2FpbiwgTm9ycmlzIHByb2R1Y2VkIHRoZSBzaG93IGFzIHdlbGwgYXMgc3RhcnJlZCBpbiBpdCwgc28gaG93IGNvdWxkIGhlIHdpbGxpbmdseSBnZXQgcmlkIG9mIGhpbXNlbGYgb3IgZXZlbiBzaG93IGhvdyBzdHVwaWQgaGlzIHRhY3RpY3MgYXJlLiBBcyBpZiBzaXggZ3V5cyBhcmUgZ29pbmcgdG8gd2FpdCBhcm91bmQgdG8gdGFrZSBoaW0gb25lIGF0IGEgdGltZS4gV2hhdCBhIHRlcnJpYmxlIHNlcmllcyEgSXQgaXMgbW9yZSBkZW1lYW5pbmcgdGhhbiBhbnkgb2YgdGhlIGhva2V5IHdlc3Rlcm5zIGxpa2UgVGhlIExvbmUgUmFuZ2VyLCBSb3kgUm9nZXJzLCBUaGUgQ2lzY28gS2lkLCBhbmQgV2lsZCBCaWxsIEhpY2tvY2ssIHRob3VnaCBJIHdvdWxkIGltYWdpbmUgdGhhdCBtb3N0IG9mIHlvdSBvbiBoZXJlIGFyZSBmYXIgdG9vIHlvdW5nIHRvIHJlbWVtYmVyIHRob3NlIHNob3dzLiBCdXQgbGlrZSB0aG9zZSBzaG93cywgaW4gdGhlIHNhbWUgd2F5IGFzIHRob3NlIHNob3dzLCBXYWxrZXIgVFIgaXMganVzdCBhcyBpbnN1bHRpbmcgYW5kIGp1c3QgcGxhaW4gc2lsbHkuKQAAAAAAAABACpYRCK0CEK0CIoQRRmlyc3Qgb2YgYWxsIHRoaXMgd2FzIG5vdCBhIHRocmVlIGhvdXIgbW92aWUgLSBUd28gaG91cnMsIHRlbiBtaW51dGVzLi4uIGxhc3QgdGltZSBpIGNoZWNrZWQgY29tbWVyY2lhbHMgYXJlbid0IGFjdHVhbGx5IHBhcnQgb2YgYSBtb3ZpZSEgUGVyaGFwcywgdGhvdWdoLCBpdCBzaG91bGQndmUgYmVlbiBhIHR3byBwYXJ0ZXIgZm9yIGEgdG90YWwgb2YgYWJvdXQgMyBob3Vycz8gWWVhaCwgd291bGQgaGF2ZSBnb3R0ZW4gbW9yZSBpbiwgYmVlbiBhYmxlIHRvIGV4cGxvcmUgc29tZSBtb3JlIGVtb3Rpb24uIE92ZXJhbGwsIHRob3VnaCwgaXQgd2FzIGFuIGludGVyZXN0aW5nIGxvb2sgaW50byB0aGUgbGl2ZXMgb2YgTHVjeSBhbmQgRGVzaS4gSSB3YXRjaCBJIExvdmUgTHVjeSBmcm9tIHRpbWUgdG8gdGltZSBhbmQgbG92ZSBpdCBidXQgbmV2ZXIgaGF2ZSBJIHJlYWQgb3Igc2VlbiBhIGJpb2dyYXBoeSwgbmV2ZXIga25ldyBhbnl0aGluZyBhYm91dCB0aGVpciBsaXZlcyBvZmYgdGhlIHNjcmVlbi4gQmVjYXVzZSBvZiB0aGlzIG1vdmllIEkgZG8gbm93IGJ1dCBJJ20gbm90IHNvIHN1cmUgdGhhdCdzIGEgZ29vZCB0aGluZy4gRXZlcnl0aGluZyBoZXJlIG5vIG9uZSByZWFsbHkgbmVlZGVkIHRvIGtub3cuIFRoaXMgd2FzIGVzc2VudGlhbGx5IGEgbW92aWUgdGhhdCBkaWRuJ3QgbmVlZCB0byBiZSBtYWRlLiBCdXQgaXQgd2FzIG1hZGUgYW5kIHRoZSByZWFzb24gaXMgYmVjYXVzZSBMdWN5ICYgRGVzaSBhcmUgc3RpbGwgc3VjaCBodWdlIHN0YXJzIGFuZCBjZXJ0YWluIHBlb3BsZSBpbiBBbWVyaWNhbiBzb2NpZXR5IGZlZWwgdGhhdCB0aGUgcmVzdCBvZiBzb2NpZXR5IG5lZWRzIHRvIGtub3cgQUxMIGFib3V0IG91ciB0diBhbmQgbW92aWUgc3RhcnMuIFRoYXQgaXMgZGVmaW5pdGVseSBzbyBub3QgdHJ1ZSBhbmQgdmVyeSwgdmVyeSBzYWQuPGJyIC8+PGJyIC8+QW55d2F5LCB3aGF0IHdhcyBzaG93biBoZXJlIGluIEx1Y3kgd2FzIHByZXR0eSBnb29kLiBUd28gY29tcGxhaW50cyAtIHRoZSBhY3RyZXNzIHdobyBwbGF5ZWQgVml2IFZhbmNlIC0gbm90IGdyZWF0IGNhc3RpbmcgYXQgYWxsLiBBbmQgdGhlIHN3aXRjaCBmcm9tIE1hZGVsaW5lIFppbWEgdG8gUmFjaGVsIFlvcmsuLi4uIHVoaGgsIGxpa2UgTHVjeSBoYWQgcGxhc3RpYyBzdXJnZXJ5IGFuZCBhbGwgb2YgYSBzdWRkZW4gc2hlJ3MgYSB3aG9sZSBuZXcgcGVyc29uIT8gVGhhdCB3YXNuJ3QgdG9vIGdyZWF0LiBCdXQgdGhlIHN0b3J5IHdlbnQgb24gYW5kIGZvY3VzZWQgb24gdGhlIHJvY2t5IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEx1Y3kgJiBEZXNpLiBObywgdGhlIGtpZHMgd2VyZSBub3Qgc2hvd24gdmVyeSBtdWNoIGF0IGFsbCBhbmQgdGhhdCB3YXNuJ3QgbmVjZXNzYXJpbHkgYSBkcmF3YmFjayB0byB0aGlzIG1vdmllIGJlY2F1c2UgbGlrZSBJIHNhaWQsIHRoaXMgZm9jdXNlZCBtYWlubHkganVzdCBvbiBMdWN5ICYgRGVzaS4gSGFkIHRoZXJlIGJlZW4gbW9yZSB0aW1lLCBoYWQgdGhlIHN0b3J5IGJlZW4gbW9yZSBhYm91dCBMdWN5J3MgZW50aXJlIGxpZmUsIHRoZW4gbWF5YmUgdGhlIGtpZHMgd291bGRhIGJlZW4gdGhlcmUgbW9yZS4gQnV0IHRoZXkgd2VyZW4ndCBzbyB3ZSBnb3QgdG8gc2VlIHRoZSBsaWtlcyBvZiBHYWJsZSAmIExvbWJhcmQsIFJlZCBTa2VsdG9uIGFuZCBCdXN0ZXIgS2VhdG9uIHZlcnkgYnJpZWZseSBpbnN0ZWFkLiBXb3csIHRoYXQgd2FzIG9uZSB0aGluZyBhYm91dCB0aGlzIHN0b3J5IHRoYXQgSSB0aG91Z2h0IHdhcyByZWFsbHkgY29vbDogaGlzIHByZXNlbmNlIGFuZCBpbmZsdWVuY2UgaW4gTHVjeSdzIGxpZmUuIFJlYWxseSBuZWF0IGFuZCBpdCdzIHRvbyBiYWQgdGhhdCB3YXNuJ3QgZXhwbG9yZWQgbW9yZS4gT2ggd2VsbC4gV2hhdCB3YXMgZXhwbG9yZWQgd2FzIGRvbmUgd2VsbCwgZm9yIHRoZSBtb3N0IHBhcnQuIEhvbmVzdGx5LCBJIGRvbid0IHRoaW5rIEknbGwgZXZlciB3YXRjaCB0aGlzIGFnYWluIGFuZCBJIGRvbid0IHRoaW5rIHRoaXMgbW92aWUnbGwgYmUgdGhhdCBtZW1vcmFibGUuIEZvciBzb21lb25lIHdobyBkaWdzIEkgTG92ZSBMdWN5IGJ1dCBpc24ndCBhbiBlbm9ybW91cyBMdWNpbGxlIEJhbGwgZmFuLCB0aGlzIHNob3VsZCBiZSBhbiBpbnRlcmVzdGluZyB3YXRjaC4gTXkgZ3JhZGUgZm9yIHRoaXM6IEIpAAAAAAAAAEAKshEIrgIQrgIioBFGaWxtIGNyaXRpY3Mgb2YgdGhlIHdvcmxkLCBJIGFwb2xvZ2l6ZS4gSXQgaXMgeW91ciBqb2IgdG8gZ2l2ZSBhZHZpY2UgdG8gdGhlIG1vdmllZ29pbmcgcHVibGljIHNvIHRoYXQgdGhleSBjYW4gd2lzZWx5IGNob29zZSB3aGF0IHRvIHNwZW5kIG1vbmV5IG9uLiBCdXQgSSBpZ25vcmVkIHlvdXIgYWR2aWNlIGFuZCBJIGhhdmUgYmVlbiBkZWVwbHkgaHVydC4gSG93ZXZlciwgbXkgZGVjaXNpb24gdG8gc2VlICJUaGUgQ2F0IGluIHRoZSBIYXQiIHdhc24ndCBtYWRlIGhhcGhhemFyZGx5LiBZb3Ugc2VlLCB0aHJlZSB5ZWFycyBhZ28gYWxsIG9mIHlvdSBjcml0aWNzIHNhaWQgdGhhdCB3ZSBzaG91bGQgYWxsIGF2b2lkIHRoZSAiY2FsYW1pdHkiIGtub3duIGFzICJIb3cgdGhlIEdyaW5jaCBTdG9sZSBDaHJpc3RtYXMiLiBUaGVuIHNvbWUgZnJpZW5kcyBvZiBtaW5lIHRvb2sgbWUgdG8gc2VlIGl0IGFuZCBpdCB0dXJuZWQgb3V0IHRvIGJlIGEgY29sb3JmdWwsIGZ1bm55IGFuZCBhbG1vc3QgaHlwbm90aWMgeXVsZXRpZGUgdHJlYXQuIFNvIHdoZW4gdGhlIGNyaXRpY3MgdW5sZWFzaGVkIHRoZWlyIGZ1cnkgYWdhaW5zdCAiVGhlIENhdCBpbiB0aGUgSGF0IiwgYW5vdGhlciBiaWcgYnVkZ2V0IFNldXNzIHVwZGF0ZSB3aXRoIGEgYmlnIG5hbWUgc3RhciBpbiB0aGUgdGl0bGUgcm9sZSwgSSB0aG91Z2h0IHRoYXQgaXQgbXVzdCBiZSB0aGUgc2FtZSBvbGQgc29uZy4gSG93IHdyb25nIEkgd2FzLjxiciAvPjxiciAvPkZvciBmaXZlIHdob2xlIG1pbnV0ZXMgSSB0aG91Z2h0IEkgd2FzIGluIHRoZSBjbGVhci4gVGhlIG9wZW5pbmcgY3JlZGl0cyBhcmUgY2xldmVyLCB0aGUga2lkcyBhcmUgY2hhcm1pbmcgYW5kIHRoZSBwcm9kdWN0aW9uIHZhbHVlcyBhcmUgdG9wIG5vdGNoLiBUaGVuIHRoZSBjYXQgc2hvd2VkIHVwLiBUaGVyZSBhcmUgbWFueSBwcm9ibGVtcyBmcm9tIHRoaXMgcG9pbnQgb24sIGJ1dCB0aGUgYmlnZ2VzdCBvbmUgd2FzIHRoZSB3b2VmdWwgbWlzY2FzdGluZyBvZiBNaWtlIE15ZXJzLiBXaGVyZSAiVGhlIEdyaW5jaCIgd2FzIHNhdmVkIGJ5IHRoZSBpbnNwaXJlZCBjYXN0aW5nIG9mIEppbSBDYXJyZXksICJUaGUgQ2F0IiB3YXMgZGVzdHJveWVkIGJ5IE15ZXJzLiBIZSBjYW4gYmUgdmVyeSBmdW5ueSB3aGVuIGhpcyBlbmVyZ2llcyBhcmUgYXBwbGllZCB3aGVyZSB0aGV5IGJlbG9uZywgY29taWMgc2tldGNoZXMuIEV2ZXJ5IG1vdmllIGhlJ3MgbWFkZSB0aGF0IHdhcyB0cnVseSBmdW5ueSB3YXMgcmVhbGx5IGp1c3QgYSBmZWF0dXJlIGxlbmd0aCBjb21lZHkgc2tldGNoLCBmcm9tICJXYXluZSdzIFdvcmxkIiB0byAiQXVzdGluIFBvd2VycyIuIFNvIGhlIHRyaWVzIHRvIGRvIHRoZSBzYW1lIHRoaW5nIGhlcmUsIGl0J3MganVzdCB0aGF0IHRoZXNlIGNvbWVkeSBza2V0Y2hlcyBhcmUgbW9yZSBsaWtlIHRoZSBzdHVmZiB0aGF0IHRoZXkgc3RpY2sgYXQgdGhlIGVuZCBvZiBTTkwsIG5vdCBmdW5ueSwganVzdCBwYWluZnVsLiBOb3QgdGhhdCB0aGUgd3JpdGVycyBoZWxwZWQgaGltIG91dCBhbnkuIEFmdGVyIHRoZSBjaGFybWluZyBwcm9sb2d1ZSB0aGUgbW92aWUgdHVybnMgaW50byBhbiBob3VyIG9mIHJlcHVsc2l2ZSBib2RpbHkgaHVtb3IgZ2FncywgcG9vcmx5IHRpbWVkIHByYXRmYWxscyBhbmQgaW5zdWx0aW5nbHkgc3R1bnRlZCBhdHRlbXB0cyBhdCBoaXAgaHVtb3IuIFRoaXMgbW92aWUgd2FzIHRoZSBtb3N0IGRpc2hlYXJ0ZW5pbmcgY2luZW1hdGljIGV4cGVyaWVuY2UgSSBoYXZlIGV2ZXIgaGFkLiBQZXJpb2QuIFNvIG11Y2ggdGFsZW50IGFuZCB3b3JrIHdlbnQgaW50byBzb21ldGhpbmcgc28gdmlsZS4gSSBrbm93IHRoYXQgdGhlIGFkdWx0IHN0YXJzIG9mIHRoaXMgbW92aWUgd2lsbCBiZSByZWxhdGl2ZWx5IHVuc2NhdGhlZCBieSB0aGlzIG1lc3MsIEkganVzdCBob3BlIHRoYXQgdGhlIHdvbmRlcmZ1bCBTcGVuY2VyIEJyZXNsaW4gYW5kIERha290YSBGYW5uaW5nIHdpbGwgZ2V0IG1vcmUgY2hhbmNlcyB0byBzaG93IHRoZWlyIGNoYXJtcyBpbiBmYXIgYmV0dGVyIG1vdmllcy4gSWYgeW91IGFyZSBhIHBhcmVudCwgcGxlYXNlIGF2b2lkIHRoaXMgbGlrZSB0aGUgcGxhZ3VlLiBXaXRoIG1vdmllcyBsaWtlICJFbGYiIGFuZCAiQnJvdGhlciBCZWFyIiBjdXJyZW50bHkgaW4gdGhlYXRlcnMsIHlvdSBoYXZlIGZhciBiZXR0ZXIgY2hvaWNlcy4pAAAAAAAAAEAK2hAIrwIQrwIiyBBGZXcgbW92aWVzIGhhdmUgZGFzaGVkIGV4cGVjdGF0aW9ucyBhbmQgdXBzZXQgbWUgYXMgbXVjaCBhcyBGaXJlIGhhcy4gVGhlIG1vdmllIGlzIHByZXRlbnRpb3VzIGdhcmJhZ2UuIEl0IGRvZXMgbm90IGFjaGlldmUgYW55dGhpbmcgYXQgYW4gYXJ0aXN0aWMgbGV2ZWwuIFRoZSBvbmx5IHRoaW5nIGl0IG1hbmFnZWQgdG8gcmVjZWl2ZSBpcyBhIGJhbiBpbiBJbmRpYS4gSWYgb25seSBpdCB3YXMgYmVjYXVzZSBvZiB0aGUgcG9vciBxdWFsaXR5IG9mIGZpbG0gbWFraW5nIHJhdGhlciB0aGFuIHRoZSB0b3BpY2FsIGNvbnRyb3ZlcnN5LCB0aGUgYmFuIHdvdWxkIGhhdmUgYmVlbiBtb3JlIGp1c3RpZmlhYmxlLjxiciAvPjxiciAvPk5vdyB0aGF0IEkndmUgZ290IG15IGRpc3RyZXNzIG91dCBvZiBteSBzeXN0ZW0sIEkgYW0gbW9yZSBhYmxlIHRvIGFuYWx5c2UgdGhlIG1vdmllOiA8YnIgLz48YnIgLz4qIEZyb20gdGhlIG9uc2V0IHRoZSBtb3ZpZSBmZWVscyB1bnJlYWwgZXNwZWNpYWxseSB3aGVuIHRoZSBwcm90YWdvbmlzdHMgc3RhcnQgY29udmVyc2luZyBpbiBFbmdsaXNoLiBUaGUgZGlyZWN0b3IsIG9mIGNvdXJzZSwgZGlkIG5vdCBtYWtlIHRoZSBtb3ZpZSBmb3IgYW4gSW5kaWFuIGF1ZGllbmNlOyBob3dldmVyIGl0IHVuZGVyZXN0aW1hdGVkIGl0cyBpbnRlcm5hdGlvbmFsIGF1ZGllbmNlcyBieSBvdmVyIHNpbXBsaWZ5aW5nIGl0LiBXYXRjaGluZyB0aGUgY2hhcmFjdGVyIG9mIHRoZSBkb21lc3RpYyBoZWxwIGNvbnZlcnNpbmcgaW4gcGVyZmVjdCBFbmdsaXNoIGlzIHRvbyB1bnJlYWwgdG8gYmUgdHJ1ZS48YnIgLz48YnIgLz4qIE5leHQgd2UgZ2V0IHJlZ3VsYXIgZ2xpbXBzZXMgaW50byBSYWRoYSdzIGRyZWFtcy4gVGhlc2Ugc2NlbmVzIGFyZSBub3QgdmVyeSBlZmZlY3RpdmUuIFRoZXkgY29taW5nIHVwIGFzIGphcnJpbmcgYW5kIG9ic3RydWN0IHRoZSBmbG93IG9mIHRoZSBtb3ZpZS4gSSdtIHN0aWxsIHdvbmRlcmluZyBob3cgdGhhdCBwaGlsb3NvcGhpY2FsIGRpYWxvZ3VlIGNvbm5lY3RlZCB0byB0aGUgc3RvcnkuIEkgZmVsdCB0aGF0IHRoZSBzdXJyZWFsaXNtIHdhcyBsb3N0LjxiciAvPjxiciAvPiogVGhlIGxvdmUgc2NlbmVzIGZlbHQgdm95ZXVyaXN0aWMgYW5kIGFyZSBwcm9iYWJseSBtZWFudCBmb3IgYXVkaWVuY2UgdGl0aWxsYXRpb24gcmF0aGVyIHRoYW4gYmVpbmcgYSBwb3dlcmZ1bCBzdGF0ZW1lbnQuIEluIGFueSBjYXNlLCB0aGV5IGRvIG5vdCBhY2hpZXZlIGVpdGhlciBvZiB0aGUgdHdvLjxiciAvPjxiciAvPiogVGhlIG5hbWVzIGNob3NlbiBmb3IgdGhlIHdvbWVuLCBSYWRoYSBhbmQgU2l0YSwgYXJlIG5hbWVzIG9mIEhpbmR1IGRlaXRpZXMgYW5kIGhlbmNlIGJlZW4gc2VsZWN0ZWQgdG8gc2hvY2sgdGhlIGF1ZGllbmNlcy4gSG93ZXZlciwgc2luY2UgdGhlIGZpbG0gd2Fzbid0IG1lYW50IGZvciBJbmRpYW4gYXVkaWVuY2VzIGluIHRoZSBmaXJzdCBwbGFjZSwgdGhlIHNob2NrLXRocm91Z2gtbmFtZS1zZWxlY3Rpb24gaXMgbm90IG1lYW50IHRvIGFjaGlldmUgaXRzIGdvYWwsIHdoaWNoIGlzIGFic3VyZC48YnIgLz48YnIgLz4qIFRoZSBxdWFsaXR5IG9mIGRpcmVjdGlvbiBpcyB2ZXJ5IHBvb3IgYW5kIHNvbWUga2V5IGFuZCBkZWxpY2F0ZSBzY2VuZXMgaGF2ZSBiZWVuIHBvb3JseSBoYW5kbGVkLiBBIGJldHRlciBkaXJlY3RvciBjb3VsZCBoYXZlIG1hZGUgYSBwb3dlcmZ1bCBlbW90aW9uYWwgZHJhbWEgb3V0IG9mIHRoZSBzdWJqZWN0LjxiciAvPjxiciAvPiogVGhlIGFjdGluZyBmZWx0IHdvb2RlbiBhbHRob3VnaCBOYW5kaXRhIERhcyBicm91Z2h0IHNvbWUgbGlmZSBpbnRvIHRoZSByb2xlLCB0aGUgb3RoZXJzIHdlcmUgd2FzdGVkLiBJIGFsd2F5cyB0aG91Z2h0IHRoYXQgU2hhYmFuYSBBem1pIHdhcyBhIGdvb2QgYWN0cmVzcyBidXQgaGVyIHRhbGVudCBpcyBub3QgZXZpZGVudCBpbiB0aGlzIGZpbG0uIFRoZSBtYWxlIGxlYWRzIHdlcmUgb3V0cmlnaHQgcnViYmlzaC48YnIgLz48YnIgLz5JbiBjYXNlIHlvdSBhcmUgYSBmYW4gb2YgRWFydGggYW5kIHdpc2ggdG8gc2VlIG1vcmUgb2YgdGhlIGRpcmVjdG9yLCBzdGF5IGF3YXkgZnJvbSB0aGlzIG9uZS4gUGxlYXNlLikAAAAAAAAAQArnBAiwAhCwAiLVBEV4Y2VsbGVudCBwZXJmb3JtYW5jZS4gVGhlcmUgc3RpbGwgYXJlIGdvb2QgYWN0b3JzIGFyb3VuZCEgQWxzbyBncmVhdCBkaXJlY3RpbmcgYW5kIHBob3RvZ3JhcGh5LiBWZXJ5IHRydWUgdG8gU2hha2VzcGVhciwgYW5kIGEgJ211c3QnIGZvciBhbGwgU2hha2VzcGVhciBmYW5zLiBNYWNiZXRoIChKYXNvbiBDb25uZXJ5KSBtb3ZlZCBtZSB0byB0ZWFycyB3aXRoIGhpcyBmaW5hbCBtb25vbG9nIChvdXQgYnJpZWYgY2FuZGxlLCBvdXQpSGUgZ2F2ZSB0aGUgc3BoZXJlIG9mIG1vcmFsIGRlY2F5IGFuZCBkYXJrIGZvcmNlcyBhIGh1bWFuIGZhY2UsIHdoaWNoIG1ha2VzIGl0IHRoZSBtb3JlIGludGVyZXN0aW5nLiBIZWxlbiBCYXhlbmRhbGUgaXMgYSB2ZXJ5IGNyZWRpYmxlIGxhZHkgTWFjYmV0aCB3aG8gY2FuIGJlIHZlcnkgY2hlZXJmdWxsIGF0IHRpbWVzIGFuZCBzb21ldGltZXMgc2hlIGp1c3QgbG9va3MgbGlrZSBhIG5hdWdodHkgZ2lybCwgYnV0IGRlYWRseSBpbiBoZXIgdGFzdGUgZm9yIGJsb29kIGFuZCBldmlsLiBJZiB5b3UgbG92ZSBkZWF0aCBhbmQgZGVjYXksIGFuZCBTaGFrZXNwZWFycyBseXJpY3MuLi4gdGhpcyBpcyB0aGUgb25lLikAAAAAAAAAQAquCQixAhCxAiKcCUV2ZXJ5b25lIGtub3dzIGFib3V0IHRoaXMgJydaZXJvIERheScnIGV2ZW50LiBXaGF0IEkgdGhpbmsgdGhpcyBtb3ZpZSBkaWQgdGhhdCBFbGVwaGFudCBkaWQgbm90IGlzIHRoYXQgdGhleSBtYWRlIHVzIHNlZSBob3cgdGhlc2UgZ3V5cyB3ZXJlLiBUaGV5IHNob3dlZCB0aGVpciBsaWZlIGZvciBhYm91dCBhIHllYXIuIFRocm91Z2hvdXQgdGhlIG1vdmllIHdlIGdldCB0byBsaWtlIHRoZW0sIHRvIGxhdWdoIHdpdGggdGhlbSBldmVuIHRob3VnaCB3ZSB0b3RhbGx5IGtub3cgd2hhdCB0aGV5J3JlIGdvbm5hIGRvLiBBbmQgVEhBVCBnaXZlcyBtZSB0aGUgY2hpbGxzLiBDYXVzZSBJIGZlbHQgZ3VpbHR5IHRvIGJlIGNoZWVyZWQgYnkgdGhlaXIgY29tbWVudHMsIGFuZCBJIGp1c3QgdGhvdWdodCBDYWwgd2FzIGEgc3dlZXQgZ3V5LiBFdmVuIHRob3VnaCBJIEtORVcgd2hhdCB3YXMgZ29ubmEgaGFwcGVuIHlvdSBrbm93PyBFdmVuIGF0IHRoZSBlbmQgb2YgdGhlIG1vdmllIHdoZW4gdGhleSB3ZXJlIGFib3V0IHRvIGNvbW1pdCBzdWljaWRlIGFuZCBqdXN0IGRlY2lkaW5nIGlmIHRoZXkgZGlkIGl0IG9uIHRoZSBjb3VudCBvZiAzIG9yIDQgSSB0aG91Z2h0IHRoaXMgd2FzIGZ1bm55IGJ1dCBzdGlsbCBJIHdhcyBob3JyaWZpZWQgdG8gc2VlIHRoZWlyIGhlYWRzIGJsb3duIG9mZi4gT2YgY291cnNlIEkgd2FzLiBJIGdvdCB0byBsaWtlIHRoZW0uIFRoZXkgd2VyZSB3aWNrZWQsIG1heWJlLCBidXQgSSBmZWx0IGxpa2UgdGhleSB3ZXJlIHJlYWxseSBub3JtYWwgZ3V5cywgdGhhdCB0aGV5IGRpZG4ndCByZWFsbHkgcmVhbGl6ZSBpdC4gQnV0IEkga25ldyB0aGV5IHdlcmUuPGJyIC8+PGJyIC8+VGhhdCdzLCBJTU8sIHRoZSBtYWluIGZvcmNlIG9mIHRoaXMgbW92aWUuIEl0IG1ha2VzIHVzIHJlYWxpemUgdGhhdCBvdXIgZnJpZW5kcywgb3IgcmVsYXRpdmVzLCBvciBhbnlvbmUsIGNhbiBiZSBwbGFubmluZyBzb21ldGhpbmcgY3JhenksIGFuZCB0aGF0IHdlIHdvbid0IGV2ZW4gbm90aWNlIGl0LiBUaGlzIG1vdmllLCBhcyBnb29kIGFzIGl0IHdhcywgbWFkZSBtZSBmZWVsIGJhZC4gQW5kIHRoYXQncyB3aHkgSSBjYW4ndCBnbyB0byBzbGVlcCByaWdodCBub3cuIFRoZXJlJ3Mgc3RpbGwgdGhpcyBsaXR0bGUgZmVlbGluZyBpbiBteSBzdG9tYWNoLiBCdXR0ZXJmbGllcy4pAAAAAAAAAEAKnQ0IsgIQsgIiiw1FdmVyeWJvZHkgd2hvIHdhbnRzIHRvIGJlIGFuIGVkaXRvciBzaG91bGQgd2F0Y2ggdGhpcyBtb3ZpZSEgSXQgc2hvd3MgeW91IGFib3V0IGV2ZXJ5IG1pc3Rha2Ugbm90IHRvIGRvIGluIGVkaXRpbmcgYSBtb3ZpZSEgTXkgZ3JhbmRtYSBjb3VsZCBoYXZlIGRvbmUgYmV0dGVyIHRoYW4gdGhhdCEgQnV0IHRoYXQncyBub3QgdGhlIG9ubHkgcmVhc29uIHdoeSB0aGlzIG1vdmllIGlzIHJlYWxseSBiYWQhIChJdCdzIGFjdHVhbGx5IHNvIGJhZCB0aGF0IEknbSBub3QgYWJsZSB0byB3cml0ZSBhIHNlbnRlbmNlIHdpdGhvdXQgZXhjbGFtYXRpb24gbWFyayEpIElmIHRoZSBmaXJzdCBlcGlzb2RlIG9mIMKRTGVzIFZpc2l0ZXVycycgd2FzIGEgcXVpdGUgZ29vZCBmYW1pbGlhbCBjb21lZHkgd2l0aCBmdW5ueSBqb2tlcyBhbmQgY3VsdCBkaWFsb2d1ZXMsIHRoaXMgc2VxdWVsIGlzIGNvcHlpbmcgYmFkbHkgdGhlIHJlY2VpcGUgb2YgdGhlIGZpcnN0IG9uZS4gVGhlIGZ1bm55IHBhcnRzIGNvdWxkIGJlIGNvdW50ZWQgb24gb25lIGhhbmQgYW5kIG1heWJlIGhhbGYgb2YgaXQuIENsYXZpZXIgaXMgb3Zlci1hY3RpbmcgaGlzIHJvbGUgZXZlbiBtb3JlIHRoYW4gaW4gdGhlIGZpcnN0IHBhcnQsIFJvYmluIGlzIHRyeWluZyB0byBhY3QgbGlrZSBMZW1lcmNpZXIgKGJlY2F1c2Ugc2hlJ3MgcmVwbGFjaW5nIGhlcikgYnV0IHRoYXQncyDCkWdyb3Rlc3F1ZScuIExlbWVyY2llciBpcyBMZW1lcmNpZXIsIFJvYmluIGlzIFJvYmluISBFdmVuIGlmIE11cmllbCBSb2JpbiBjYW4gYmUgZnVubnkgYnkgaGVyc2VsZiBvbiBzdGFnZSwgc2hlIGlzIG5vdCBpbiB0aGlzIG1vdmllIGJlY2F1c2Ugc2hlJ3Mgbm90IGFjdGluZyBhcyBzaGUgdXNlZCB0byBhY3QuIEkga25vdyB0aGF0IGl0IHNob3VsZCBiZSBoYXJkIHRvIHJlcGxhY2Ugc29tZWJvZHkgd2hvIHdhcyBnb29kIGluIGEgcm9sZSAoTGVtZXJjaWVyIG9idGFpbmVkIGEgQ8Opc2FyIGF3YXJkIGZvciBoZXIgcm9sZSBpbiB0aGUgZmlyc3QgbW92aWUpIGJ1dCBzaGUgbWFkZSBhIGJpZyBtaXN0YWtlOiBpbnN0ZWFkIG9mIHBsYXlpbmcgaGVyIHJvbGUsIHNoZSBwbGF5ZWQgwpFMZW1lcmNpZXIgcGxheWluZyBoZXIgcm9sZSchIEFzIGZvciB0aGUgc3RvcnksIGl0J3MganVzdCB0b28gbXVjaCEgT2YgY291cnNlIHdlIGtuZXcgYXQgaGUgZW5kIG9mIHRoZSBmaXJzdCBtb3ZpZSB0aGF0IHRoZXJlIHdvdWxkIGJlIGEgc2VxdWVsIGJ1dCBQb2lyw6kgYW5kIENsYXZpZXIgc2hvdWxkIGhhZSB0cmllZCB0byB3cml0ZSBhIG1vcmUgc2ltcGxlIHN0b3J5IGxpa2UgdGhlIGZpcnN0IGVwaXNvZGUuIFRoZSBnYWdzIGFyZSByZXBldGl0aXZlLCBjaGlsZGlzaCBhbmQgZMOpasOgLXZ1LiBObywgcmVhbGx5LCB0aGVyZSdzIG5vIG1vcmUgdGhhbiAzIGZ1bm55IHBhcnRzIGluIHRoaXMuIFRoZSBvbmx5IGdvb2QgdGhpbmdzIG1pZ2h0IGJlIHRoZSBjb3N0dW1lcyBhbmQgc29tZSBzcGVjaWFsIGVmZmVjdHMuIFNvIHlvdSBoYXZlIG9ubHkgMiByZWFzb25zIHRvIHdhdGNoIGl0OiAxKSBpZiB5b3Ugd2FudCB0byBsZWFybiBob3cgdG8gZWRpdCBhd2Z1bGx5IGEgbW92aWUsIDIpIGlmIHlvdSB3YW50IHRvIHdhc3RlIHlvdXIgdGltZSBvciBpZiB5b3UgcmVhbGx5IG5lZWQgYSDCkWJyYWlubGVzcyBtb21lbnQnISAyLzEwKQAAAAAAAABACqgsCLMCELMCIpYsRWxmcmllZGUgSmVsaW5laywgbm90IHF1aXRlIGEgaG91c2Vob2xkIG5hbWUgeWV0LCBpcyBhIHdpbm5lciBvZiB0aGUgTm9iZWwgcHJpemUgZm9yIGxpdGVyYXR1cmUuIEhlciBub3ZlbCBzcGF3bmVkIGEgZmlsbSB0aGF0IHdvbiBzZWNvbmQgcHJpemUgYXQgQ2FubmVzIGFuZCB0b3AgcHJpemVzIGZvciB0aGUgbWFsZSBhbmQgZmVtYWxlIGxlYWRzLiBBbSBJIGEgZGlub3NhdXIgaW4gbWF0dGVycyBvZiBhZXN0aGV0aWMgYXBwcmVjaWF0aW9uIG9yIGhhcyBhcnQgYmVjb21lIHNvIGRlYmFzZWQgdGhhdCBhbnl0aGluZyBnb2VzPzxiciAvPjxiciAvPidHb2JibGUsIGdvYmJsZScgaXMgdGhlIGZhdm91cmVkIG9ydGhvZ3JhcGhpYyByZXByZXNlbnRhdGlvbiBpbiBCcml0YWluIG9mIHRoZSBidWJibGluZyBub2lzZSBtYWRlIGJ5IGEgdHVya2V5LiBJbiB0aGUgZmlsbSB3b3JsZCBhIHR1cmtleSBpcyBhIG1vbnVtZW50YWwgZmxvcCBhcyBtZWFzdXJlZCBieSBib3ggb2ZmaWNlIHJlY2VpcHRzIG9yIGNyaXRpY2FsIHJlY2VwdGlvbi4gJ0dvYmJsZSwgZ29iYmxlJyBhbmQgVGhlIFBpYW5vIFRlYWNoZXIgYXJlIHBlcmZlY3QgcGFydG5lcnMuPGJyIC8+PGJyIC8+VGhlIGVtYmFycmFzc2luZyBhd2Z1bG5lc3Mgb2YgdGhpcyB3aWRlbHkgcHJhaXNlZCBmaWxtIGNhbm5vdCBiZSBvdmVyc3RhdGVkLiBJdCBiZWdpbnMgdmVyeSBiYWRseSwgYXMgaWYgbWFkZSB0byBhbm5veSB0aGUgdmlld2VyLiBDcmVkaXRzIGludGVycnVwdCBpbmNvbnNlcXVlbnRpYWwgc2NlbmVzIGZvciBtb3JlIHRoYW4gMTEgbWludXRlcy4gV2UgYXJlIGludHJvZHVjZWQgdG8gUHJvZmVzc29yIEVyaWthIEtvaHV0LCBhcHBhcmVudGx5IHRoZSBhbHRlciBlZ28gb2YgdGhlIGFjY29sYWRlZCBhdXRob3Jlc3MsIGEgc3RvbnkgcHJvZmVzc29yIG9mIHBpYW5vLiBTaGUgbGl2ZXMgd2l0aCBoZXIgaHVza3kgYW5kIGRvbWluZWVyaW5nIG11bS4gRGFkIGlzIGFuIGluc3RpdHV0aW9uYWxpc2VkIG1hZG1hbiB3aG8gZGllcyB1bnNlZW4gZHVyaW5nIHdoYXQgcGFzc2VzIGZvciB0aGUgYWN0aW9uLjxiciAvPjxiciAvPlJldmlld2luZyBUaGUgUGlhbm8gVGVhY2hlciBpcyBkaWZmaWN1bHQsIGJleW9uZCByZWdpc3RlcmluZyBpdHMgdW5wbGVhc2FudG5lc3MuIFdoYXQgd2Ugc2VlIGluIHRoZSBmaWxtIChhbmQgbWlnaHQgcmVhZCBpbiB0aGUgYm9vaywgZm9yIGFsbCBJIGtub3cpIGlzIGEgdGF3ZHJ5LCBleHBsb2l0YXRpdmUsIG5vbnNlbnNpY2FsIHRhbGUgb2YgYW4gZW1vdGlvbmFsIHBlbmR1bHVtIHRoYXQgc3dpbmdzIGhpdGhlciBhbmQgdGhpdGhlciB3aXRob3V0IG1vdmluZyBvbi48YnIgLz48YnIgLz5FcmlrYSwgd2hvc2UgbmFtZSBpcyBtaW5pbWFsbHkgdXNlZCwgaXMgaW5pdGlhbGx5IHNob3duIGFzIGEgcGVyc29uIHdpdGggaW50ZW5zZSBtdXNpY2FsIHNlbnNpdGl2aXR5IGJ1dCBvdGhlcndpc2UgdG90YWxseSByZXByZXNzZWQuIE5vdCBxdWl0ZSwgYmVjYXVzZSB0aGVyZSdzIGEgaGFuZGJhZ3MgYXQgdHdvIHBhY2VzIHNjZW5lIHdpdGggaGVyIGdyYXZlbGx5LXZvaWNlZCBtYW1hbiBlYXJseSBvbiB0aGF0IGVuZHMgd2l0aCBwcm9mdXNlIGFwb2xvZ2llcy4gSWYgYSByZXZpZXdlciBoYXMgdG8gKHlhd24pIGV4dHJhY3QgYSBsZWl0bW90aWYgKHdoeSBub3QgdXNlIGEgcHJldGVudGlvdXMgd29yZCB3aGVuIGEgc2ltcGxlciBvbmUgd291bGQgZG8pLCBFbHJpa2EncyB2aW9sZW50bHkgYWx0ZXJuYXRpbmcgbW9vZHMgd291bGQgYmUgaXQuPGJyIC8+PGJyIC8+QSB5b3VuZyBodW5rLCBXYWx0ZXIsIHN0dWR5aW5nIHRvIGJlY29tZSBhICdsb3cgdm9sdGFnZScgZW5naW5lZXIsIHdoYXRldmVyIHRoYXQgaXMsIGFuZCBwbGF5aW5nIGljZSBob2NrZXkgaW4gaGlzIGZldyBsZWlzdXJlIG1vbWVudHMsIGlzIGFsc28gYSB0YWxlbnRlZCBwaWFuaXN0LiBIZSBlbmNvdW50ZXJzIEVscmlrYSBhdCBhbiBvbGQtZmFzaGlvbmVkIHJlY2l0YWwgaW4gYSBsdXh1cnkgYXBhcnRtZW50IGluIHdoYXQgbWF5IG9yIG1heSBub3QgYmUgUGFyaXMuIEluIHRoZSBnbGliIGZhc2hpb24gb2Ygc28gbXVjaCBhcnQsIGhlIGltbWVkaWF0ZWx5IGZhbGxzIGluIGxvdmUgYW5kIHN0YXJ0cyB0byAnY2hlcmNoZXogbGEgZmVtbWUnLjxiciAvPjxiciAvPlJlcHJlc3NlZCBFcmlrYSBoYXMgYSBsaWtpbmcgZm9yIGhhcmRjb3JlIHBvcm5vZ3JhcGh5LCBzaG93biBicmllZmx5IGJ1dCBncmFwaGljYWxseSBmb3IgYSBmZXcgc2Vjb25kcyB3aGlsZSBzaGUgc25pZmZzIGEgdGlzc3VlIHRha2VuIGZyb20gdGhlIHdhc3RlIGJhc2tldCBpbiB0aGUgcHJpdmF0ZSBib290aCB3aGVyZSBzaGUgd2F0Y2hlcy48YnIgLz48YnIgLz5XYWx0ZXIgcGVyZm9ybXMgYSBicmlsbGlhbnQgYXVkaXRpb24gYW5kIGlzIGdydWRnaW5nbHkgYWNjZXB0ZWQgYXMgYSBwcml2YXRlIHN0dWRlbnQgYnkgRXJpa2EsIHdob3NlIHRlYWNoaW5nIHN0eWxlIGlzIGNoYXJhY3RlcmlzZWQgYnkgcmVtb3RlbmVzcywgaG9zdGlsaXR5LCBkaXNjb3VyYWdlbWVudCBhbmQgaHVtaWxpYXRpb24uPGJyIC8+PGJyIC8+SGUgc29vbiBkZWNsYXJlcyBoaXMgbG92ZSBhbmQgYmVmb3JlIGxvbmcgcHVyc3VlcyBFcmlrYSBpbnRvIHRoZSBMYWRpZXMgd2hlcmUgdGhleSBlbmdhZ2UgaW4gbWlsZCBoYW5reSBwYW5reSBhbmQgaW5jb21wbGV0ZSBvcmFsIHNleC4gRXJpa2EgcmV0YWlucyBjb250cm9sIG92ZXIgaGVyIGxvdmVzaWNrIHN3YWluLiBTaGUgcHJvbWlzZXMgdG8gc2VuZCBoaW0gYSBsZXR0ZXIgb2YgaW5zdHJ1Y3Rpb24gZm9yIGZ1cnRoZXIgcGxlYXN1cmFibGUgZXhjaGFuZ2VzLjxiciAvPjxiciAvPkluIHRoZSBtZWFudGltZSwgY2hpbGxpbmdseSBqZWFsb3VzIGJlY2F1c2Ugb2YgV2FsdGVyJ3Mga2luZG5lc3MgdG8gYSBuZXJ2b3VzIHN0dWRlbnQgd2hvIGlzIGxpdGVyYWxseSBoYXZpbmcgdGhlIHNoaXRzIGJlZm9yZSBhIHJlaGVhcnNhbCBmb3Igc29tZSBmdXR1cmUgY29uY2VydCwgRXJpa2EgZmlsbHMgdGhlIHN0dWRlbnQncyBjb2F0IHBvY2tldCB3aXRoIGJyb2tlbiBnbGFzcywgY2F1c2luZyBzZXZlcmUgbGFjZXJhdGlvbnMgdG8gdGhvc2UgZGVsaWNhdGUgcGlhbm8tcGxheWluZyBoYW5kcy48YnIgLz48YnIgLz5UaGUgbmV4dCBiaWcgc2NlbmUgKGJ5LXBhc3NpbmcgdGhlIGdlbml0YWwgc2VsZi1tdXRpbGF0aW9uLCBldGMpIGhhcyBXYWx0ZXIgdHVybmluZyB1cCBhdCB0aGUgYXBhcnRtZW50IEVyaWthIHNoYXJlcyB3aXRoIGhlciBtb3RoZXIuIEVyaWthIHdhbnQgdG8gYmUgaHVtaWxpYXRlZCwgYm91bmQsIHNsYXBwZWQsIGV0Yy4gU2Vuc2libGUgV2FsdGVyIGlzLCBmb3IgdGhlIG1vbWVudCwgcmVwdWxzZWQgYW5kIG1hcmNoZXMgb2ZmIGludG8gdGhlIG5pZ2h0LjxiciAvPjxiciAvPkF0IHRoaXMgcG9pbnQgdGhlcmUncyBzdGlsbCBuZWFybHkgYW4gaG91ciB0byBnby4gVGhlIHZpZXdlciBjYW4gb25seSBmZWFyIHRoZSB3b3JzdC4gRXJpa2EgdHJhY2tzIGRvd24gV2FsdGVyIHRvIHRoZSBza2F0aW5nIHJpbmsgd2hlcmUgaGUgZG9lcyBoaXMgaWNlIGhvY2tleSBwcmFjdGljZS4gVGhleSByZXRpcmUgdG8gYSBiYWNrIHJvb20uIEx1c3R5IFdhbGx5IGlzIHVuYWJsZSB0byByZXNpc3QgdGhlIGhhbmRzIHR1Z2dpbmcgYXQgaGlzIHRyb3VzZXJzLiBIaXMgJ2JhYnkgZ3JhdnknIGlzIHNvb24gZXhwZWxsZWQgd2l0aCBvdGhlciBzdG9tYWNoIGNvbnRlbnRzLiBIbyBodW0uPGJyIC8+PGJyIC8+UmVwdWxzZWQgYnV0IGhvb2tlZCwgcGVyaGFwcyBkZXNpcm91cyBvZiByZXZlbmdlIGZvciB0aGUgaW5zdWx0IHNvIHJlY2VudGx5IGJhcmZlZCBvbiB0aGUgZmxvb3IsIFdhbHRlciByZXR1cm5zIHRvIEVyaWthJ3MgYXBhcnRtZW50LiBDYW4geW91IGd1ZXNzIHdoYXQgaGFwcGVucyBub3c/IEl0J3Mgbm90IHZlcnkgZGVlcCBvciBkaWZmaWN1bHQuIFllcywgaGUgYmVjb21lcyBhIGJydXRlIHdoaWxlIEVyaWthIGJlY29tZXMgYSB2aWN0aW0uIE9uZSBtb21lbnQgaGUncyBsb2NraW5nIG1hbWFuIGluIGhlciByb29tIGFuZCBzbGFwcGluZyBFcmlrYSwgdGhlIG5leHQgaGUncyBraWNraW5nIGhlciBpbiB0aGUgZmFjZSwgaGF2aW5nIHNleCB3aXRoIGhlciBhbmQgcmVuZXdpbmcgaGlzIGRlY2xhcmF0aW9ucyBvZiBsb3ZlLiA8YnIgLz48YnIgLz5BbSBJIGJlaW5nIHVuZmFpciBpbiB0aGlzIHN1bW1hcnk/IFdhdGNoIHRoZSBmaWxtIGlmIHlvdSB3YW50LCBidXQgSSdkIGFkdmlzZSB5b3Ugbm90IHRvLjxiciAvPjxiciAvPkFueW9uZSBjYW4gc2VlIGV0ZXJuaXR5IGluIGEgZ3JhaW4gb2Ygc2FuZCBpZiB0aGV5J3JlIGluIHRoZSByaWdodCBtb29kLiBJIGNvdWxkIGV4cGF0aWF0ZSBhdCB0aGUgY2hhbGxlbmdpbmcgZGVwaWN0aW9uIG9mIGh1bWFuIHJlbGF0aW9uc2hpcHMgY29udmV5ZWQgYnkgdGhpcyBmaWxtIGlmIEkgd2FudGVkLiBCdXQgSSAncHJlZmVyIG5vdCB0bycsIGJlY2F1c2UgdGhpcyBpcyBhIGNoZWFwIGFuZCBuYXN0eSBmaWxtIHRoYXQgYXBwZWFscyB0byBiYXNlIGluc3RpbmN0cyBhbmQgc2F5cyBub3RoaW5nLjxiciAvPjxiciAvPkknbSBzdXBwb3NlZCB0byBzYXkgdGhhdCBwYXJlbnRhbGx5IHJlcHJlc3NlZCBFcmlrYSBsb25ncyBmb3IgbG92ZSwgaW5lZmZlY3RpdmVseSBzZWVrcyBpdCBpbiBwb3Jub2dyYXBoeSwgaW5hcHByb3ByaWF0ZWx5IHJlamVjdHMgaXQgd2hlbiBpdCBsaXRlcmFsbHkgYXBwZWFycywgcGluayBhbmQgdGhyb2JiaW5nLCB1bmRlciBoZXIgbm9zZSwgYmVsYXRlZGx5IHJlYWxpc2VzIHRoYXQgc2hlIGRvZXNuJ3QgbGlrZSBiZWluZyBodXJ0LCBibGFoLCBibGFoLCBibGFoLjxiciAvPjxiciAvPlRoZSB3b3JsZCBoYXMsIGZvciByZWFzb25zIG5vdCBleHBsYWluZWQsIHN0dW50ZWQgaGVyLiBTaGUgYXBwYXJlbnRseSBtYWtlcyBhIG1vbnN0ZXIgb3V0IG9mIHNvbWVvbmUgd2hvIGFwcGVhcmVkIHN1cGVyZmljaWFsbHkgbG92aW5nIC0gYnV0IHN1cmVseSB3ZSBhbGwga25vdyB0aGF0IGFueSBtYW4gaXMgcG90ZW50aWFsbHkgYSB2aW9sZW50IHJhcGlzdCwgYmVjYXVzZSB0aGF0J3MgaGlzIGVzc2VudGlhbCBuYXR1cmUgaG93ZXZlciBtdWNoIGhlIHRyaWVzIHRvIHRlbGwgaGltc2VsZiBhbmQgdGhlIHdvcmxkIG90aGVyd2lzZS48YnIgLz48YnIgLz5BdCB0aGUgZW5kLCBpZiB5b3UgaGF2ZSB0aGUgcGF0aWVuY2UgdG8gYmUgdGhlcmUsIHRoZXJlJ3MgYSBzbWFsbCB0d2lzdC4gQmVmb3JlIGdvaW5nIHRvIHRoZSBmaW5hbCBzY2VuZSwgd2hlcmUgc2hlJ3MgZHVlIHRvIHBlcmZvcm0gYXMgYSBzdWJzdGl0dXRlIGZvciB0aGUgdW5kZXJ3ZWFyLXNvaWxpbmcgc3R1ZGVudCB3aXRoIHRoZSBsYWNlcmF0ZWQgaGFuZHMsIEVyaWthIHBhY2tzIGEga25pZmUgaW4gaGVyIGhhbmRiYWcuIEZvciBXYWx0ZXI/PGJyIC8+PGJyIC8+WWVzLCB5b3UncmUgYWhlYWQgb2YgbWUuIFNoZSBzdGFicyBoZXJzZWxmIGluIGEgbm9uZSBsaWZlLXRocmVhdGVuaW5nIGFyZWEgYW5kIGxlYXZlcy4gUm9sbCBjcmVkaXRzLjxiciAvPjxiciAvPklmIHRoaXMgZWFybmVkIHRoZSBzZWNvbmQgcHJpemUgYXQgQ2FubmVzLCBqdXN0IGhvdyBiYWQgd2VyZSB0aGUgcmVzdCBvZiB0aGUgZW50cmllcz8pAAAAAAAAAEAKjgcItAIQtAIi/AZFZCBXb29kIHJpZGVzIGFnYWluLiBUaGUgZmFjdCB0aGF0IHRoaXMgbW92aWUgd2FzIG1hZGUgc2hvdWxkIGdpdmUgYW55IHlvdW5nPGJyIC8+PGJyIC8+YXNwaXJpbmcgZmlsbSBtYWtlciBob3BlLiBBbnkgc2NyZWVucGxheSB5b3UgbWlnaHQgaGF2ZSB0aG91Z2h0IG9mIHVzaW5nIHRvPGJyIC8+PGJyIC8+bGluZSBhIGxpdHRlcmJveCBvciBhIGJpcmRjYWdlIHNob3VsZCBub3cgbm90IHNlZW0gdGhhdCBiYWQuIERvIG5vdCB3YXRjaCB0aGlzIG1vdmllIHVubGVzcyB5b3UgaGF2ZSBhIGhlYWx0aHkgc3Rhc2ggb2YgVHlsZW5vbCBvciBSb2xhaWRzLiBXYXRjaGluZyB0aGlzPGJyIC8+PGJyIC8+bW92aWUgbWFkZSBtZSByZWFsaXplIHRoYXQgQm9hIHZzLiBQeXRob24gd2FzIG5vdCB0aGF0IGJhZCBhZnRlciBhbGwuIEl0IHByb2JhYmx5IHdvdWxkIGhhdmUgYmVlbiBiZXR0ZXIgdG8gZG8gdGhpcyBtb3ZpZSBpbiBDbGF5bWF0aW9uIGFzIGF0IGxlYXN0IHRoYXQgd2F5IG5vIGFjdG9yIHdvdWxkIGhhdmUgaGFkIHRvIHRha2UgY3JlZGl0IGZvciBiZWluZyBpbiB0aGlzIGZpbG0uIEl0IGlzIHVuZGVyc3RhbmRhYmxlIHdoeSB0aGlzIGRpcmVjdG9yIGhhcyBzbyBtYW55IGFsaWFzZXMuIFRoZXJlIGlzIGEgYnJpZ2h0IHNpZGUgdG8gd2F0Y2hpbmcgdGhpcyBtb3ZpZSBpbiB0aGF0IGlmIHlvdSBjYW4gZ2V0IHNvbWVvbmUgdG8gYnJpbmcgeW91IGEgYmFnIG9mIGNoaXBzLCB0aGVuIHlvdSBjYW4gZWF0IHlvdXIgd2F5IG91dCBvZiB0aGUgY29jb29uIG9mIGNoZWVzZSB0aGF0IHN1cnJvdW5kcyB5b3UgZW5hYmxpbmcgeW91IHRvPGJyIC8+PGJyIC8+bWFrZSB5b3VyIHRvd2FyZCB5b3VyIFRWIHNldCdzIGNvY29vbiBvZiBjaGVlc2UgdGhhdCBzdXJyb3VuZHMgaXQuKQAAAAAAAABACt0iCLUCELUCIssiRHJhbWF0aWMgbGljZW5zZSAtIHNvbWUgaGF0ZSBpdCwgdGhvdWdoIGl0IGlzIG5lY2Vzc2FyeSBpbiByZXRlbGxpbmcgYW55IGxpZmUgc3RvcnkuIEluIHRoZSBjYXNlIG9mICJMdWN5IiwgdGhlIG1haW4gcG9pbnRzIG9mIEx1Y2lsbGUgQmFsbCdzIHRlZW5hZ2UgeWVhcnMsIGVhcmx5IGNhcmVlciBhbmQgMjAgeWVhciBtYXJyaWFnZSB0byBEZXNpIEFybmF6IGFyZSBhbGwgaW5jbHVkZWQsIGFsYmVpdCBpbiBhIHRydW5jYXRlZCBhbmQgcmV3b3JrZWQgd2F5LjxiciAvPjxiciAvPlRoZSBtYWluIGVtb3Rpb25hbCBwb2ludHMgb2YgTHVjeSdzIGxpZmUgYXJlIG1hZGUgY2xlYXI6IEx1Y2lsbGUncyBzdHJ1Z2dsZSB0byBmaW5kIGhlciBuaWNoZSBhcyBhbiBhY3RyZXNzLCBmaW5hbGx5IGJsb3Nzb21pbmcgaW50byB0aGUgYnJpbGxpYW50IGNvbWVkaWVubmUgd2hvIG1hZGUgdGhlIGNoYXJhY3RlciBMdWN5IFJpY2FyZG8gYSBsZWdlbmQ7IGhlciB0dXJidWxlbnQsIHJvbWFudGljIGFuZCB1bHRpbWF0ZWx5IGltcG9zc2libGUgbWFycmlhZ2UgdG8gRGVzaSBBcm5hejsgTHVjeSAmIERlc2kgY3JlYXRpbmcgdGhlIGZpcnN0IHRlbGV2aXNpb24gZW1waXJlIGFuZCBmb3JldmVyIHNlY3VyaW5nIHRoZWlyIHBsYWNlIGluIGhpc3RvcnkgYXMgVFYncyBtb3N0IG1lbW9yYWJsZSBzaXRjb20gY291cGxlLjxiciAvPjxiciAvPkFzIEx1Y2lsbGUgQmFsbCwgUmFjaGVsIFlvcmsgZG9lcyBhIGNvbW1lbmRhYmxlIGpvYi4gRG8gbm90IGV4cGVjdCB0byBzZWUgcXVpdGUgdGhlIHNhbWUgbWlyYWN1bG91cyB0cmFuc2Zvcm1hdGlvbiBsaWtlIHRoZSBvbmUgSnVkeSBEYXZpcyBtYWRlIHdoZW4gcGxheWluZyBKdWR5IEdhcmxhbmQsIGJ1dCBZb3JrIG1ha2VzIEJhbGwgc3Ryb25nLXdpbGxlZCB5ZXQgbGlrYWJsZSwgYW5kIGlzIHZlcnkgZnVubnkgaW4gaGVyIG93biByaWdodC4gRXZlbiB0aG91Z2ggaGVyIGNvbWVkaWMtdGltaW5nIGlzIGRpZmZlcmVudCB0aGFuIEx1Y3kncywgc2hlIGlzIHN0aWxsIGJlbGlldmFibGUuIFRoZSBmaWxtIG5ldmVyIGdvZXMgaW50byBtdWNoIGRldGFpbCBhYm91dCBoZXIgcGVyZmVjdGlvbmlzdGljIGJlaGF2aW91ciBvbiB0aGUgc2V0LCBhbmQgaGVyIG1pc3RyZWF0bWVudCBvZiBWaXZpYW4gVmFuY2UgZHVyaW5nIHRoZSBlYXJseSAiSSBMb3ZlIEx1Y3kiIHllYXJzLCBidXQgd2F0Y2hpbmcgWW9yayBwb3J0cmF5IEx1Y3kgcmVoZWFyc2luZyBwcml2YXRlbHkgaXMgYSBuaWNlIGluY2x1c2lvbi48YnIgLz48YnIgLz5EYW5pZWwgUGlubyBpcyB0aGlubmVyIGFuZCBsZXNzIGNoYXJpc21hdGljIHRoYW4gdGhlIHJlYWwgRGVzaSB3YXMsIGJ1dCBoZSBkb2VzIGhhdmUgaGlzIG93biBjaGFybSBhbmQgZG9lcyBhIG1vc3RseSBkZWNlbnQgam9iIHdpdGggRGVzaSdzIGFjY2VudCwgZXNwZWNpYWxseSBpbiB0aGUgb3BlbmluZyBzY2VuZS4gTWFkZWxpbmUgWmltYSB3YXMgZGVjZW50LCBpZiBub3Qgb3Zlcmx5IG1lbW9yYWJsZSwgYXMgdGhlIHRlZW4tYWdlZCBMdWN5LjxiciAvPjxiciAvPlZpdmlhbiBWYW5jZSBhbmQgV2lsbGlhbSBGcmF3bGV5IHdlcmUgbm90IGZlYXR1cmVkIG11Y2gsIHRoYW5rZnVsbHksIHNpbmNlIFJlYmVjY2EgSG9iYnMgYW5kIFJ1c3NlbGwgTmV3bWFuIHdlcmUgbm90IHZlcnkgY29udmluY2luZyBpbiB0aGUgcm9sZXMuIE5vdCB0aGF0IHRoZXkgYXJlbid0IGdvb2QgYWN0b3JzIGluIHRoZWlyIG93biByaWdodCwgdGhleSBqdXN0IHdlcmUgbm90IGFsbCB0aGF0IHN1aXRlZCB0byB0aGUgcGVvcGxlIHRoZXkgd2VyZSBwbGF5aW5nLiBNb3N0IG9mIHRoZSBhY3RvcnMgd2VyZSBmcm9tIEF1c3RyYWlsaWEgYW5kIE5ldyBaZWxhbmQsIGFuZCB0aGUgcmVwcmVzc2VkIGFjY2VudHMgYXJlIGRldGVjdGFibGUgYXQgdGltZXMuPGJyIC8+PGJyIC8+QWx0aG91Z2ggdGhlIG1haW4gc3RydWN0dXJlIG9mIHRoZSBmaWxtIHN0aWNrcyB0byBoaXN0b3JpY2FsIGZhY3QsIHRoZXJlIGFyZSBtYW55IGRldmlhdGlvbnMsIHNvbWUgZm9yIHNlZW1pbmdseSBpbmV4cGxpY2FibGUgcmVhc29ucy4gSmVzcyBPcHBlbmhlaW1lciwgdGhlIGhlYWQgd3JpdGVyIG9mIEx1Y3kncyByYWRpbyBzaG93ICJNeSBGYXZvdXJpdGUgSHVzYmFuZCIgd2hpY2ggYmVnYW4gaW4gMTk0OCwgaXMgZGVwaWN0ZWQgaW4gdGhpcyBmaWxtIGFzIGFycml2aW5nIG9uIHRoZSBzY2VuZSB0byBoZWxwIHdpdGggIkkgTG92ZSBMdWN5IiBpbiAxOTUxLCBjb21wbGV0ZWx5IGRpc3JlZ2FyZGluZyB0aGUgZmFjdCB0aGF0IGhlIHdhcyB0aGUgbWFpbiBjcmVhdG9yISBUaGlzIG1vdmllIGFsc28gZGVwaWN0cyBNYXJjIERhbmllbHMgYXMgYmVpbmcgdGhlIG1haW4gIkkgTG92ZSBMdWN5IiBkaXJlY3RvciBmb3IgaXRzIGVudGlyZSBydW4sIGNvbXBsZXRlbHkgaWdub3JpbmcgdGhlIGZhY3QgdGhhdCBoZSB3YXMgcmVwbGFjZWQgYnkgV2lsbGlhbSBBc2hlciBhZnRlciB0aGUgZmlyc3Qgc2Vhc29uISBBbHNvLCB0aG91Z2ggSSBmaWd1cmUgdGhpcyB3YXMgZHVlIHRvIGJ1ZGdldGFyeSBjb25zdHJhaW50cywgdGhlIFJpY2FyZG8ncyBhcmUgc2hvd24gdG8gbGl2ZSBpbiB0aGUgc2FtZSBhcGFydG1lbnQgZm9yIHRoZWlyIGVudGlyZSBzdGF5IGluIE5ldyBZb3JrLCB3aGVuIGluIHJlYWxpdHkgdGhleSBjaGFuZ2VkIGFwYXJ0bWVudHMgaW4gMTk1My4gVGhlIGtpdGNoZW4gc2V0IGlzIHNsaWdodGx5IGxhcmdlciBhbmQgb2ZmLXNjYWxlIGZyb20gdGhlIG9yaWdpbmFsIGFzIHdlbGwuIFRoZSBDb25uZWN0aWN1dCBob21lIGxvb2tzIHByZXR0eSBjbG9zZSB0byB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGUgcmlnaHQgYW5kIGxlZnQgc2lkZXMgb2YgdGhlIGhvdXNlIGhhdmUgYmVlbiBjb25kZW5zZWQgYW5kIHJlc3RydWN0dXJlZC4gPGJyIC8+PGJyIC8+VGhlcmUncyBhbHNvIERlc2kgdGFsa2luZyBhYm91dCBidXlpbmcgUktPIGluIDE5NTMsIGR1cmluZyBMdWN5J3MgcmVkLXNjYXJlIGluY2lkZW50LCBldmVuIHRob3VnaCBSS08gZGlkIG5vdCBoaXQgdGhlIG1hcmtldCB1bnRpbCAxOTU3LiBUaGVzZSBjaGFuZ2VzIHdlbGwgY291bGQgaGF2ZSBiZWVuIGZvciBkcmFtYXRpYyBsaWNlbnNlLCBhbmQgdGhlIGZpbG0gZG9lcyB3b3JrIGF0IGNvbnZleWluZyB0aGUgbWFpbiBmYWN0cywgYnV0IHdvdWxkIGl0IGhhdmUgaHVydCB0aGVtIHRvIHNob3cgYSBiaXQgbW9yZSByZXNwZWN0IHRvIE9wcGVuaGVpbWVyIGFuZCBBc2hlciwgdHdvIHZpdGFsIGZpZ3VyZXMgaW4gIkkgTG92ZSBMdWN5IiBoaXN0b3J5PyBUaGUgYmlnZ2VzdCBnYWZmIGNvbWVzIGluIHRoZSAiSSBMb3ZlIEx1Y3kiIHJlY3JlYXRpb24gc2NlbmVzLCBhdCBsZWFzdCBhIGZldyBvZiB0aGVtLiBJdCdzIGFsd2F5cyByaXNreSByZWNyZWF0aW5nIHNvbWV0aGluZyB0aGF0IGlzIGNhcHR1cmVkIG9uIGZpbG0gYW5kIGhhcyBiZWVuIHNlZW4gYnkgYmlsbGlvbnMgb2YgcGVvcGxlLCBidXQgZXZlbiBtb3JlIHNvIHdoZW4gT0JWSU9VUyBDSEFOR0VTIGFyZSBtYWRlLiBUaGUgc2NlbmUgd2l0aCB0aGUgZ2lhbnQgYnJlYWQgbG9hZiB3YXMgdHJ1bmNhdGVkLCBhbmQgYW55b25lIGF0IGFsbCBmYW1pbGlhciB3aXRoIHRoYXQgZXBpc29kZSB3b3VsZCBoYXZlIG5vdGljZWQgdGhlIGRpZmZlcmVuY2VzIHJpZ2h0IGF3YXkhIFRoZSAiV2UncmUgSGF2aW5nIEEgQmFieSIgbnVtYmVyIHdhcyBzaG9ydGVuZWQgYXMgd2VsbCwgYnV0IG90aGVyIHRoYW4gdGhhdCBpdCB3YXMgcHJhY3RpY2FsbHkgZGVhZCBvbi4gQnkgZmFyIHRoZSBiZXN0IHdhcyB0aGUgImdyYXBlLXN0b21waW5nIiBzY2VuZSwgd2l0aCBSYWNoZWwgWW9yayByZWFsbHkgbmFpbGluZyBMdWN5J3MgbWFubmVyaXNtcy4gVGhlIHByb2R1Y2VycyBtYWRlIHRoZSB3aXNlIGRlY2lzaW9uIG5vdCB0byBhdHRlbXB0IGRpcmVjdGx5IHJlY3JlYXRpbmcgdGhlICJWaXRhbWV0YXZlZ2FtaW4iIGFuZCBjYW5keSBmYWN0b3J5IGJpdHMsIGluc3RlYWQgc2hvd2luZyB0aGUgYWN0b3JzIHJlaGVhcnNlIHRoZW0uIFRoZXNlIHNjZW5lcyBwcm92ZWQgZWZmZWN0aXZlIGJlY2F1c2Ugb2YgdGhhdCBhcHByb2FjaC48YnIgLz48YnIgLz5UaGUgZmlsbSdzIG1haW4gZmF1bHQgaXMgdGhhdCBpdCBtYWtlcyB0aGUgYXNzdW1wdGlvbiB0aGUgdmlld2VycyBhbHJlYWR5IGtub3cgYSBncmVhdCBkZWFsIGFib3V0IEx1Y3kncyBsaWZlLCBzaW5jZSBtdWNoIGlzIHNraW1tZWQgb3ZlciBvciBvbWl0dGVkIGF0IGFsbC4gT3ZlcmFsbCwgdGhvdWdoLCBpdCBnaXZlcyBhIGRlY2VudCBwb3J0cmFpdCBvZiBMdWN5ICYgRGVzaSdzIG1hcnJpYWdlLCBhbmQgdGhlIGZhY3R1YWwgZXJyb3JzIGNhbiBiZSBvdmVybG9va2VkIHdoZW4gdGhlIGNoYXJhY3RlciBkZXZlbG9wbWVudCB3b3JrcyBlZmZlY3RpdmVseS4pAAAAAAAAAEAKzwwItgIQtgIivQxEci4gU2V1c3Mgd291bGQgc3VyZSBiZSBtYWQgcmlnaHQgbm93IGlmIGhlIHdhcyBhbGl2ZS4gQ2F0IGluIHRoZSBIYXQgcHJvdmVzIHRvIHNob3cgaG93IG1vdmllIHByb2R1Y3Rpb25zIGNhbiB0YWtlIGEgY2xhc3NpYyBzdG9yeSBhbmQgdHVybiBpdCBpbnRvIGEgbWluZGxlc3MgcGlsZSBvZiBnb29wLiBXZSBoYXZlIE1pa2UgTXllcnMgYXMgdGhlIGluZmFtb3VzIENhdCBpbiB0aGUgSGF0LCBiaWcgbWlzdGFrZSEgTXllcnMgcHJvdmVzIGhlIGNhbid0IGFjdCBpbiB0aGlzIGZpbG0uIEhlIGFjdHMgbGlrZSBhIHByaXNzeSBzaG93IGdpcmwgd2l0aCBhIHRob3VzYW5kIHRyaWNrcyB1cCBoaXMgc2xlZXZlLiBUaGUga2lkcyBpbiB0aGlzIG1vdmllIGFyZSBhbGwgcmlnaHQsIHNvbWV3aGVyZSBpbiBiZXR3ZWVuIHRoZSBsaW5lcyBvZiBkdWxsIGFuZCBhbm5veWluZy4gVGhlIHN0b3J5IGlzIGp1c3QgbGlrZSB0aGUgb3JpZ2luYWwgd2l0aCBhIGNvdXBsZSBvZiB0d2Vha3MgYW5kIGxpa2UgbW9zdCBtb3ZpZXMgYmFzZWQgb24gb3RoZXIgc3RvcmllcywgbmV2ZXIgdHdlYWsgd2l0aCB0aGUgb3JpZ2luYWwgc3RvcnkhIEJyaW5naW5nIGluIHRoZSBldmlsIG5laWdoYm9yIFF1aW4gd2FzIGEgYmFkIGlkZWEuIEhlIGlzIGEgc3R1cGlkIHZpbGxhaW4gdGhhdCB3b3VsZCBuZXZlciBnZXQgYW55d2hlcmUgaW4gbGlmZS5UaGlzIG1vdmllIGlzIGxpa2UgYSByZWplY3RlZCBjb21pYyBzdHJpcCBmcm9tIHRoZSBuZXdzcGFwZXIgaWYgeW91IHRoaW5rIGFib3V0IGl0LiBUaGUgZmlsbSBzdXJlIGRvZXMgbG9vayB0YWNreSEgU3VyZSB0aGVyZSBhcmUgYSBmdW5ueSBhZHVsdCBqb2tlcyBsaWtlIHdoZXJlIHRoZSBjYXQgY3V0cyBvZiBoaXMgdGFpbCBhbmQgdGhlIGNlbnNvciBnb2VzIG9mZiBiZWZvcmUgaGUgc2F5cyBhIG5hdWdodHkgd29yZCwgbWlsZGx5IGZ1bm55LiBBdCBsZWFzdCB0aGUgR3JpbmNoIGhhZCBzcHVuaywgYW5kIHRoZSBmaWxtIHdhcyBhY3R1YWxseSBnb29kISBUaGlzIGZpbG0gaXMgYSBjYXJ0b29uaXNoIHBpZWNlIG9mIHNub3Qgd2l0aCBicmlnaHQgY29sb3JzIGFuZCBiYWQgbWVkaW9jcmUgYWN0aW5nLiBXYXMgTWlrZSBNeWVycyBldmVuIGluIHRoaXMgbW92aWUgYWN0dWFsbHk/IEFuZCBhbm90aGVyIHRoaW5nLCB0aGUgZmlzaC4gV2hhdCBpcyB3aXRoIHRoYXQgc3R1cGlkIGZpc2ghIEZpcnN0IHRpbWUgeW91IHNlZSBoaW0sIGhlJ3MgYW4gYWN0dWFsIGZpc2guIE5leHQgdGltZSB5b3Ugc2VlIGhpbSwgaGUncyBhbGwgYW5pbWF0ZWQgYW5kIHRhbGtpbmcuIEJ1dCBoZSBsb29rcyBsaWtlIGFuIGFuaW1hdGVkIHBpZWNlIG9mIHJ1YmJlciBwbGF5IGRvdWdoISBUaGlzIGZpbG0gaXMgYSB0b3RhbCBvZmYgdGFyZ2V0IHdyZWNrLiBHb29kIGpva2UsIGJhZCBqb2tlLCBiYWQsIGJhZCwgYmFkLCBnb29kIGpva2UhIEknbSBzdXJwcmlzZWQgaXQgZXZlbiBoYWQgZ29vZCBqb2tlcyBsaWtlIHRoZSB3YXRlciBwYXJrIHJpZGUgam9rZSwgdGhhdCB3YXMgZ29vZC4gU28gcGxlYXNlIGlmIHlvdSBoYXZlIHRoZSBjaG9pY2UsIHdhdGNoIHRoZSBHcmluY2ggaW5zdGVhZCBvZiB0aGlzIG1lc3MuKQAAAAAAAABACsQKCLcCELcCIrIKRG9uJ3QgZ2V0IG1lIHdyb25nLCBJIGFzc3VtZWQgdGhpcyBtb3ZpZSB3b3VsZCBiZSBzdHVwaWQsIEkgaG9uZXN0bHkgZGlkLCBJIGdhdmUgaXQgYW4gaW5jcmVkaWJseSBsb3cgc3RhbmRhcmQgdG8gbWVldC4gVGhlIG9ubHkgcmVhc29uIEkgZXZlbiBzYXcgaXQgd2FzIGJlY2F1c2UgdGhlcmUgd2VyZSBhIGJ1bmNoIG9mIGdpcmxzIGdvaW5nIChkaWZmZXJlbnQgc3RvcnkgZm9yIGEgZGlmZmVyZW50IHRpbWUpLiBBcyBJIGJlZ2FuIHdhdGNoaW5nIEkgbm90aWNlZCBzb21ldGhpbmcsIHRoaXMgZmlsbSB3YXMgdGVycmlibGUuIE5vdyB0aGVyZSBhcmUgdHdvIHR5cGVzIG9mIHRlcnJpYmxlLCB0aGVyZSdzIEZyZWRkeSB2cy4gSmFzb24gdGVycmlibGUsIHdoZXJlIHlvdSBhbmQgeW91ciBmcmllbmRzIHNpdCBiYWNrIGFuZCBsYXVnaCBhbmQgam9rZSBhYm91dCBob3cgdGVycmlibGUgaXQgaXMsIGFuZCB0aGVuIHRoZXJlIGlzIGEgbW92aWUgbGlrZSB0aGlzLiBUaGUgQ2F0IGluIFRoZSBIYXQgZmFpbGVkIHRvIGNyZWF0ZSBldmVuIGEgbW9tZW50YXJ5IGludGVyZXN0IGluIG1lLiBBcyBJIHdhdGNoZWQgdGhlIGZpcnN0IGJpdCBvZiBpdCBub3Qgb25seSB3YXMgSSBib3JlZCBzZW5zZWxlc3MsIGJ1dCBJIGZlbHQgYXMgdGhvdWdoIEkgaGFkIGluIHNvbWUgd2F5IGJlZW4gdmlvbGF0ZWQgYnkgdGhlIGhvcnJlbmRvdXNuZXNzIG9mIHNhaWQgbW92aWUuIE1pa2UgTXllcnMgaXMgdXN1YWxseSBicmlsbGlhbnQsIEkgbG92ZSB0aGUgbWFqb3JpdHkgb2YgaGlzIHdvcmssIGJ1dCBzb21ldGhpbmcgaW4gdGhpcyBtb3ZpZSBkaWRuJ3QgY2xpY2suIE9uZSBvZiB0aGUgdGhpbmdzIHRoYXQgdGhlIGRpcmVjdG9yL3Byb2R1Y2Vycy93cml0ZXJzL3doYXRldmVycyBjaGFuZ2VkIHdhcyB0aGF0IHRoZXkgcmVmdXNlZCB0byB1c2UgYW55IG9mIHRoZSBjb2xvcnMgb2YgdGhlIG9yaWdpbmFsIGJvb2sgKHJlZCwgYmxhY2ssIHdoaXRlKSBvbiBhbnkgY2hhcmFjdGVyIGJ1dCB0aGUgQ2F0LiBDb2luY2lkZW50YWxseSBvciBub3QsIHRoZXkgYWxzbyByZWZ1c2VkIHRvIGNhcHR1cmUgYW55IG9mIHRoZSBvcmlnaW5hbCAoYW5kIGkgaGF0ZSB0byB1c2UgdGhpcyB3b3JkLCBidXQgaXQgZml0cykgemFuaW5lc3Mgb2YgdGhlIG9yaWdpbmFsLiBUaGUgYm9vayB3YXMgbGlrZSBhbiBJY2UgQ3JlYW0gU3VuZGF5LCBjb2xvcmZ1bCBhbmQgZGVsaWNpb3VzLCBhbmQgdGhlIG1vdmllIHdhcyBhYm91dCBhcyBibGFuZCBhbmQgaGFyZCB0byBzd2FsbG93IGFzIHNhd2R1c3QuPGJyIC8+PGJyIC8+QXZvaWQgdGhpcyBsaWtlIGEgbGVwcm91cyBwcm9zdGl0dXRlLikAAAAAAAAAQArpBgi4AhC4AiLXBkRvbid0IGdldCBtZSB3cm9uZyAtIEkgbG92ZSBEYXZpZCBTdWNoZXQgYXMgUG9pcm90LiBJIGxvdmUgdGhlIHNlcmllcyBhcyB3ZWxsIGFzIHRoZSBtb3ZpZXMgYnV0IGVub3VnaCBhbHJlYWR5IHJlOiBEZWF0aCBPbiBUaGUgTmlsZS4gRXZlcnlvbmUgaGFzIGRvbmUgdGhpcyBvbmUhIFdlIGtub3cgd2hvIGRpZXMuIFdlIGtub3cgd2h5IHRoZXkgZGllLiBXZSBrbm93IHdobyB0aGUga2lsbGVyIGlzLiBXZSBrbm93IGhvdyBpdCB3YXMgZG9uZS4gU28gSSBzYXkgZW5vdWdoIGFscmVhZHkhIE1yLiBTdWNoZXQgY291bGQgaGF2ZSB1c2VkIHRoYXQgYXdlc29tZSB0YWxlbnQgaW4gYW5vdGhlciBvbmUgb2YgQWdhdGhhIENocmlzdGllJ3Mgbm92ZWxzLiBJIHdpbGwgc2F5IHRoYXQgdGhlIGFjdGluZyBieSBhbGwgdGhlIGFjdG9ycyB3YXMgc3VwZXJiLiBUaGUgc2V0cyB3ZXJlIHRlcnJpZmljIGFuZCB2ZXJ5IHJlYWxpc3RpYy4gSSBlc3BlY2lhbGx5IGxpa2VkIERhdmlkIFNvdWwgYnV0IEkgd2FzIHN1cnByaXNlZCBhdCBob3cgJ2F3ZnVsJyBoZSBsb29rZWQuIEkgaG9wZSBoZSBkb2Vzbid0IGxvb2sgdGhhdCB3YXkgaW4gJ3JlYWwnIGxpZmUhIEkgaG9uZXN0bHkgY2FuJ3QgcmVtZW1iZXIgZnJvbSBvdGhlciBtb3ZpZXMgd2hldGhlciB0aGUgdmVyeSBlbmQgd2FzIHRoZSBzYW1lLiBTb21laG93IEkgZG9uJ3QgdGhpbmsgc28uIEkgdGhvdWdodCB0aGF0IHdhcyBhIHJhdGhlciBicmlsbGlhbnQgdG91Y2ggd2hldGhlciBvciBub3QgTXMuIENocmlzdGllIHdyb3RlIGl0IHRoYXQgd2F5LiBJIHdvdWxkIG11Y2ggcmF0aGVyIGhhdmUgdGhhdCBlbmRpbmcgdGhlbiB3YXN0aW5nIGF3YXkgaW4gcHJpc29uISkAAAAAAAAAQAq0BAi5AhC5AiKiBERvIHdlIHJlYWxseSBuZWVkIGFueSBtb3JlIG5hcmNpc3Npc3RpYyBnYXJiYWdlIG9uIHRoZSBCYWJ5IEJvb21lciBnZW5lcmF0aW9uPyBUZWNobmljYWxseSwgSSBhbSBhIEJvb21lciwgdGhvdWdoIGF0IHRoZSB0aW1lIHdoZW4gYWxsIHRoZSAiaWRlYWxpc3RpYyB5b3V0aHMiIG9mIHRoZSAnNjBzIHdlcmUgcmVhZGluZyBNYXJ4LCBidXJuaW5nIHRoZWlyIGRyYWZ0IGNhcmRzLCBhbmQgZ2VuZXJhbGx5IHByb2xvbmdpbmcgYSB3YXIgd2hpY2ggZGVzdHJveWVkIHRlbnMgb2YgdGhvdXNhbmRzIG9mIGxpdmVzOyBJIHdhcyBzdGlsbCBpbiBncmFkZSBzY2hvb2wuIEJ1dCBJIHJlbWVtYmVyIHRoZW0gd2VsbCwgYW5kIDkgb3V0IG9mIDEwIHdlcmUganVzdCBtb3JvbmljIGZvb2xzLCB3aG8gd291bGQgYmVsaWV2ZSBhbnl0aGluZyBhcyBsb25nIGFzIGl0IHdhcyBkZXN0cnVjdGl2ZS48YnIgLz48YnIgLz5UaGlzIGlzIGp1c3QgYW5vdGhlciBleGNlcmNpc2UgaW4gc2VsZi1pbXBvcnRhbmNlIGZyb20gdGhlIGtpZHMgd2hvIG5ldmVyIHJlYWxseSBncmV3IHVwLikAAAAAAAAAQArmBAi6AhC6AiLUBENvcnJpZG9ycyBvZiB0aW1lLiBUaGUgbW92aWUgeW91IGNhbiB3YXRjaCBpZiB5b3UncmUgbG9va2luZyBmb3IgYSBzb3BoaXN0aWNhdGVkIHdheSBvZiBzdWljaWRlLiBTb21lIHVzZSBndW5zLCByb3Blcywgb3IgZ2FzLCBidXQgeW91IHdhbnQgdG8gcnVpbiB5b3VyIGJyYWlucyA/IERvIG5vdCB3YWl0IGFueSBsb25nZXIgISBDb3JyaWRvcnMgb2YgdGltZSBpcyBwcm9iYWJseSBvbmUgb2YgdGhlIGJpZ2dlc3QgcG9zc2libGUgbWlzdGFrZXMgOiB0aGlua2luZyBDaHJpc3RpYW4gQ2xhdmllciBpcyBhYmxlIHRvIGFjdCBhbmQgdG8gYnJpbmcgeW91IGZ1bi4gSSBkbyBub3QgbWlzcyB0aGUgNDUgZnJhbmNzIHRoaXMgcG9vciB0aGluZyBjb3N0IG1lIDogc29tZXRpbWVzLCBvbmUgaGFzIHRvIHJlc2V0IGl0cyBldmFsdWF0aW9uIHN5c3RlbSBsb29raW5nIGF0IHRoZSBhYnNvbHV0ZSB6ZXJvLiBUaGlzIGZpbG0gZGVzZXJ2ZXMgYSAyLzEwLCBidXQgdGhhdCdzIG9ubHkgYmVjYXVzZSBJIGxpa2UgSmVhbiBSZW5vLiBUb28gYmFkIGZvciBoaW0sIGhlIGFsc28gc3RhcnMgaW4gUm9uaW4uIEkgdGhpbmsgSSdtIGdvbm5hIGRpc2xpa2UgaGltLi4uKQAAAAAAAABACtsTCLsCELsCIskTQ29udGFpbnMgc3BvaWxlcnMuIDxiciAvPjxiciAvPlRoZSBCcml0aXNoIGRpcmVjdG9yIEouIExlZSBUaG9tcHNvbiBtYWRlIHNvbWUgZXhjZWxsZW50IGZpbG1zLCBub3RhYmx5ICdJY2UgQ29sZCBpbiBBbGV4JyBhbmQgJ0NhcGUgRmVhcicsIGJ1dCAnQ291bnRyeSBEYW5jZScgaXMgb25lIG9mIGhpcyBtb3JlIGN1cmlvdXMgb2ZmZXJpbmdzLiBUaGUgc3RvcnkgaXMgc2V0IGFtb25nIHRoZSB1cHBlciBjbGFzc2VzIG9mIHJ1cmFsIFNjb3RsYW5kLCBhbmQgZGV0YWlscyB0aGUgc3RyYW5nZSB0cmlhbmd1bGFyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFNpciBDaGFybGVzIEZlcmd1c29uLCBhbiBlY2NlbnRyaWMgYXJpc3RvY3JhdGljIGxhbmRvd25lciwgaGlzIHNpc3RlciBIaWxhcnksIGFuZCBIaWxhcnkncyBlc3RyYW5nZWQgaHVzYmFuZCBEb3VnbGFzLCB3aG8gaXMgaG9waW5nIGZvciBhIHJlY29uY2lsaWF0aW9uIHdpdGggaGVyLiBXZSBsZWFybiB0aGF0IGR1cmluZyBoaXMgY2FyZWVyIGFzIGFuIEFybXkgb2ZmaWNlciwgQ2hhcmxlcyB3YXMgcmVnYXJkZWQgYXMgaGF2aW5nICdsb3cgbW9yYWwgZmlicmUnLiBUaGlzIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIGFuIGFjY3VyYXRlIGRpYWdub3NpcyBvZiBoaXMgY29uZGl0aW9uOyB0aHJvdWdob3V0IHRoZSBmaWxtIGhlIGRpc3BsYXlzIGFuIGF0dGl0dWRlIG9mIGdsb29teSBkaXNpbGx1c2lvbm1lbnQgd2l0aCB0aGUgd29ybGQsIGFuZCBoaXMgbWFpbiBzb3VyY2VzIG9mIGVtb3Rpb25hbCBzdXBwb3J0IHNlZW0gdG8gYmUgSGlsYXJ5IGFuZCBoaXMgd2hpc2t5IGJvdHRsZS4gVGhlIGZpbG0gZW5kcyB3aXRoIGhpcyBjb21taXR0YWwgdG8gYW4gdXBwZXItY2xhc3MgbHVuYXRpYyBhc3lsdW0uIDxiciAvPjxiciAvPlBldGVyIE8nVG9vbGUgd2FzLCB3aGVuIGhlIHdhcyBhdCBoaXMgYmVzdCBhcyBpbiAnTGF3cmVuY2Ugb2YgQXJhYmlhJywgb25lIG9mIEJyaXRhaW4ncyBsZWFkaW5nIGFjdG9ycywgYnV0IHRoZSBxdWFsaXR5IG9mIGhpcyB3b3JrIHdhcyB2ZXJ5IHVuZXZlbiwgYW5kICdDb3VudHJ5IERhbmNlJyBpcyBub3Qgb25lIG9mIGhpcyBiZXR0ZXIgZmlsbXMuIEhlIG92ZXJhY3RzIGZyYW50aWNhbGx5LCBtYWtpbmcgQ2hhcmxlcyBpbnRvIGEgY2FyaWNhdHVyZSBvZiB0aGUgdXNlbGVzcyBpbmJyZWQgYXJpc3RvY3JhdCwgYXMgdGhvdWdoIGhlIHdlcmUgYXVkaXRpb25pbmcgZm9yIGEgcGFydCBpbiB0aGUgTW9udHkgUHl0aG9uICdVcHBlci1DbGFzcyBUd2l0IG9mIHRoZSBZZWFyJyBza2V0Y2guIFN1c2FubmFoIFlvcmsgYXMgSGlsYXJ5IGFuZCBNaWNoYWVsIENyYWlnIGFzIERvdWdsYXMgYXJlIHJhdGhlciBiZXR0ZXIsIGJ1dCB0aGVyZSBpcyBubyByZWFsbHkgb3V0c3RhbmRpbmcgYWN0aW5nIHBlcmZvcm1hbmNlIGluIHRoZSBmaWxtLiBUaGVyZSBpcyBhbHNvIGxpdHRsZSBpbiB0aGUgd2F5IG9mIGNvaGVyZW50IHBsb3QsIGJleW9uZCB0aGUgdGFsZSBvZiBDaGFybGVzJ3MgaW5leG9yYWJsZSBkb3dud2FyZCBzbGlkZS48YnIgLz48YnIgLz5UaGUgbWFpbiBwcm9ibGVtIHdpdGggdGhlIGZpbG0sIGhvd2V2ZXIsIGlzIG5laXRoZXIgdGhlIGFjdGluZyBub3IgdGhlIHBsb3QsIGJ1dCByYXRoZXIgdGhhdCBvZiB0aGUgVGhlbWUgVGhhdCBEYXJlIE5vdCBTcGVhayBJdHMgTmFtZS4gVGhlcmUgYXJlIGhhbGYtaGVhcnRlZCBoaW50cyBvZiBhbiBpbmNlc3R1b3VzIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIENoYXJsZXMgYW5kIEhpbGFyeSwgb3IgYXQgbGVhc3Qgb2YgYW4gaW5jZXN0dW91cyBhdHRyYWN0aW9uIHRvd2FyZHMgaGVyIG9uIGhpcyBwYXJ0LCBhbmQgdGhhdCBoaXMgZGlzbGlrZSBvZiBEb3VnbGFzIGlzIG1vdGl2YXRlZCBieSBzZXh1YWwgamVhbG91c3kuIFVuZm9ydHVuYXRlbHksIGV2ZW4gaW4gdGhlIHN3aW5naW5nIHNpeHRpZXMgYW5kIGVhcmx5IHNldmVudGllcyAodGhlIGRhdGUgb2YgdGhlIGZpbG0gaXMgdmFyaW91c2x5IGdpdmVuIGFzIGVpdGhlciAxOTY5IG9yIDE5NzApIHRoZXJlIHdhcyBhIGxpbWl0IHRvIHdoYXQgdGhlIEJyaXRpc2ggQm9hcmQgb2YgRmlsbSBDZW5zb3JzIHdhcyB3aWxsaW5nIHRvIGFsbG93LCBhbmQgYSBmaWxtIHdpdGggYW4gZXhwbGljaXRseSBpbmNlc3R1b3VzIHRoZW1lIHdhcyBkZWZpbml0ZWx5IG9mZi1saW1pdHMuIChUaGUgQW1lcmljYW4gdGl0bGUgZm9yIHRoZSBmaWxtIHdhcyAnQnJvdGhlcmx5IExvdmUnLCBidXQgdGhpcyB3YXMgbm90IHVzZWQgaW4gQnJpdGFpbjsgd2FzIGl0IHRvbyBzdWdnZXN0aXZlIGZvciB0aGUgbGlraW5nIG9mIHRoZSBCQkZDPykgVGhlc2UgaGludHMgYXJlIHRoZXJlZm9yZSBuZXZlciBkZXZlbG9wZWQgYW5kIHdlIG5ldmVyIGdldCB0byBzZWUgd2hhdCBtb3RpdmF0ZXMgQ2hhcmxlcyBvciB3aGF0IGhhcyBjYXVzZWQgaGlzIG1vcmFsIGNvbGxhcHNlLCByZXN1bHRpbmcgaW4gYSBob2xsb3cgZmlsbSB3aXRoIGEgaG9sZSBhdCBpdHMgY2VudHJlLiA0LzEwKQAAAAAAAABACqgFCLwCELwCIpYFQnkgZmFyIHRoaXMgaGFzIHRvIGJlIG9uZSBvZiB0aGUgd29yc3QgbW92aWVzIEkndmUgZXZlciBzZWVuIGluIG15IGxpZmUuIEkgd2F0Y2ggcHJhY3RpY2FsbHkgZXZlcnkgbW92aWUgdGhhdCBpcyBvbiBhdCBuaWdodCAoZWl0aGVyIHNob3d0aW1lLCBoYm8sIGNpbmVtYXgsIGV0YykuICJUaHJlZSIgQUtBICJTdXJ2aXZvciBJc2xhbmQiIGtlZXBzIHlvdSBpbiBhcyBtdWNoIHN1c3BlbnNlIGFzIHdhdGNoaW5nIHBhaW50IGRyeSBvbmx5IHRvIGxldCB5b3UgZG93biBldmVuIG1vcmUgbWlzZXJhYmx5LiBJZiB5b3Ugd2FudCB0byBmZWVsIGxpa2UgeW91IGp1c3Qgd2FzdGVkIHdoYXQgc2VlbXMgbGlrZSBhbiBldGVybml0eSBvbiB0aGUgd29yc3QgZmlsbSBldmVyIGNyZWF0ZWQgdGhlbiBieSBhbGwgbWVhbnMgd2F0Y2ggdGhpcyBtb3ZpZS4gSSBtdXN0IGhhdmUgc2NyZWFtZWQgYXQgYSBtaW5pbXVtIDkwMCB0aW1lcyBmcm9tIHRoZSBpZGlvdGljIHR3aXN0cy4gSWYgSSBoYWQgNCBoYW5kcyBJJ2QgZ2l2ZSB0aGlzIG1vdmllIDQgdGh1bWJzIERPV04uPGJyIC8+PGJyIC8+SW4gbXkgcGVyc29uYWwgb3BpbmlvbiwgSSBiZWxpZXZlIHRoZSBvbmx5IHBlb3BsZSB3aG8gd291bGQgbGlrZSB0aGlzIG1vdmllIGFyZSB0aG9zZSB3aXRoIHRlcnJpYmxlIG1vcmFscy4pAAAAAAAAAEAK2wQIvQIQvQIiyQRCZXR0ZSBNaWRsZXIgc2hvd2Nhc2VzIGhlciB0YWxlbnRzIGFuZCBiZWF1dHkgaW4gIkRpdmEgTGFzIFZlZ2FzIi4gSSBhbSB0aHJpbGxlZCB0aGF0IEkgdGFwZWQgaXQgYW5kIEkgYW0gYWJsZSB0byB2aWV3IHdoZW5ldmVyIEkgd2FudCB0by4gU2hlIHBvc3Nlc3NlcyB3aGF0IGl0IHRha2VzIHRvIGtlZXAgYW4gYXVkaWVuY2UgaW4gY2FwdGl2aXR5LiBIZXIgdm9pY2UgaXMgYXMgYmVhdXRpZnVsIGFzIGV2ZXIgYW5kIHdpbGwgdHJ1bHkgaW1wcmVzcyB5b3UuIFRoZSBoaWdobGlnaHQgb2YgdGhlIHNob3cgd2FzIGhlciBzaW5naW5nICJTdGF5IFdpdGggTWUiIGZyb20gaGVyIDE5NzkgbW92aWUgIlRoZSBSb3NlIi4gWW91IGNhbiBmZWVsIHRoZSBlbW90aW9uIGluIHRoZSBzb25nIGFuZCB3aWxsIGVuZCB1cCBoYXZpbmcgZ29vc2UgYnVtcHMuIFRoZSBzaG93IHdpbGwgbGVhdmUgeW91IHdpdGggdGhlIHVyZ2UgdG8gZ28gb3V0IGFuZCBlaXRoZXIgcmVudCBhIEJldHRlIE1pZGxlciBtb3ZpZSBvciBnbyB0byB0aGUgbmVhcmVzdCBtdXNpYyBzdG9yZSBhbmQgcHVyY2hhc2Ugb25lIG9mIEJldHRlIE1pZGxlcidzIGFsYnVtcy4pAAAAAAAAAEAKvQUIvgIQvgIiqwVCZXR0ZSBNaWRsZXIgaXMgaW5kZXNjcmliYWJsZSBpbiB0aGlzIGNvbmNlcnQuIFNoZSBnaXZlcyBoZXIgYWxsIGV2ZXJ5IHRpbWUgc2hlIGlzIG9uIHN0YWdlLiBXaGV0aGVyIHdlIGFyZSBsYXVnaGluZyBhdCBoZXIgam9rZXMgYW5kIGFudGljcyBvciBkYWJiaW5nIG91ciBleWVzIGF0IHRoZSBzdHJhaW5zIG9mIG9uZSBvZiBoZXIgdHJlbWVuZG91cyBiYWxsYWRzLCBCZXR0ZSBNaWRsZXIgbW92ZXMgaGVyIGF1ZGllbmNlLiBJZiB5b3UgY2FuJ3Qgc2VlIGl0IGxpdmUgKHdoaWNoIGlzIHRoZSBiZXN0IHdheSB0byBzZWUgQmV0dGUpIHRoZW4gdGhpcyBpcyB0aGUgbmV4dCBiZXN0IHRoaW5nLiBBbiBpbnRlcmVzdGluZyB0aGluZyB0byBsb29rIGF0IGlzIGhvdyBpbmNyZWRpYmxlIGhlciB2b2ljZSBoYXMgY2hhbmdlZCBhbmQgbWF0dXJlZCBvdmVyIHRoZSB5ZWFycyBidXQgbmV2ZXIgbG9zdCBpdHMgcG93ZXIuIEhlciBtb3JlICJ2b2NhbGx5IGNvcnJlY3QiIHZlcnNpb24gb2YgIlN0YXkgV2l0aCBNZSIgbmV2ZXIgbG9zZXMgYW55dGhpbmcgaW4gc3Bpcml0IGZyb20gVEhFIFJPU0Ugb3IgRElWSU5FIE1BRE5FU1MsIEhlcmUgaXQgaXMganVzdCBtb3JlIHB1cmUgYW5kIGFzIGhlYXJ0ZmVsdCBhcyBldmVyLiBJIHdpbGwgdHJlYXN1cmUgdGhpcyBjb25jZXJ0IGZvciBhIHZlcnkgbG9uZyB0aW1lLikAAAAAAAAAQAr9BAi/AhC/AiLrBEJldHRlIE1pZGxlciBpcyBhZ2FpbiBEaXZpbmUhIFJhdW5jaGlseSBodW1vcm91cy4gSW4gbG92ZSB3aXRoIEJ1cmxlc3F1ZS4gQ2FwYWJsZSBvZiBicmluZ2luZyB5b3UgZG93biB0byB0ZWFycyBlaXRoZXIgd2l0aCBvbGQgam9rZXMgd2l0aCBuZXcgZHJlc3NlcyBvciBtZXJlbHkgd2l0aCBvbGQgc29uZ3Mgd2l0aCBtb3JlIHBvd2VyICYgcHVuY2ggdGhhbiBldmVyLiBBbGwgaW4gQWxsIFNpbmdpbmcgbmV3IGJhbGxhZHMsIHBvd2VyLXNpbmdpbmcgdGhlIGdvb2Qgb2xkL3BlcmVubmlhbCBvbmVzIHN1Y2ggYXMgIlRoZSBSb3NlIjsgIlN0YXkgV2l0aCBNZSIgYW5kIHllcywgZXZlbiAiV2luZCBCZW5lYXRoIE15IFdpbmdzIi4gVGhlIGJlc3Qgd2F5IHRvIGFwcHJlY2lhdGUgdGhlIERpdmluZSBNaXNzIE0gaGFzIGFsd2F5cyBiZWVuIGxpYmUgLSBzaW5jZSB0aGlzIGlzIHRoZSBuZXh0IGJlc3QgdGhpbmcgdG8gaXQsIEkgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gYWxsIHdpdGggYSBtaXh0dXJlIG9mIGFkdWx0IHdpZGUtZXllZCBlbmNoYW50bWVudCBhbmQgYXBwcmVjaWF0aW9uIGFuZCBhIGNoaWxkJ3MgbWlzY2hpZXZvdXMgd2lzaCBmb3IgcHVzaGluZyBhbGwgYm91bmRhcmllcyEpAAAAAAAAAEAKqwoIwAIQwAIimQpCZWluZyBhIEhVR0UgZmFuIG9mIHRoZSBib3R0b20gc2VyaWVzIGkgd2FzIHJlYWxseSBsb29raW5nIGZvcndhcmQgdG8gdGhlIHJlbGVhc2Ugb2YgdGhpcyBmaWxtLkkgd2FzIGVhZ2VybHkgYW50aWNpcGF0aW5nIGEgbGF1Z2ggYSBtaW51dGUgcm9sbGVyLWNvYXN0ZXIgcmlkZS4uLi4uLmFsYXMuPGJyIC8+PGJyIC8+V2hlcmUgdG8gc3RhcnQgb24gdGhpcyBtZXNzP2kgdGhpbmsgaXRzIGEgZ29vZCBzdGFydCB0byBzYXkgdGhhdCBpdHMgaGFyZGx5IHJpY2hpZSBhbmQgZWRkaWUgb24gb3VyIHNjcmVlbnMgaW4gdGhlIGZpcnN0IHBsYWNlIGFzIG5vbmUgb2YgdGhlIGpva2VzIGFuZCBvbmUgbGluZXJzIHRoZXkgdXN1YWxseSBkZWxpdmVyIHNvIHdlbGwgYXJlIGZ1bm55Lkkgd2FzIHN0aWxsIHdhaXRpbmcgZm9yIHRoZSBmaXJzdCBsYXVnaCBhZnRlciBhIGdvb2QgMjAgbWludXRlcyBvZiB2aWV3aW5nLk1hbnkgYXNwZWN0cyBvZiB0aGUgc3Rvcnkgd2VyZSBwYXRoZXRpYyBhbmQgaXQgd2FzIGFzIGlmIHRoZSBmaWxtIHdhcyBmdWxsIG9mIHRob3NlIGJhZCBtb21lbnRzIHRoZXkgcmVoZWFyc2VkIGFuZCBkZWNpZGVkIHRvIGxlYXZlIG91dCBvZiB0aGUgZmluYWwgY3V0LjxiciAvPjxiciAvPlRoZSBvdmVyYWxsIHNldHMgYW5kIGF0bW9zcGhlcmUgc3Vycm91bmRpbmcgdGhlIGZpbG0gaXMgZGFyayBhbmQgZGluZ3kgd2hpY2ggaSBzdXBwb3NlIGlzIGdvb2QgaWYgdGhleSB3YW50IHRvIHBvcnRyYXkgdGhlICd0ZXJyaWJsZScgZ3Vlc3QgaG91c2UgdGhlIDIgYnVmZm9vbnMgYXR0ZW1wdCB0byBydW4sYnV0IHRvIG1lIGl0cyBqdXN0IHB1dHMgYW4gZXZlbiBoaWdoZXIgZGFtcGVuZXIgb24gYSBzb3JyeSBzdGF0ZSBvZiBmaWxtaW5nIHRoYXQgc2hvdWxkIG5ldmVyIGhhdmUgYmVlbiBjcmVhdGVkLjxiciAvPjxiciAvPlRoZSBhY3RpbmcsYXQgdGltZXMsaXMgcGF0aGV0aWMuRmVuZWxsYSBGaWVsZGluZyBpcyB3YXN0ZWQgYXMgdGhlIGxvb255IE1ycyBGb3hmdXIgYW5kIGkndmUgc2VlbiBTaW1vbiBQZWdnIGhhdmUgbXVjaCBiZXR0ZXIgb3V0aW5ncy48YnIgLz48YnIgLz5JJ2QgcmVjb21tZW5kIEd1ZXN0IEhvdXNlIFBhcmFkaXNvIHRvIGFueWJvZHkgd2hvIGlzIGJsaW5kIGRydW5rIGJlY2F1c2UgdGhleSBtaWdodCBhcHByZWNpYXRlIHRoZSB0ZXJyaWJsZSBwdW5zIG11Y2ggbW9yZS5CdXQgdG8gYW55IGJvdHRvbSBmYW4gd2hvIGhhc24ndCBzZWVuIHRoaXMgZmlsbSBhbmQgaXMgZXhwZWN0aW5nIHRydWUgcmljaGllIGFuZCBlZGRpZSBhY3Rpb24geW91IGhhdmUgYmVlbiB3YXJuZWQpAAAAAAAAAEAK3QIIwQIQwQIiywJCZWZvcmUgSSB3YXRjaGVkIHRoaXMgdHYgbW92aWUgSSBkaWQgbm90IGtub3cgbXVjaCBhYm91dCBvbmUgb2YgbXkgZmF2b3JpdGUgYWN0cmVzc2VzLiBBZnRlciB3YXRjaGluZyBpdCwgSSByZWFsaXplZCBob3cgc2FkIEx1Y2lsbGUgQmFsbCdzIGxpZmUgcmVhbGx5IHdhcy4gSXQgaGFkIGl0J3MgZ3JlYXQgbW9tZW50cyB0b28sIGJ1dCBJIGRpZG4ndCByZWFsaXplIGhvdyBzYWQgaXQgd2FzLiBUaGlzIG1vdmllIHdhcyB2ZXJ5IGdvb2QgYW5kIHRvbGQgdGhlIHN0b3J5IG9mIHRoZSBiZWxvdmVkIEx1Y2lsbGUgQmFsbCB2ZXJ5IHdlbGwuIEkgaGlnaGx5IHJlY2NvbW1lbmQgaXQuKQAAAAAAAABACu8RCMICEMICIt0RQmVmb3JlIEkgYmVnaW4sIGxldCBtZSBnZXQgc29tZXRoaW5nIG9mZiBteSBjaGVzdDogSSdtIGEgaHVnZSBmYW4gb2YgSm9obiBFeXJlcycgZmlyc3QgZmlsbSBQUk9KRUNUOiBTSEFET1dDSEFTRVIuIFRoZSBmaWxtLCBhIEItZ3JhZGUgY3Jvc3Mgb2YgYm90aCBUSEUgVEVSTUlOQVRPUiAmIERJRSBIQVJELCBtYXkgbm90IGJlIHRoZSB3b3JrIG9mIGEgY2luZW1hdGljIGdlbml1cywgYnV0IGlzIGEgaHVnZWx5IGVudGVydGFpbmluZyBhY3Rpb24gZmlsbSB0aGF0IGJlY2FtZSBhIGN1bHQgaGl0ICgmIHNwYXduZWQgdHdvIHNlcXVlbHMgJiBhIHNwaW4gb2ZmKS48YnIgLz48YnIgLz5KdWRnZSBhbmQgSnVyeSBiZWdpbnMgd2l0aCBKb3NlcGggTWVla2VyLCBhIGNvbnZpY3RlZCBraWxsZXIgd2hvIHdhcyBzZW50IHRvIERlYXRoIFJvdyBmb2xsb3dpbmcgaGlzIGNhcHR1cmUgYWZ0ZXIgdGhlIHNvLWNhbGxlZCAiQmxvb2R5IFNob290b3V0IiAod2hpY2ggc2VlbXMgbGlrZSBhIHBvb3IgbmFtZSBmb3IgYSBraWxsaW5nIHNwcmVlIMKWIE1lZWtlciBraWxscyB0aHJlZSBwZW9wbGUgd2hpbGUgdHJ5aW5nIHRvIHJvYiBhIGNvbnZlbmllbmNlIHN0b3JlKSwgYmVpbmcgbGVkIHRvIHRoZSBlbGVjdHJpYyBjaGFpci4gVGhlcmUgaXMgYW4gYW11c2luZyBzY2VuZSB3aGVyZSBNZWVrZXIgdGFsa3MgdG8gdGhlIHByaWVzdCBhYm91dCBsaXZpbmcgZm9yIHNleCBidXQgbWVldGluZyBoaXMgb25lIHRydWUgbG92ZSAod2hvIHdhcyBraWxsZWQgZHVyaW5nIHRoZSBzaG9vdG91dCksIGV4cHJlc3NpbmcgaGlzIHJldmVuZ2UgZm9yIHRoZSBwZXJzb24gd2hvIGtpbGxlZCBoZXIgwpYgTWljaGFlbCBTaWx2YW5vLCBhIHdhc2hlZC11cCBmb290YmFsbCBzdGFyIHdobyBzcGVuZHMgaGlzIGRheXMgd2F0Y2hpbmcgaGlzIHNvbiBBbGV4IHByYWN0aWNpbmcgZm9vdGJhbGwgd2l0aCBoaXMgaGlnaCBzY2hvb2wgdGVhbSAoYW5kIGVuZHMgdXAgaGFyYXNzaW5nIGhpcyBzb24ncyBjb2FjaCkuIEJ1dCBvbmNlIGV4ZWN1dGVkLCBNZWVrZXIgcmV0dXJucyBhcyBhIHJldmVuYW50IChvciBhcyBLZWxseSBQZXJpbmUgY2FsbHMgImEgaGFtYnVyZ2VyIHdpdGhvdXQgdGhlIGZyaWVzIiksIHdob3NlIHNvbGUgYWltIGlzIHRvIGdldCBoaXMgcmV2ZW5nZSwgd2hpY2ggYmFzaWNhbGx5IG1lYW5zIG1ha2luZyBTaWx2YW5vJ3MgbGlmZSBhIG1pc2VyeS48YnIgLz48YnIgLz5MZXQgbWUgcG9pbnQgb3V0IHRoZSBmYWN0IHRoYXQgSnVkZ2UgYW5kIEp1cnkgaXMgbm90IGEgdHJ1ZSBob3Jyb3IgZmlsbS4gSXQgaXMgYSBzdXBlcm5hdHVyYWwgYWN0aW9uIGZpbG0sIHdpdGggTWVla2VyIGNoYXNpbmcgU2lsdmFubywgdXNpbmcgaGlzIGFiaWxpdHkgdG8gY2hhbmdlIGZvcm0gKHdoaWNoIGFtb3VudHMgdG8gRGF2aWQgS2VpdGggZHJlc3NpbmcgdXAgYXMgZXZlcnl0aGluZyBmcm9tIGFuIEVsdmlzIGltcGVyc29uYXRvciwgYSBGcmVuY2ggY2hlZiAod2l0aCBhbiBhY2NlbnQgYXMgYmFkIGFzIGhpcyBtb3VzdGFjaGUpLCBhIGRyYWcgcXVlZW4sIGEgY2xvd24gJiBhIHN0YW5kLXVwIGNvbWVkaWFuKSwgYSBzaG90Z3VuIHdoaWNoIGZpcmVzIGV4cGxvc2l2ZSByb3VuZHMgJiBhbiBpbnZ1bG5lcmFiaWxpdHkgdG8gZGVhdGggKGFsdGhvdWdoIHRoYXQgZG9lc24ndCBzdG9wIE1hcnRpbiBLb3ZlIGZyb20gc2hvb3RpbmcgS2VpdGggd2l0aCBhIERlc2VydCBFYWdsZSksIHRvIHBheSBTaWx2YW5vIGJhY2sgZm9yIGtpbGxpbmcgTWVla2VyJ3Mgd2lmZS48YnIgLz48YnIgLz5EaXJlY3RvciBKb2huIEV5cmVzIGRvZXMgbm90IHNlZW0gaW50ZXJlc3RlZCBpbiBjaGFyYWN0ZXJpc2F0aW9ucywgaW5zdGVhZCBmb2N1c2luZyBzb2xlbHkgb24gYWN0aW9uIHNjZW5lcywgd2hpY2ggdGhlIGZpbG0gaGFzIHBsZW50eSBvZi4gQnV0IHRoYXQgaXMgdGhlIGZpbG0ncyBtYWluIGZsYXcsIHNpbmNlIHRoZXJlJ3Mgbm90aGluZyB0byBjb25uZWN0IHRoZSBhY3Rpb24gc2NlbmVzIHRvZ2V0aGVyLiBUaGUgYWN0aW5nIGlzIHN1cnByaXNpbmdseSBnb29kLCB3aXRoIEtlaXRoIGRlbGl2ZXJpbmcgdGhlIGJlc3QgcGVyZm9ybWFuY2UsIHN1cHBvcnRlZCBhYmx5IGJ5IEtvdmUsIGFzIHdlbGwgYXMgUGF1bCBLb3Nsbywgd2hvIHBsYXlzIHRoZSB3YXNoZWQtdXAgY29wIHF1aXRlIHdlbGwuIEtlbGx5IFBlcmluZSBpcyBhbm5veWluZyBhcyB0aGUgY2FiYmllIHdobyB0cmllcyB0byBoZWxwIGJ1dCBtYWtlcyB0aGUgc2l0dWF0aW9uIHdvcnNlLikAAAAAAAAAQAqGAwjDAhDDAiL0AkJlZHJvb21zIGFuZCBIYWxsd2F5cyBnaXZlcyBpdHMgYXVkaWVuY2UgYSBsb29rIGludG8gdGhlIG1pbmQgb2YgYSBtYW4gd2hvIHRoaW5rcyBoZSdzIGZvdW5kIGhpbXNlbGYsIG9ubHkgdG8gZmluZCBvdXQgdGhhdCBoZSdzIG5vdCBzbyBzdXJlIGhlIGZvdW5kIHRoZSByaWdodCBndXkuIElmIHlvdSB0aGluayB0aGF0IGFsbCBnYXkgY29tZWRpZXMgYXJlIHRoZSBzYW1lLCBjaGVjayB0aGlzIG9uZSBvdXQuIEFsdGhvdWdoIHRoZSBtb3ZpZSBlbmRzIHdpdGhvdXQgbXVjaCByZXNvbHV0aW9uLCB0aGUgaGlsYXJpb3VzIG9uZS1saW5lcnMsIHBlY3VsaWFyIHNpdHVhdGlvbnMsIGFuZCBxdWlya3kgY2hhcmFjdGVycyBhcmUgc3VyZSB0byBzYXRpc2Z5LikAAAAAAAAAQArKBQjEAhDEAiK4BUJlYXV0aWZ1bCBmaWxtLCBwdXJlIENhc3NhdmV0ZXMgc3R5bGUuIEdlbmEgUm93bGFuZCBnaXZlcyBhIHN0dW5uaW5nIHBlcmZvcm1hbmNlIG9mIGEgZGVjbGluaW5nIGFjdHJlc3MsIGRlYWxpbmcgd2l0aCBzdWNjZXNzLCBhZ2luZywgbG9uZWxpbmVzcy4uLmFuZCBhbGNvaG9saXNtLiBTaGUgdHJpZXMgdG8gZXNjYXBlIGhlciBvd24gc3ViY29uc2Npb3VzIGdob3N0cywgZW1ib2RpZWQgYnkgdGhlIGRlYXRoIHNwZWN0cmUgb2YgYSB5b3VuZyBnaXJsLiBBY2NlcHRhbmNlIG9mIG9uZXNlbGYsIG9mIGh1bWFuIGNvbmRpdGlvbiwgdGhvdWdoIGl0cyBvdmVyYWxsIGRpZmZpY3VsdGllcywgaXMgdGhlIHJlYWwgcHVycG9zZSBvZiB0aGUgZmlsbS4gVGhlIHBhcmFsbGVsIGJldHdlZW4gdGhlIHRoZWF0cmljYWwgc2VxdWVuY2VzIGFuZCB0aGUgZmlsbSBpdHNlbGYgYXJlIHB1enpsaW5nOiBpdCdzIGxpa2UgaWYgdGhlIHN0YWdlIGJlY2FtZSBhIHdheSBvdXQgZm9yIHRoZSBIZXJvaW4uIElmIGFsbCBhbWVyaWNhbiBtb3ZpZXMgY291bGQgb25seSBiZSB0aGF0IHRvcC1xdWFsaXR5LCBkZWFsaW5nIHdpdGggaHVtYW4gcmVsYXRpb25zIG9uIGFuIGFkdWx0IGxldmVsLCBub3QgdHJ5aW5nIHRvIGluZmFudGlsaXplIGFuZCBzdGFuZGFyZGl6ZSBmZWVsaW5ncy4uLiBPbmUgb2YgdGhlIGJlc3QgZHJhbWFzIGV2ZXIuIDEwLzEwLikAAAAAAAAAQArEBQjFAhDFAiKyBUJhZC4gQmFkLiBCYWQuIFRob3NlIHRocmVlIGxpbmVzIHN1bSB1cCB0aGlzIGNyYXBweSBsaXR0bGUgZmlsbSB0aGF0IGNhbiBvbmx5IGF0dHJhY3QgaWRpb3QgY2hpbGRyZW4gYW5kIHRoZWlyIHBhcmVudHMgdG8gdGhlIGNpbmVtYS4gYW5kIGl0cy4uLiAjMSBNb3ZpZSBpbiBBbWVyaWNhISBXaGF0IGlzIHRoaXMgY291bnRyeSB0aGlua2luZz8gTWlrZSBNeWVycyBsb29raW5nIG1vcmUgbGlrZSBNaWNoZWFsIEphY2tzb24uIFNvbWUgQ2hpbmVlc2UgbGFkeSB0aGF0IGZhbGxzIGFzbGVlcCB3aXRoaW4gMyBtaW51dGVzLiBBIGxhbWUgcGxvdCB3aXRoIGRpcnR5IGpva2VzLiBJdCdzIGdyb3Rlc3VxdWUgYW5kIGF3ZnVsLiBXaGVuIEdyZWVuLUVnZ3MgYW5kIEhhbSBjb21lcyBvdXQgaW4gMjAwNSBJJ2xsIGJlIHNvIGhhcHB5ISAobm90KSBFZGRpZSBNdXJwaHkgYW5kIFRyYWN5IE1vcmdhbiB3aWxsIHByb2JhYmx5IHBsYXkgdHdvIGhpcHN0ZXJzIHRyeWluZyB0byBmaW5kIHRoZSBsb3N0IEdyZWVuLUVnZ3MgYW5kIEhhbS4gVGhleSdsbCB0cnkgdG8gY2hhc2UgU2FtLUktQW0gYW5kIHRoYXQgbWVhbiBndXkgd2hvIGFyZSBydW5uaW5nIGF3YXkgd2l0aCBpdC4gKEkgaG9wZSB0aGV5IGRvbid0IHJ1aW4gdGhlIGNsYXNzaWMgYm9vay4pIERvbid0IHdhc3RlIHRpbWUgYW5kIG1vbmV5IGJ5IHNlZWluZyB0aGlzLikAAAAAAAAAQAryBQjGAhDGAiLgBUF3ZnVsLCBzaW1wbHkgYXdmdWwuIEl0IHByb3ZlcyBteSB0aGVvcnkgYWJvdXQgInN0YXIgcG93ZXIuIiBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGdyZWF0IFRWIGJlY2F1c2UgdGhlIGd1eSB3aG8gZGlyZWN0ZWQgKGJhdHRsZXN0YXIpIFRpdGFuaWNhIGlzIHRoZSBzYW1lIGd1eSB3aG8gZGlyZWN0ZWQgdGhpcyBzaGxvcCBzY2h0b2NrIHNjaHRpY2sgYWJvdXQgYSBjaGljay4gQiBPIFIgSSBOIEcuPGJyIC8+PGJyIC8+RmluZCBzb21ldGhpbmcgYSB0aG91c2FuZCB0aW1lcyBtb3JlIGludGVyZXN0aW5nIHRvIGRvIC0gbGlrZSB3YXRjaCB5b3VyIFRWIHdpdGggbm8gcGljdHVyZSBhbmQgbm8gc291bmQuIDEvMTAgKEkgcmF0ZWQgaXQgc28gaGlnaCBiL2MgdGhlcmUgYXJlbid0IGFueSBuZWdhdGl2ZSBzY29yZXMgaW4gdGhlIElNRGIuY29tIHJhdGluZyBzeXN0ZW0uKTxiciAvPjxiciAvPi1aYXBob2lkPGJyIC8+PGJyIC8+UFM6IE15IHRoZW9yeSBhYm91dCAic3RhciBwb3dlciIgaXM6IHRoZSBtb3JlICJzdGFyIHBvd2VyIiB1c2VkIGluIGEgc2hvdywgdGhlIHdlYWtlciB0aGUgc2hvdyBpcy4gKEl0J3MgY2FsbGVkIGFuIGluZGlyZWN0IHByb3BvcnRpb25hbGl0eTogcXVhbGl0eSAxLyJzdGFyIHBvd2VyIiwgbGVzcyAic3AiIG1ha2VzIGZvciBiZXR0ZXIgcXVhbGl0eSwgZXRjLiBBbm90aGVyIHdheSB0byBsb29rIGF0IGl0IGlzOiAibW9yZSBpcyBsZXNzLiIpPGJyIC8+PGJyIC8+LVopAAAAAAAAAEAK2AUIxwIQxwIixgVBdWRyZXksIEkga25vdyB5b3UgdHJ1bHkgY2hlcmlzaCB5b3VyIGh1c2JhbmQgVGVkJ3MgbWVtb3J5IGJ1dCBQTEVBU0UgZG8gaGlzIGxlZ2FjeSBqdXN0aWNlIGFuZCBoZWVkIGhpcyB3aXNoZXMuIERyLiBTZXVzcyByZWZ1c2VkIHRvIGxpY2Vuc2UgaGlzIGNoYXJhY3RlcnMgZHVyaW5nIGhpcyBsaWZldGltZSBmb3IgYSB2ZXJ5IGdvb2QgcmVhc29uLiBXZSBiZWcgb2YgeW91IHRvIHBsZWFzZSBzdG9wIGNhc2hpbmcgaW4gb24gaGlzIHN0b3JpZXMsIGltYWdlcywgZmFudGFzaWVzIGFuZCBjaGFyYWN0ZXJzLiBUaGV5IGFyZSBnZXR0aW5nIGRpc2VtYm93ZWxlZCBieSB0aGUgcG93ZXJzIHRoYXQgYmUgb2YgSG9sbHl3b29kIGFuZCBCcm9hZHdheS4gVGhlIGNoaWxkcmVuIG9mIHRvbW9ycm93IHdpbGwgYmUgc3R1Y2sgd2l0aCB0aGVzZSBoaXN0cmlvbmljIGFuZCBncm90ZXNxdWUgaW50ZXJwcmV0YXRpb25zIHRoYXQgd2lsbCBmb3JldmVyIHBvbGx1dGUgdGhlIGxvdmluZyB3YXJtdGggYW5kIGlubm9jZW5jZSBvZiBoaXMgYm9va3MuPGJyIC8+PGJyIC8+SXQgaXMgaW5kZWVkIHlvdXIgcHJvcGVydHkgdG8gZG8gd2l0aCBhcyB5b3Ugd2lzaC4gSSBqdXN0IHdpc2ggeW91IHdvdWxkIGxpc3RlbiB0byB0aGUgYWR2aWNlIG9mIG90aGVycyBmb3IgYSBsaXR0bGUgd2hpbGUuIFNhdmUgd2hhdCBpcyBsZWZ0IG9mIERyLiBTZXVzcy4gVGhhbmsgeW91LikAAAAAAAAAQAq1EQjIAhDIAiKjEUF0IHRpbWVzIEkgcmVhbGx5IHdvbmRlcsKFIHdoZW4gSSBsb29rIGF0IHRoZSBjb21tZW50cyBoZXJlIGl0IHNlZW1zIGFzIGlmIG1vc3QgcGVvcGxlIGhhdmUgc2VlbiBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZpbG0gdGhhbiBJIGhhdmUuIEkndmUganVzdCBzZWVuIGl0Li4uIGFuZCBsaWtlZCBpdC4gTm90IGluIHRoZSB3YXksIHRoYXQgaXQgbWFkZSBtZSBoYXBweSwgYnV0IGluIHRoZSB3YXkgb2YgaGF2aW5nIHNlZW4gYSBnb29kIGZpbG0hPGJyIC8+PGJyIC8+VGhlIGZpbG0gbmVlZHMgc29tZSBwYXRpZW5jZSwgeWVzLiBBbmQgeWVzLCB0aGUgbWFpbiBjaGFyYWN0ZXIgaXMgUkVBTExZIGFubm95aW5nLCBidXQgdGhhdCBJJ20gc3VyZSBpcyBieSBpbnRlbnRpb24uPGJyIC8+PGJyIC8+TWF5YmUgaXQgcmVhbGx5IG1ha2VzIGEgZGlmZmVyZW5jZSBpZiB5b3Ugd2F0Y2ggdGhpcyBmaWxtIGluIGEgY2luZW1hIG9yIGF0IGhvbWUuIE1vc3QgcGVvcGxlIHdhdGNoIGZpbG1zIGF0IGhvbWUgbGlrZSB0aGV5IGFyZSBsaXN0ZW5pbmcgdG8gZWxldmF0b3IgbXVzaWMuIFRoaXMgbW92aWUgZGVmaW5pdGVseSBkb2Vzbid0IGZpdCBhcyBiYWNrZ3JvdW5kIG5vaXNlLjxiciAvPjxiciAvPkFuZCBuby4gR29vZCBkaXJlY3RpbmcgZG9lc24ndCBtZWFuIGhhdmluZyBmaXZlIGxhdWdocyBvciBleHBsb3Npb25zIGEgc2Vjb25kLiBHb29kIGRpcmVjdGluZyBtZWFucyBmb2xsb3dpbmcgeW91ciBzdWJqZWN0IGFuZCBrZWVwaW5nIHRoZSBzdG9yeSBhbmQgYWN0b3JzIHRvZ2V0aGVyLiBBbmQgd2hpbGUgdGhhdCBkb2Vzbid0IHdvcmsgb3V0IHBlcmZlY3RseSwgYXQgbGVhc3QgSSB0aGluayBpdCB3b3JrcyBxdWl0ZSBnb29kLjxiciAvPjxiciAvPkkgbGlrZWQgdGhlIHBob3RvZ3JhcGh5IGFuZCBzZXRzLCBldmVuIGlmIHRoZXkgYnJpbmsgb24gdGhlIHN1cnJlYWwgYXQgdGltZXMuIFRoZSBvcGVuaW5nIHNjZW5lIGlzIHJlYWxseSBzcGVjaWFsLjxiciAvPjxiciAvPkkgYWxzbyBsaWtlZCB0aGUgYWN0aW5nIMKWIEd1aWxsYXVtZSBEZXBhcmRpZXUgaXMgTk9UIHBsYXlpbmcgUGllcnJlLiBIZSBpcyBhY3RpbmcgdGhlIHJvbGUgb2YgYSBQaWVycmUgd2hvIGlzIGhpbXNlbGYgcGxheWluZyBhIHJvbGUhIFBpZXJyZSBpcyBub3QgdGhlIHJvbWFudGljIGhlcm8gdGhhdCBoZSBzbyBoYXJkIHRyaWVzIHRvIGJlLCBoZSBpcyBhIHByZXN1bXB0dW91cyBhbmQgc2VsZi1yaWdodGVvdXMgaWRpb3QsIGEgZG93bnJpZ2h0IHdlYWtsaW5nIHdobyBieSBhbmQgYnkgaGFybXMgYWxsIHRoZSBwZW9wbGUgaGUgY2xhaW1zIHRvIHByb3RlY3QuIFRoYXQgZXZlbiBoaXMgbG92ZSBmb3IgdHJ1dGggaXMgc2ltcGx5IGEgcG9zZSBpcyBiZWF1dGlmdWxseSBkZW1vbnN0cmF0ZWQgYnkgaGlzIG9uZ29pbmcgbHlpbmcgYW5kIG5vdCBldmVuIG9uY2UgYXNraW5nIHF1ZXN0aW9ucyBvciBleHBsYWluaW5nIGhpbXNlbGYuPGJyIC8+PGJyIC8+UGVvcGxlIGFyZSB3b25kZXJpbmcgd2hlcmUgdGhpcyBvciB0aGF0IHBlcnNvbiBjYW1lIGZyb20gYW5kIG90aGVyIHN0dWZmOiBObyBjaGFyYWN0ZXIgd2hvIGlzIHNlZW4gZm9yIG1vcmUgdGhhbiB0d28gc2NlbmVzIGlzIGxlZnQgdW5leHBsYWluZWQsIHRoZXJlIGlzIGVub3VnaCBpbmZvcm1hdGlvbiBzY2F0dGVyZWQgdGhyb3VnaG91dCB0aGUgZmlsbSBvbiBldmVyeW9uZS48YnIgLz48YnIgLz5BbmQgZXZlbiB0aGUgc3RyYW5nZSBidWlsZGluZyBiZWdpbnMgdG8gbWFrZSBzZW5zZSBhcyBzb29uIGFzIHRoZSB0YXJnZXQgcHJhY3RpY2luZyBpcyBzZWVuOiBSZW1lbWJlciB0aGF0IElzYWJlbGxlIGZsZWQgZnJvbSBhIHdhciB6b25lIC0gYW5kIG9idmlvdXNseSB0aGlzIGlzIGEgcmVmdWdlIGZvciBmaWdodGVycyBpbiBhIGNpdmlsIHdhciwgbW9zdCBsaWtlbHkgQm9zbmlhICh3aGljaCB3YXMgc3RpbGwgZ29pbmcgb24sIHdoZW4gdGhlIGZpbG0gd2FzIHByb2R1Y2VkKS4gQXQgbGVhc3QgdGhhdCdzIHdoYXQgaXMgaGludGVkIGF0IGJ5IHRoZSBzdG9yeSBJc2FiZWxsZSB0ZWxscyBQaWVycmUgd2hlbiBzaGUgZmlyc3QgbWVldHMgaGltIGFuZCBieSB0aGUgbGF0ZXIgc2NlbmUgd2hlcmUgUGllcnJlIHNob3dzIElzYWJlbGxlIHRoZSBib29rIHdpdGggaGlzIGZhdGhlciBvbiB0aGUgY292ZXIsIHdoaWNoIGlzIHN1cnJvdW5kZWQgYnkgYm9va3Mgb24gQm9zbmlhLikAAAAAAAAAQArkBgjJAhDJAiLSBkF0IGZpcnN0IHRoZSBtb3ZpZSBzZWVtZWQgdG8gYmUgZG9pbmcgZ3JlYXQsIHRoZXkgaGFkIHRoZSBjaGFyYWN0ZXJzIHByb2ZpbGVzIHNldC4uLnRoZSBwbG90IHNlZW1lZCB0byBiZSBnb2luZyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLi4uIGhvd2V2ZXIsIGFzIHRoZSBtb3ZpZSBwcm9ncmVzc2VkIGl0IHNlZW1lZCB0aGUgZGlyZWN0b3IgZm9jdXNlZCBvbiB0aGUgd3Jvbmcga2luZCBvZiB0aGluZ3MuLi5vciBqdXN0IGEgbG90IHdhcyBlZGl0ZWQgZnJvbSB0aGUgbW92aWUuIFRoZSBjaGFyYWN0ZXJzJyBpZGVudGl0aWVzIGNoYW5nZWQgZm9yIHRoZSB3b3JzZSB3aXRoaW4gdGhlIG1vdmllLiBBbHNvLCB0aGVyZSBzZWVtZWQgdG8gYmUgYSBsb3Qgb2YgaW1wbGljaXQgbWVhbmluZyAtLSBpbiBvdGhlciB3b3JkcyAtLSB0aGV5IGhhZCB0aGluZ3Mgd2l0aGluIHRoZSBtb3ZpZSB0aGF0IGRpZG4ndCBzZWVtIHRvIGZpdCB0aGUgbW92aWUgaXRzZWxmLiBBTkQgdGhlIHRpdGxlLi4uIG5vIHdoZXJlIGluIHRoZSBtb3ZpZSBkb2VzIHRoZSB0aXRsZSBmaXQgdGhlIG1vdmllLi4uSSBzdXBwb3NlIHRoZSB0aXRsZSB3b3JrcyBmb3IgdGhlIHByZXZpZXdzLi4uLiBBY3RvcnMgZGlkIHdlbGwgd2l0aCB3aGF0IHRoZXkgaGFkLi4uLi5pZiB0aGV5IGhhZCBhIGJldHRlciBkaXJlY3RvciBhbmQgd3JpdGVyLCBtYXliZSB0aGlzIHdvdWxkIGhhdmUgd29ya2VkIG91dCBiZXR0ZXIuIEJ1dCBpdCBkaWRuJ3QuIFNvIG5vdyB0aGVyZSdzIGEgbmV3IHRlcnJpYmxlIG1vdmllIGNvbWluZyBvdXQgdGhpcyBGcmlkYXkuLi4uIE15IG9waW5pb24hLi4uLmRvbid0IHdhc3RlIHlvdXIgdGltZSBvciBtb25leS4pAAAAAAAAAEAKrgIIygIQygIinAJBc2lkZSBmcm9tIHRoZSBob3JyZW5kb3VzIGFjdGluZyBhbmQgdGhlIHJpZGljdWxvdXMgYW5kIGx1ZGljcm91cyBwbG90LCB0aGlzIG1vdmllIHdhc24ndCB0b28gYmFkLiBVbmZvcnR1bmF0ZWx5LCB0aGF0IGRvZXNuJ3QgbGVhdmUgbXVjaCBtb3ZpZSBub3QgdG8gc3Vjay4gRG8gbm90IHdhc3RlIHlvdXIgdGltZSBvbiB0aGlzIGZpbG0sIGV2ZW4gaWYgeW91IGZpbmQgeW91cnNlbGYgc3VmZmVyaW5nIGZyb20gaW5zb21uaWEsIGFzIEkgZGlkLiBXYXRjaCBhbiBpbmZvbWVyY2lhbCBpbnN0ZWFkLikAAAAAAAAAQAqdDQjLAhDLAiKLDUFzIGV2ZXJ5b25lIGtub3dzLCBub2JvZHkgY2FuIHBsYXkgU2NhcmxldHQgTydIYXJhIGxpa2UgVml2aWVuIExlaWdoLCBhbmQgbm9ib2R5IGNhbiBwbGF5IFJoZXR0IEJ1dGxlciBsaWtlIENsYXJrIEdhYmxlLiBBbGwgb3RoZXJzIHBhbGUgaW4gY29tcGFyaXNvbiwgYW5kIFRpbW90aHkgRGFsdG9uIGFuZCBKb2FubmUgV2hhbGxleSBhcmUgbm8gZXhjZXB0aW9ucy4gT25lIHRoaW5nIHRoYXQgSSByZWFsbHkgY291bGRuJ3QgZ2V0IHBhc3Qgd2FzIHRoYXQgSm9hbm5lIGhhcyBCUk9XTiBleWVzLiBUaGUgZ3JlZW4gZXllcyB3ZXJlIHRoZSBtb3N0IGVuaGFuY2luZyBmZWF0dXJlIG9mIFNjYXJsZXR0J3MgZ29vZCBsb29rcywgYW5kIGluIHRoaXMgc2VxdWVsIHNoZSBoYXMgYmVlbiBzdHJpcHBlZCBvZiB0aG9zZS48YnIgLz48YnIgLz5UaGUgbW92aWUsIGFzIHdlbGwgYXMgdGhlIGJvb2ssIGhhZCBzZXZlcmFsIGx1bGxzIGluIGl0LiBUaGUgbmV3IGNoYXJhY3RlcnMgd2VyZW4ndCBhbGwgdGhhdCBtZW1vcmFibGUsIGFuZCBJIGZvdW5kIG15c2VsZiBmb3JnZXR0aW5nIHdobyB3YXMgd2hvLiBJIGZlbHQgYXMgdGhvdWdoIGhlciBnb2luZyB0byBJcmVsYW5kIGRpZCBhYnNvbHV0ZWx5IG5vdGhpbmcgd2hhdHNvZXZlci4gSXQgY291bGQgYmUgdGhhdCBJJ20gb25seSAxMSwgYnV0IEkgc2F3IG5vIGNoYW5nZSBpbiBoZXIgYXR0aXR1ZGUgdW50aWwgdGhlIGxhc3Qgc2F5LCAxMCBtaW51dGVzIHdoZW4gUmhldHQgdG9sZCBoZXIgc2hlIGhhZCBncm93biB1cC4gSWYgUmhldHQgaGFkbid0IHRvbGQgaGVyIHRoYXQsIEkgd291bGQgaGF2ZSBuZXZlciBndWVzc2VkIHRoYXQgdGhlcmUgd2FzIGFueSBjaGFuZ2UgaW4gaGVyIGF0dGl0dWRlLiBTaGUgcmVhbGx5IGxvdmVkIENhdCwgaGVyIGJhYnkuIFNoZSBsaWtlcyB0aGlzIGNoaWxkIGJlc3QgYmVjYXVzZSBzaGUgaGFkIGl0IHdpdGggUmhldHQsIGhlciBvbmx5IGxvdmVkIGh1c2JhbmQuIFN0aWxsLCBpZiB5b3UndmUgcmVhZCBHb25lIFdpdGggVGhlIFdpbmQsIHlvdSB3b3VsZCBzZWUgdGhhdCBjaGlsZHJlbiBtYWtlIG5vIGRpZmZlcmVuY2UgaW4gU2NhcmxldHQncyB3b3JsZC4gPGJyIC8+PGJyIC8+UXVpdGUgZnJhbmtseSwgaXQgc2VlbWVkIHRvIG1lIGxpa2UgdGhlcmUgd2FzIHdheSB0b28gbXVjaCBnb2luZyBvbiB3aXRob3V0IFJoZXR0LiBBbGwgYW55Ym9keSBjYXJlcyBhYm91dCBpcyB3aGV0aGVyIG9yIG5vdCBSaGV0dCBhbmQgU2NhcmxldHQgZ2V0IGJhY2sgdG9nZXRoZXIsIGFuZCBTY2FybGV0dCB0b29rIHdheSB0b28gbG9uZyB0byBnZXQgdG8gdGhhdC4gSXQgaXMgdmlydHVhbGx5IG5vdGhpbmcgY29tcGFyZWQgdG8gR29uZSBXaXRoIFRoZSBXaW5kLCBidXQgdGhlbiBhZ2FpbiB3aGF0IGlzbid0PyBJZiB5b3UgaGF2ZSByZWFkIHRoZSBub3ZlbCwgeW91IHdpbGwgbGlrZSB0aGF0IGJldHRlciB0aGFuIHRoZSBtb3ZpZS48YnIgLz48YnIgLz5JIHdvdWxkIHdhdGNoIGl0LCBqdXN0IGJlY2F1c2UgaXQgaXMgdGhlIHNlcXVlbCB0byBHb25lIFdpdGggVGhlIFdpbmQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgaXQncyB3b3J0aHdoaWxlLiBJdCBtYXkgbm90IHNhdGlzZnkgeW91IGVudGlyZWx5LCBidXQgaXQgd2lsbCBnZXQgeW91IHNvbWUgb2YgdGhlIHdheSB0aGVyZS4pAAAAAAAAAEAKjRIIzAIQzAIi+xFBcyBhbiBhdmlkIEdvbmUgV2l0aCB0aGUgV2luZCBmYW4sIEkgd2FzIGRpc2FwcG9pbnRlZCB0byB3YXRjaCB0aGUgb3JpZ2luYWwgbW92aWUgYW5kIHNlZSB0aGF0IHRoZXkgaGFkIGxlZnQgb3V0IG1hbnkgaW1wb3J0YW50IGNoYXJhY3RlcnMuIEx1Y2tpbHksIHRoZSBmaWxtIG9uIGl0cyBvd24gd2FzIGEgd29uZGVyZnVsIHBpZWNlLiBXaGVuIHRoZSBib29rIFNjYXJsZXR0IGNhbWUgb3V0LCBJIHJlYWQgaXQgaW4gaG9wZXMgb2YgZm9sbG93aW5nIHR3byBvZiBteSBmYXZvcml0ZSBsaXRlcmFyeSBjaGFyYWN0ZXJzIGZhcnRoZXIgb24gdGhlaXIgam91cm5leSB0b2dldGhlci4gV2hpbGUgdGhlIGJvb2sgbGFja3MgYW55IHRydWUgcXVhbGl0eSwgaXQgcmVtYWlucyBhIGdvb2Qgc3RvcnksIGFuZCwgYXMgbG9uZyBhcyBJIHdhcyBhYmxlIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIG9yaWdpbmFsLCB3YXMgYW5kIHN0aWxsIGlzIGVuam95YWJsZS4gSG93ZXZlciwgSSBjb25zaWRlciB0aGUgc2l4IGhvdXJzIEkgc3BlbnQgd2F0Y2hpbmcgdGhlICJTY2FybGV0dCIgbWluaXNlcmllcyB0byBiZSBzb21lIG9mIHRoZSB3b3JzdC1zcGVudCBob3VycyBvZiBteSBsaWZlLiBEaXNjcmVkaXRpbmcgYW55IG9mIHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIgdHJhaXRzIHNvIHdlbGwtZm9ybWVkIGluIE1hcmdhcmV0IE1pdGNoZWxsJ3MgYm9vaywgdGhpcyBzZXJpZXMgYWxzbyB0dXJuZWQgdGhlIHN0b3J5IG9mIHRoZSBzZXF1ZWwgaW50byBvbmUgb2YgcmFwZSwgbWlzdHJ1c3QsIG11cmRlciwgYW5kIG1pc2Zvcm1lZCByZWxhdGlvbnNoaXBzIHRoYXQgZXZlbiB0aGUgYm9vayBTY2FybGV0dCBzdGF5ZWQgYXdheSBmcm9tLiBUaGUgY2FzdGluZyBmb3IgbWFueSBvZiB0aGUgY2hhcmFjdGVycyByZWZ1c2VkIHRvIGV4YW1pbmUgdGhlIHRyYWl0cyB0aGF0IGhhZCBiZWVuIHNvIHdlbGwtZm9ybWVkIGluIGJvdGggdGhlIG9yaWdpbmFsIG5vdmVsIGFuZCBmaWxtLCBhbmQgZXZlbiBjYXJyaWVkIHRocm91Z2ggaW4gdGhlIHNlY29uZCBib29rLCBhbmQgYWdhaW4gbGVhdmVzIG91dCBhdCBsZWFzdCBvbmUgaW5jcmVkaWJseSBjcnVjaWFsIGNoYXJhY3Rlci4gSW4gdGhlIG5vdmVsLCBTY2FybGV0dCBPJ0hhcmEgQnV0bGVyIGZvbGxvd3MgaGVyIGVzdHJhbmdlZCBodXNiYW5kIFJoZXR0IEJ1dGxlciB0byBDaGFybGVzdG9uIHVuZGVyIHRoZSBndWlzZSBvZiB2aXNpdGluZyBleHRlbmRlZCBmYW1pbHkuIEFmdGVyIGNvbWluZyB0byBhbiAiYXJyYW5nZW1lbnQiIHdpdGggUmhldHQsIHNoZSBhZ3JlZXMgdG8gbGVhdmUsIGFuZCBwcm9jZWVkcyB0byByZWNvbm5lY3Qgd2l0aCBoZXIgTydIYXJhIHJlbGF0aXZlcyBpbiBTYXZhbm5haC4gRXZlbnR1YWxseSwgc2hlIGFjY29tcGFuaWVzIGhlciBjb3VzaW4gQ29sdW0sIGEgcGFzc2lvbmF0ZSBsZWFkZXIgb2YgdGhlIEZlbmlhbiBCcm90aGVyaG9vZCwgdG8gSXJlbGFuZCwgdG8gZnVydGhlciBleHBsb3JlIGhlciBmYW1pbHkncyAicm9vdHMgdGhhdCBnbyBkZWVwLCIgYW5kIGlzIGV2ZW50dWFsbHkgbmFtZWQgIlRoZSBPJ0hhcmEsIiB0aGUgaGVhZCBvZiB0aGUgZmFtaWx5LiBXaGlsZSBoZXIgZHV0aWVzIGFzIFRoZSBPJ0hhcmEga2VlcCBoZXIgZW5nYWdlZCBpbiBoZXIgdG93biBvZiBCYWxseWhhcmEsIFNjYXJsZXR0IHZlbnR1cmVzIG91dCBpbnRvIHRoZSB3b3JsZCBvZiB0aGUgRW5nbGlzaCBsYW5kb3duZXJzLCBhbmQgaW5zdGFudGx5IGJlY29tZXMgYSBzb3VnaHQtYWZ0ZXIgZ3Vlc3QgYXQgbWFueSBvZiB0aGVpciBwYXJ0aWVzLiBTaGUsIGhhdmluZyBiZWVuIHNjb3JuZWQgYnkgUmhldHQgdGltZSBhbmQgdGltZSBhZ2FpbiwgZXZlbnR1YWxseSBhZ3JlZXMgdG8gbWFycnkgTHVrZSwgdGhlIGVhcmwgb2YgRmVudG9uLCB1bnRpbCBSaGV0dCBjb21lcyBhbG9uZyBpbiBhIGNsaWNow6lkICJuaWdodC1vbi13aGl0ZS1ob3JzZSIgLSB0eXBlIG9mIGEgcmVzY3VlLiBUaGUgIlNjYXJsZXR0IiBtaW5pc2VyaWVzIGZhaWxzIGV2ZW4gdG8gZG8gdGhpcyBqdXN0aWNlLiBSYXBlZCBieSBoZXIgZmlhbmPDqSBhbmQgc2Nvcm5lZCBieSBoZXIgZmFtaWx5LCB0aGUgc2VyaWVzIHNob3dzIFNjYXJsZXR0IHRocm93biBpbiBqYWlsIGFmdGVyIHNoZSBpcyBibGFtZWQgZm9yIGEgbXVyZGVyIGhlciBjb3VzaW4gY29tbWl0dGVkLjxiciAvPjxiciAvPkkgaGVhcnRpbHkgYWR2aXNlIGFueW9uZSBjb25zaWRlcmluZyBzcGVuZGluZyB0aGVpciBkYXkgd2F0Y2hpbmcgdGhpcyB0byByZXRoaW5rIHRoaXMgZGVjaXNpb24uKQAAAAAAAABACqQECM0CEM0CIpIEQXBhcnQgZnJvbSB0aGUgZmFjdCB0aGF0IHRoaXMgZmlsbSB3YXMgbWFkZSAoIEkgc3VwcG9zZSBpdCBzZWVtZWQgYSBnb29kIGlkZWEgYXQgdGhlIHRpbWUgY29uc2lkZXJpbmcgQk9UVE9NIHdhcyBzbyBwb3B1bGFyICkgdGhlIG9uZSB0aGluZyB0aGF0IHB1enpsZWQgbWUgYWJvdXQgR1VFU1QgSE9VU0UgUEFSQURJU08gd2FzIHdoYXQgaGFwcGVuZWQgdG8gdGhlIGxpZ2h0aW5nID8gVGhlcmUgaXMgYWJzb2x1dGVseSBubyBhcnRpZmljaWFsIGxpZ2h0aW5nIHVzZWQgaW4gdGhpcyBmaWxtIHdoYXRzb2V2ZXIgLCBhbmQgSSB3YXRjaGVkIGl0IG9uIG5ldHdvcmsgVFYgc28gaXQgd2FzbmB0IGEgY2FzZSBvZiB3YXRjaGluZyBhIGRvZGd5IHRhcGUuIEluIGZhY3QgdGhlIGZpbG0gd2FzIHNob3Qgc28gZGFya2x5IGl0IHdhcyBpbXBvc3NpYmxlIHRvIHNlZSB3aGF0IHRoZSBoZWxsIHdhcyBnb2luZyBvbiAuIEJ1dCBpZiB0aGUgZGlhbG9ndWUgd2FzIGFueXRoaW5nIHRvIGdvIGJ5IHRoYXRgcyBtYXliZSBub3QgYSBiYWQgdGhpbmcpAAAAAAAAAEAKhhAIzgIQzgIi9A9Bbm90aGVyIHdlbGwgZG9uZSBtb3JhbCBhbWJpZ3VpdHkgcGllY2VzIHdoZXJlIHRoZSBhbnRpLWhlcm8gbWFrZXMgaXQgaGFyZCB0byBkZWNpZGUgd2hvIHRvIHJvb3QgZm9yLjxiciAvPjxiciAvPklmIG5vdGhpbmcgZWxzZSAiVGhlIEJlZ3VpbGVkIiBzaWxlbmNlZCBhbnlvbmUgd2hvIHNhaWQgdGhlcmUgd2VyZSBubyBnb29kIHBhcnRzIGZvciBhY3RyZXNzZXMgaW4gbW92aWVzLWF0IGxlYXN0IGluIDE5NzEuIFRoZXJlIHdlcmUgZm91ciBleGNlbGxlbnQgcGFydHMgZm9yIGFjdHJlc3NlcyBpbiB0aGlzIGZpbG0gYW5kIGFsbCB3ZXJlIHdlbGwgY2FzdCBhbmQgd2VsbCBleGVjdXRlZC48YnIgLz48YnIgLz5QYW1lbHluIEZlcmRpbiBkaWQgYSBmaW5lIGpvYiBhcyBBbXkgYW5kIHdvdWxkIGdvIG9uIHRvIHBsYXkgIldhbmRhIEp1bmUiLiBUaGlzIG11c3QgaGF2ZSBiZWVuIHRoZSBmaXJzdCB0aW1lIGFuIGFkdWx0IG1hbGUgYm94IG9mZmljZSBzdGFyIHNoYXJlZCBhbiBleHRlbmRlZCBraXNzIHdpdGggYSB0d2VsdmUteWVhci1vbGQgZ2lybCBvbiBjYW1lcmEsIHdvbmRlciBpZiB0aGVyZSB3YXMgbXVjaCBjb250cm92ZXJzeSBhYm91dCB0aGlzIGF0IHRoZSB0aW1lLiBJdCB3YXMgcHJvYmFibHkgUG9sYW5za2kncyBmYXZvcml0ZSBzY2VuZS4gR2l2ZW4gdGhlIGZhdGUgb2YgQW15J3MgdHVydGxlICJSYW5kb2xwaCIsIGl0IGlzIG5vIHN1cnByaXNlIHRoYXQgRmVyZGluIGdyZXcgdXAgdG8gYmUgYSBoYXJkY29yZSBhbmltYWwgcmlnaHRzIGFjdGl2aXN0LjxiciAvPjxiciAvPkdlcmFsZGluZSBQYWdlIHdhcyBsaWtld2lzZSBleGNlbGxlbnQsIHBsYXlpbmcgYSBjb21wbGV4IGNoYXJhY3RlciB3aXRoIGp1c3QgdGhlIHJpZ2h0IGFtb3VudCBvZiByZXN0cmFpbnQuIEl0IGlzIGludGVyZXN0aW5nIHRoYXQgc2hlIGRpZWQganVzdCB0aHJlZSBkYXlzIGFmdGVyIEVsaXphYmV0aCBIYXJ0bWFuIGNvbW1pdHRlZCBzdWljaWRlICh0aHJvd2luZyBoZXJzZWxmIHRocm91Z2ggYSBmaWZ0aCBmbG9vciB3aW5kb3cpIGFzIHRoZXkgaGFkIGFsc28gd29ya2VkIHRvZ2V0aGVyIGluICJZb3UncmUgYSBCaWcgQm95IE5vdyIuPGJyIC8+PGJyIC8+SGFydG1hbiAod2hvIGxvb2tzIGxpa2Ugc2hlIGNvdWxkIGJlIEJsYWlyIEJyb3duJ3Mgc2lzdGVyKSB3YXMgd29uZGVyZnVsIGFzIEVkd2luYSBhbmQgc2hvdWxkIGhhdmUgZ290dGVuIGFuIE9zY2FyIChubyBvdGhlciBwZXJmb3JtYW5jZSB3YXMgZXZlbiBjbG9zZSB0aGF0IHllYXIpLCBidXQgZ2l2ZW4gd2hhdCB3ZSBub3cga25vdyBhYm91dCBoZXIgeW91IHdvbmRlciBqdXN0IGhvdyBtdWNoIG9mIGhlciBwZXJmb3JtYW5jZSB3YXMgYSBzdHVkaWVkIGVmZm9ydCBhbmQgaG93IG11Y2gganVzdCBjYW1lIGZyb20gaW5zaWRlIGhlci4gRWR3aW5hIHNob3dzIHN1Y2ggcmF3IHBhaW4gaXQgaXMgZGlmZmljdWx0IHRvIHdhdGNoLiBMaWtlIE1hcmlseW4gTW9ucm9lJ3MgaW5jcmVkaWJsZSBwZXJmb3JtYW5jZSBpbiAiVGhlIE1pc2ZpdHMiLCB0aGUgdmlld2VyIGlzIHByb2JhYmx5IHNlZWluZyBhIHdob2xlIGxvdCBvZiBoZXIgb3duIGRlbW9ucyBpbiB0aGUgY2hhcmFjdGVyIHNoZSBpcyBwbGF5aW5nLjxiciAvPjxiciAvPkZpbmFsbHkgdGhlcmUgaXMgSm8gQW5uIEhhcnJpcyB3aG8gaXMgc3R1bm5pbmdseSBwZXJmZWN0IGFzIHRoZSBmbGlydHkgQ2Fyb2wuIEZvciBteSBtb25leSBIYXJyaXMgd2FzIHRoZSBzZXhpZXN0IGFjdHJlc3Mgb2YgdGhlIDE5NzAncywgY29tYmluaW5nIHNlbnN1YWxpdHkgd2l0aCBpbnRlbGxpZ2VuY2UgYW5kIGh1bW9yLiBTaGUgd2FzIHRoZSBiZXN0IHJlYXNvbiB0byB3YXRjaCB0aGUgIk1vc3QgV2FudGVkIiB0ZWxldmlzaW9uIHNlcmllcyBhbmQgdGhlIG9ubHkgcmVhc29uIHRvIHdhdGNoICJXaWxkIFdpbGQgV2VzdCBSZXZpc2l0ZWQiLiBIYXJkIHRvIGJlbGlldmUgdGhhdCBzb21lb25lIHdobyBjb3VsZCBicmluZyBhbGwgdGhhdCB0byB0aGUgc2NyZWVuIG5ldmVyIGJlY2FtZSBhIGJpZyBzdGFyLikAAAAAAAAAQAq2AwjPAhDPAiKkA0FuIGFic29sdXRlbHkgYXRyb2Npb3VzIGFkYXB0YXRpb24gb2YgdGhlIHdvbmRlcmZ1bCBjaGlsZHJlbidzIGJvb2suIENydWRlIGFuZCBpbmFwcHJvcHJpYXRlIGh1bW9yLCBzb21lIHNjYXJ5IHBhcnRzLCBhbmQgYSBzaWNrZW5pbmcgc2lkZSBzdG9yeSBhYm91dCB0aGUgbW9tJ3MgYm95ZnJpZW5kIHdhbnRpbmcgdG8gc2VuZCB0aGUgYm95IGF3YXkgdG8gbWlsaXRhcnkgc2Nob29sIHRvIGdldCBoaW0gb3V0IG9mIHRoZSB3YXkgbWFrZXMgdGhpcyB0b3RhbGx5IGluYXBwcm9wcmlhdGUgZm9yIHRoZSBraWRzIHdobyB3aWxsIG1vc3QgbGlrZWx5IHdhbnQgdG8gc2VlIGl0IGJlY2F1c2Ugb2YgdGhlIGJvb2sgKDMtOCkgeXIgb2xkcy4gRG9uJ3Qgd2FzdGUgeW91ciBtb25leSwgeW91ciB0aW1lLCBvciB5b3VyIGdvb2QganVkZ2VtZW50LikAAAAAAAAAQArGFAjQAhDQAiK0FEFuIEl0YWxpYW4vQW1lcmljYW4gY28tcHJvZHVjdGlvbiBjby1zdGFycmluZyBMaW5kYSBCbGFpciBhbmQgRGF2aWQgJ1RoZSBIb2ZmJyBIYXNzZWxob2ZmOiBob3cgY291bGQgYW55IGZhbiBvZiB0cmFzaHkgaG9ycm9yIHJlc2lzdCBzdWNoIGEgdHJlYXQ/PGJyIC8+PGJyIC8+V2VsbCwgYmFzZWQgb24gdGhlIHVuZXZlbnRmdWwsIGV4dHJlbWVseSB0ZWRpb3VzLCBhbmQgdXR0ZXJseSBub25zZW5zaWNhbCBmaXJzdCBmb3J0eSBtaW51dGVzIG9yIHNvLCBJIHdvdWxkIGhhdmUgc2FpZCAndmVyeSBlYXNpbHknOyB0aGFua2Z1bGx5LCBob3dldmVyLCB0aGluZ3MgZG8gZXZlbnR1YWxseSBnZXQgYSB0YWQgbW9yZSBlbnRlcnRhaW5pbmcgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHNldmVyYWwgaW52ZW50aXZlIGRlYXRoIHNjZW5lcywgYW5kIGZvciB0aG9zZSBsdWNreSBlbm91Z2ggdG8gZmluZCBhbiB1bmN1dCBjb3B5LCBhIHNtYXR0ZXJpbmcgb2YgbnVkaXR5IHRvbyAodW5mb3J0dW5hdGVseSwgbXkgY29weSB3YXMgb3B0aWNhbGx5IGVkaXRlZCB0byByZW1vdmUgc3VjaCBvZmZlbnNpdmUgbWF0ZXJpYWwpLjxiciAvPjxiciAvPlRoZSBIb2ZmIHN0YXJzIGFzIEdhcnksIGEgcGhvdG9ncmFwaGVyIHdobyBhY2NvbXBhbmllcyBoaXMgYmVhdXRpZnVsIGdpcmxmcmllbmQgTGVzbGllIChMZXNsaWUgQ3VtbWluZykgdG8gYSBydW4tZG93biBob3RlbCBvbiBhIHNlZW1pbmdseSBkZXNlcnRlZCBpc2xhbmQgaW4gb3JkZXIgdG8gdGFrZSBwaWN0dXJlcyBmb3IgaGVyIGxhdGVzdCBwcm9qZWN0LCBhIGJvb2sgYWJvdXQgd2l0Y2hlczsgd2hpbHN0IHRoZXJlLCBmcnVzdHJhdGVkIEdhcnkgYWxzbyBob3BlcyB0byB0cnkgYW5kIGN1cmUgYSBiYWQgY2FzZSBvZiBibHVlIGJhbGxzIGJ5IHJlbGlldmluZyBMZXNsaWUgb2YgaGVyIHZpcmdpbml0eS48YnIgLz48YnIgLz5IaXMgcGxhbnMgZm9yIG5vb2tpZSBhcmUgc2N1cHBlcmVkLCBob3dldmVyLCBieSB0aGUgdW5leHBlY3RlZCBhcnJpdmFsIG9mIHByb3BlcnR5IGRldmVsb3BlcnMgRnJlZGRpZSBhbmQgUm9zZSBCcm9va3MgKFJvYmVydCBDaGFtcGFnbmUgYW5kIEFubmllIFJvc3MpLCB0aGVpciBwcmVnbmFudCBkYXVnaHRlciBKYW5lIChCbGFpciksIHNvbiBUb21teSAoTWljaGFlbCBNYW5jaGVzdGVyKSwgcHJldHR5IG55bXBob21hbmlhYyBhcmNoaXRlY3QgTGluZGEgU3VsbGl2YW4gKENhdGhlcmluZSBIaWNrbGFuZCksIGFuZCBlc3RhdGUgYWdlbnQgSmVycnkgKFJpY2sgRmFybnN3b3J0aCksIHdobyBoYXZlIGNvbWUgdG8gaW5zcGVjdCB0aGUgaXNsYW5kJ3MgaG90ZWwuPGJyIC8+PGJyIC8+QWZ0ZXIgZXhwbGFpbmluZyB0aGVpciB1bmV4cGVjdGVkIHByZXNlbmNlIG9uIHRoZSBpc2xhbmQsIEdhcnkgYW5kIExlc2xpZSBhcmUgd2VsY29tZWQgYnkgdGhlIHByb3BlcnR5J3MgbmV3IG93bmVycywgYW5kIHdoZW4gYSB2aW9sZW50IHN0b3JtIHN1ZGRlbmx5IHBpY2tzIHVwLCBtYWtpbmcgaXQgcGVyaWxvdXMgdG8gcmV0dXJuIHRvIHRoZSBtYWlubGFuZCwgZXZlcnlvbmUgYWdyZWVzIHRvIHNwZW5kIHRoZSBuaWdodCBpbiB0aGUgb2xkIGJ1aWxkaW5nLiBVbmZvcnR1bmF0ZWx5LCB1bmJla25vd25zdCB0byB0aGUgaG90ZWwncyBuZXcgZ3Vlc3RzLCB0aGUgcGxhY2UgaXMgYWxzbyBob21lIHRvIHRoZSBzcGlyaXQgb2YgYW4gZXZpbCB3aXRjaCAoSGlsZGVnYXJkIEtuZWYpLCB3aG8gcmVxdWlyZXMgaHVtYW4gc2FjcmlmaWNlcyBpbiBvcmRlciB0byBicmluZyBoZXJzZWxmIGJhY2sgdG8gbGlmZS4gT25lIGJ5IG9uZSwgdmljdGltcyBhcmUgcHVsbGVkIGludG8gYSBzd2lybGluZyByZWQgdm9ydGV4ICh3aGljaCBpcyBndWFyYW50ZWVkIHRvIHByb3ZpZGUgdW5pbnRlbnRpb25hbCBsYXVnaHMpLCBiZWZvcmUgbWVldGluZyBhIHRlcnJpYmxlIGZhdGUuPGJyIC8+PGJyIC8+Tm9uZSBvZiB0aGlzIG1ha2VzIG11Y2ggc2Vuc2UsIGFuZCB0aGUgYWN0aW5nIGlzIGF0cm9jaW91cyAoTWFuY2hlc3RlciBhcyBUb21teSBpcyBwYXJ0aWN1bGFybHkgYmFkLCB3aGlsc3QgSGFzc2VsaG9mZiBwcm92ZXMgdG8gYmUgb25lIG9mIHRoZSBiZXR0ZXIgcGVyZm9ybWVycywgd2hpY2ggc3BlYWtzIHZvbHVtZXMgYWJvdXQgdGhlIG90aGVycyksIGJ1dCB0aG9zZSB2aWV3ZXJzIHdobyBtYWtlIGl0IHBhc3QgdGhlIGRyZWFyeSBmaXJzdCBoYWxmIGFyZSByZXdhcmRlZCB3aXRoIHNvbWUgcHJldHR5IGRlY2VudCBtb21lbnRzIG9mIGdvcmU6IFJvc2UgaGFzIGhlciBsaXBzIHNld24gdG9nZXRoZXIsIGJlZm9yZSBiZWluZyByb2FzdGVkIGFsaXZlIGluIGEgZmlyZXBsYWNlOyBKZXJyeSBpcyBjcnVjaWZpZWQgYW5kIGJ1cm50IGFsaXZlOyBMaW5kYSBpcyB0b3J0dXJlZCBieSBoYWdzIGFuZCBpbXBhbGVkIG9uIGEgc3dvcmRmaXNoKCEhKTsgRnJlZGRpZSdzIHZlaW5zIHB1bHNhdGUgYW5kIGVydXB0IGluIGdleXNlcnMgb2YgYmxvb2Q7IGFuZCBHYXJ5IGdldHMgc3RhYmJlZCBpbiB0aGUgYmFjay48YnIgLz48YnIgLz5PaCwgYW5kIExlc2xpZSBpcyByYXBlZCBieSBhIGd1eSB3aXRoIG5vIGxpcHMgYW5kIEJsYWlyIGdldHMgcG9zc2Vzc2VkIChhZ2FpbikuKQAAAAAAAABACqcJCNECENECIpUJQWx0aG91Z2ggdGhlcmUgd2VyZSBhIGZldyByb3VnaCBzcG90cyBhbmQgc29tZSBwbG90IGxpbmVzIHRoYXQgd2VyZW4ndCBleGFjdGx5IHRydWUgdG8gY2hhcmFjdGVyLCB0aGlzIHdhcyBDbGFzc2ljIEg6TE9UUy4gVGhlIGNoYXJhY3RlcnMsIG91dHNpZGUgb2YgTWlrZSBHaWFyZGVsbG8gKEdpYW5jYXJsbyBFc3Bvc2l0byksIHdlcmUgdHJ1ZSB0byBmb3JtLCBhbmQgdGhlIHJldW5pb24gc2NlbmVzIG9mIFBlbWJsZXRvbiAoQW5kcmUgQnJhdWdoZXIpIGFuZCBCYXlsaXNzIChLeWxlIFNlY29yKSB3ZXJlIGFzIGRlZXAgYW5kIHdlbGwgYWN0ZWQgYXMgYW55dGhpbmcgZXZlciB0byBncmFjZSB0aGUgc21hbGwgc2NyZWVuLjxiciAvPjxiciAvPiJIb21pY2lkZTogVGhlIE1vdmllIiBha2EgIkxpZmUgRXZlcmxhc3RpbmciIGlzIGEgZmFuIGZsaWNrLCBidXQgc3RhbmRzIG9uIGl0cyBvd24gYXMgd2VsbCBhcyBhbnkgMi1ob3VyIGVwaXNvZGUgb2YgdGhlIHNlcmllcy4gRm9udGFuYSwgT3Zlcm1leWVyIGFuZCBZb3NoaW11cmEgZGlkIGEgd29uZGVyZnVsIGpvYiBpbiBwdWxsaW5nIGxvb3NlIGVuZHMgZnJvbSA3IHNlYXNvbnMgYW5kIGV2ZXJ5IG1ham9yIGNhc3QgbWVtYmVyIG9mICJ0aGUgYmVzdCBkYW1uIHNob3cgb24gdGVsZXZpc2lvbiIgdG9nZXRoZXIgZm9yIHRoZSBzZXJpZXMgZmluYWxlIHRoYXQgTkJDIG5ldmVyIGJvdGhlcmVkIHRvIGdpdmUgaXQuIFRydWUgdG8gIkhvbWljaWRlIiBmb3JtLCB0aGVyZSB3ZXJlIG5vIGhhcHB5IGVuZGluZ3MsIHN1Y2ggaXMgbGlmZS4gVGhhdCdzIHdoYXQgaGFzIGFsd2F5cyBzZXQgdGhpcyBzaG93IGFwYXJ0IGZyb20gdGhlIG1pbmRsZXNzIGNvb2tpZS1jdXR0ZXIgY29wIHNob3dzIGxlZnQgb24gdGVsZXZpc2lvbi4gS3Vkb3MgdG8gdGhlIHdyaXRlcnMgYW5kIHRoZSBjYXN0IGZvciBjcmVhdGluZyBzb21ldGhpbmcgb3ZlciB0aGUgc3BhbiBvZiB0aGUgc2VyaWVzIGFuZCBpbiB0aGUgbW92aWUgdGhhdCBjaGFsbGVuZ2VkIHRlbGV2aXNpb24gdmlld2VycyBhbmQgcHJvZHVjZXJzIGFsaWtlLjxiciAvPjxiciAvPioqIEkgY2FsbCBteXNlbGYgYSAiSG9taWNpZGFsIE1hbmlhYyIgaWYgZm9yIG5vIG90aGVyIHJlYXNvbiB0aGFuIHRvIGtlZXAgbXkgY28td29ya2VycyBpbiBhIGNvb3BlcmF0aXZlIG1vb2QuICoqKQAAAAAAAABACr0KCNICENICIqsKQWx0aG91Z2ggSSBjYW4gc2VlIHRoZSBwb3RlbnRpYWxseSByZWRlZW1pbmcgcXVhbGl0aWVzIGluIHRoaXMgZmlsbSBieSB3YXkgb2YgaXQncyBpbnRyaWd1ZSwgSSBtb3N0IGNlcnRhaW5seSB0aG91Z2h0IHRoYXQgdGhlIHBhaW5mdWxseSBsb25nIG5hdHVyZSBpbiB0aGUgd2F5IHRoZSBzY2VuZSBzdHJ1Y3R1cmUgcGxheWVkIG91dCB3YXMgdG9vIG11Y2ggdG8gYXNrIG9mIG1vc3Qgdmlld2Vycy4gRW5vcm1vdXMgaG9sZXMgaW4gdGhlIHNjcmVlbnBsYXkgc3VjaCBhcyB0aGUgbmV2ZXIgZXhwbGFpbmVkICJ5b3VyIGZhdGhlciBkaWVkIHRvZGF5IiBjb21tZW50IGJ5IHRoZSBtb3RoZXIgbWFkZSBpdCBldmVuIGhhcmRlciB0byB0cnkgdG8gbWFrZSBzZW5zZSBvZiB0aGVzZSBjaGFyYWN0ZXJzLjxiciAvPjxiciAvPlRoaXMgd29uIGZpcnN0IHBsYWNlIGF0IENhbm5lcyBpbiAyMDAxIHdoaWNoIGlzIGEgc2hvY2sgY29uc2lkZXJpbmcuIFBlcmhhcHMgdGhlIEZyZW5jaCBoYWQgYmVlbiBzdGFydmVkIGZvciBmaWxtIG5vaXIgdGhhdCB5ZWFyIGFuZCB3ZXJlIGRlc3BlcmF0ZSBmb3Igc29tZXRoaW5nIGFzIHNhZGlzdGljIGFzIHRoaXMgZmlsbS4gSSB1bmRlcnN0b29kIHRoZSBsb25nIHNjZW5lcyBhcyBhIGRldmljZSB0byBrZWVwIHRoZSB2aWV3ZXIgYXMgdW5jb21mb3J0YWJsZSBhcyBwb3NzaWJsZSBidXQgd2hlbiBtYXRjaGVkIHdpdGggdGhlIGluYWJpbGl0eSB0byByZWxhdGUgdG8gdGhlIG1haW4gY2hhcmFjdGVyIGl0IHdlbnQgdG9vIGZhciBmb3IgbWUgYW5kIGtlcHQgbWUgYXQgYXJtcyBkaXN0YW5jZSBmcm9tIHRoZSBzdG9yeSBhbHRvZ2V0aGVyLjxiciAvPjxiciAvPlRoaXMgaXMgYSBmaWxtIGZvciBvbmx5IHRoZSBtb3N0IGRlZGljYXRlZCBmYW4gb2YgZmlsbSBub2lyIGFuZCBvbmUgd2hvIGV4cGVjdHMgbm8gZ3JhdGlmaWNhdGlvbiBmcm9tIGhhdmluZyB3YXRjaGVkIGEgZmlsbSBvbmNlIGl0J3Mgb3Zlci4gSSBMT1ZFRCBtb3ZpZXMgc3VjaCBhcyAiVHJhaW5zcG90dGluZyIgb3IgIlJlcXVpZW0gZm9yIGEgRHJlYW0iIC0gd2hpY2ggd2VyZSBmYXIgbW9yZSBkaXN0dXJiaW5nIGJ1dCBhdCBsZWFzdCBnYXZlIHRoZSB2aWV3ZXIgc29tZXRoaW5nIGluIHRoZSB3YXkgb2YgZWRpdGluZyBhbmQgcGFjaW5nLiBUbyB3YXRjaCB0aGlzIHRlYWNoZXJzIHNsb3cgYW5kIHBhaW5mdWwgc2lsZW5jZSBzY2VuZSBhZnRlciBzY2VuZSBqdXN0IGJlY2FtZSBzbyByZWR1bmRhbnQgdGhhdCBJIGZvdW5kIGl0IHRlZGlvdXMgLSBhbmQgSSByZWFsbHkgd2FudGVkIHRvIGxpa2UgdGhpcyBmaWxtIGF0IGV2ZXJ5IHR1cm4uKQAAAAAAAABACvYLCNMCENMCIuQLQWxyaWdodCwgd2Ugc3RhcnQgaW4gdGhlIG9mZmljZSBvZiBhIHNocmluaywgYW5kIGFwcGFyZW50bHkgbm90IGEgdmVyeSBnb29kIG9uZS4gVGhlIG1haW4gaGVybyBmcm9tIHRoZSBmaXJzdCBKYWNrIEZyb3N0IGlzIGluIHRoZSBzaHJpbmtzIG9mZmljZSBibHVydGluZyBvdXQgcmFuZG9tIHJoeW1lcyBhYm91dCBKYWNrIEZyb3N0LiBHZWUsIGFscmlnaHQgbXkgYnJvdGhlciBpcyB5ZWxsaW5nICcnVHVybiBpdCBvZmYhJycuIEFueXdheSwgYmFjayB0byB0aGUgY3JhcHB5IG1vdmllLjxiciAvPjxiciAvPlRoZSBzaHJpbmsgaGFzIGhpcyBzcGVha2VyIHBob25lIG9uIGFuZCBpcyBsZXR0aW5nIGhpcyBzZWNyZXRhcnkgYW5kIGhlciBmcmllbmRzIGxpc3RlbiBpbiBvbiB0aGlzIGhlcm9pYyBpbnNhbmUgc2hlcmlmZi4gSSBzdXBwb3NlIGhlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBoZXJvIGZyb20gdGhlIGZpcnN0IG1vdmllLCBidXQgaGUgbG9va3Mgbm90aGluZyBsaWtlIGhpbSEuIFlhZGRhIHlhZGRhIHlhZGRhLCB0aGV5IGxhdWdoIGF0IHRoZSBwb29yIHNoZXJpZmYsIHlhZGRhIHlhZGRhLiBOb3cgc29tZSBwZW9wbGUgYXJlIGRpZ2dpbmcgdXAgdGhlIGFudGktZnJvemVkIHNub3dtYW4sIHlhZGRhIHlhZGRhLCBub3cgd2UncmUgaW4gYSBsYWIgd2l0aCBzb21lIHR5cGUgb2YgZG9jdG9yIHBlb3BsZS4uIEkgZG9uJ3QgcXVpdGUgc2VlIGhvdyB0aGlzIGhhcyB0byBkbyBhbnl0aGluZywgYnV0IHRoZWlyIHBva2luZyB0aGUgYW50aS1mcmVlemUvRXZpbCBraWxsZXIgbXV0YW50IHNub3dtYW4gd2l0aCBuZWVkbGVzLCBoZWF0aW5nIGl0LCBzaG9ja2luZyBpdCwgYWRkaW5nIHN0cmFuZ2UgYW5kIGJpemFycmUgY2hlbWljYWxzIHRvIGl0LCB0aGUgd2hvbGUgbmluZSB5YXJkcy4gTm90aGluZy4gQWxyaWdodCwgdGhleSBnaXZlIHVwIGFuZCBsZWF2ZSBpdCBpbiBhIGZpc2ggdGFuay4gT25lIG9mIHRoZSBkb2N0b3JzIGxlYXZlcyBoaXMgY29mZmVlIG9uIHRoZSB0b3Agb2YgdGhlIHRhbmsuIFRoZSBqYW5pdG9yIHdhbGtzIGluLCBjbGVhbnMgc3R1ZmYsIGJ1bXBzIHRoZSBmaXNodGFuayBhbmQgdGhlIGNvZmZlZSBzcGlsbHMgdGhlIHRhbmsgd2hpY2ggbWFrZXMgSmFjayBhbGl2ZS48YnIgLz48YnIgLz5CZWhvbGQgdGhlIHBvd2VyIG9mIG1vY2hhISBOb3cgc29tZWhvdyBoZSBpcyBpbi4udWguLiBpIGJlbGlldmUgdGhlIEJhaGFtYXMuLi4gYnV0IGl0IGxvb2tlZCBtb3JlIGxpa2UgSGF3YWlpLi4gQnV0IGl0IGNvdWxkbid0IGJlIEhhd2FpaSEgVW5sZXNzIHRoZXkgc3BlbnQgYWxsIG9mIHRoZWlyIGJ1ZGdldCBvbiB0aGUgZGFuZyBhaXIgcGxhbmUgdGlja2V0cy4gQmFoLi4gSSB3b250IHNwb2lsIHRoZSByZXN0IG9mIHRoaXMgcm90dGVuIG1vdmllLCBzbyB5b3UnbGwgaGF2ZSB0byByZW50IGl0IGFuZCB3YXRjaCBpdCB5b3VyIHNlbGYuLi4gRXIuLi4gaSB3b3VsZG4ndCBzdWdnZXN0IGRvaW5nIHNvIHRob3VnaC4uLi4gU2hlZXNoLi4pAAAAAAAAAEAKzAkI1AIQ1AIiuglBbGV4YW5kcmEgUmlwbGV5IHdyb3RlIGEgaG9ycmlibGUgc2VxdWVsIHRvIE1hcmdhcmV0IE1pdGNoZWxsJ3MgbWFzdGVycGllY2UgYm9vayBwdWJsaXNoZWQgaW4gdGhlIDE5MzAncy4gTWFyZ2FyZXQgTWl0Y2hlbGwncyBoZWlycyBzb2xkIG91dCB0aGVpciByaWdodHMgYW5kIGZvciBiaWcgYnVja3MgYWxsb3dlZCBBbGV4YW5kcmEgUmlwbGV5IHRvIHdyaXRlIGEgcGllY2Ugb2YganVuayBib29rIGV2ZW4gd29yc2UgdGhhbiBCYXJiYXJhIENvcnRsYW5kIHJvbWFuY2Ugbm92ZWxzLiBJIHdhcyBhIGh1Z2UgZmFuIG9mIE1hcmdhcmV0IE1pdGNoZWxscyBib29rIGFuZCB0aGUgZmFrZSBzZXF1ZWwgYnkgQWxleGFuZHJhIFJpcGxleSB3YXMgd3JpdHRlbiBqdXN0IHRvIGNhc2ggaW4gZm9yIG1vbmV5LjxiciAvPjxiciAvPkFsdGhvdWdoIEkgYWx3YXlzIGFkbWlyZWQgdGhlIGFjdGluZyB0YWxlbnQgb2YgSm9hbm5lIEtpbG1lciBhbmQgVGltb3RoeSBEYWx0b24sIHRoaXMgaXMgYSByZWFsbHkgdGVycmlibGUgZmlsbS4gVGhlIHNjcmlwdCBpcyBob3JyaWJsZSBhbmQgZnVsbCBvZiBjbGljaMOpcy4gQW5uIE1hcmdhcmV0cyBjYW1lbyBhcyBCZWxsZSBXYXRsaW5nIGlzIHNvIGF3ZnVsIEkgd2FudGVkIHRvIHNsYXAgaGVyLjxiciAvPjxiciAvPlRoZSBvbmx5IHdvcnRod2hpbGUgdGhpbmcgaW4gdGhlIG1vdmllIGlzIFNlYW4gQmVhbiB3aG8gZ2l2ZXMgYSBtYXN0ZXJmdWwgYnJhdnVyYSBwZXJmb3JtYW5jZSBhcyB0aGUgc2V4eSwgZmVyYWwgdmlsbGFpbiAtIExvcmQgRmVudG9uLiBTZWFuIEJlYW4ncyBwZXJmb3JtYW5jZSBpcyBhbG9uZyB0aGUgbGluZXMgb2YgIlRoZSBNYW4gWW91IExvdmUgdG8gSGF0ZSIgYW5kIHBvcnRyYXlzIGFuIHVuc2FmZSBzZXggc3ltYm9sLjxiciAvPjxiciAvPkJ1dCBTZWFuIEJlYW4gaXMgb25seSBpbiB0aGUgZmlyc3QgaGFsZiBvZiB0aGUgbW92aWUgc28geW91IHRoZW4gaGF2ZSB0byBiZSB0b3JtZW50ZWQgd2l0aCB3YXRjaGluZyBhbiBpbmNyZWRpYmx5IGxvbmcgNiBob3VyIG1vdmllIHdpdGggYW4gaW5zdWZmZXJhYmx5IGJvcmluZyBzY3JpcHQuPGJyIC8+PGJyIC8+RG9uJ3Qgd2FzdGUgeW91ciBtb25leSBvbiB0aGlzIGZpbG0sIHVubGVzcyB5b3UgYXJlIGEgaGFyZCBjb3JlIFNlYW4gQmVhbiBmYW4gYW5kIGp1c3Qgd2F0Y2ggaXQgZm9yIGhpcyB3b25kZXJmdWwgcGVyZm9ybWFuY2UuKQAAAAAAAABACtUFCNUCENUCIsMFQWZ0ZXIgc2VlaW5nIE1lcmVkaXRoIGluICJCZXlvbmQgdGhlIFByYWlyaWUiIEkgaGFkIHRvIGJ1eSBhbm90aGVyIGZpbG0gd2l0aCBoZXIgc3RhcmluZy4gSSBjYW5ub3QgYmVsaWV2ZSBob3cgc2hlIGxldCBoZXJzZWxmIGludG8gdGhpcyB0ZWVuYWdlIGZsaWNrLiBJdCdzIGJlc3QgdG8gd2F0Y2ggdGhpcyBvbmUgd2l0aCB0aGUgc291bmQgb2ZmIGJ1dCBqdXN0IGNvbmNlbnRyYXRlIG9uIE1lcmVkaXRoIGFzIHNoZSBtb3ZlcyBhY3Jvc3MgdGhlIHNjcmVlbi4gU2F2ZSB5b3VyIG1vbmV5IHVudGlsIHRoZSBUViBuZXR3b3JrIGNvbWVzIG91dCB3aXRoIGEgRFZEIG9uICJCZXlvbmQgdGhlIFByYWlyaWUiLiBJdCdzIHdvcnRoIGl0IGF0IGFueSBwcmljZSwgdGhpcyBvbmUgbmVlZHMgdG8gcGF5IHlvdSB0byBzZWUuIDxiciAvPjxiciAvPlRoaXMgcHJldHR5IGxhZHkgbmVlZHMgc29tZW9uZSB0byBwdXQgaGVyIGludG8gYSBzY3JpcHQgdGhhdCBjYW4gdXNlIGJvdGggaGVyIHRhbGVudCBhcyBhbiBhY3RyZXNzIGFuZCBoZXIgYmVhdXR5IGFzIGEgd29tYW4uIFBlcmhhcHMgc29tZSBvZiBoZXIgbGF0ZXN0IG1pZ2h0IGZpdCBidXQgSSBoYXZlbid0IHNlZW4gdGhlbS4gU2hlIGhhcyB0aGUgc21pbGUgb2YgYSBDYXRocmluZSBCZWxsIGFuZCBleWVzIG9mIERhbmEgRGVsYW55IHdpdGggYSBtdWNoIHlvdW5nZXIgYm9keS48YnIgLz48YnIgLz4pAAAAAAAAAEAK2wMI1gIQ1gIiyQNBZnRlciByZWFkaW5nIHByZXZpZXdzIGZvciB0aGlzIG1vdmllIEkgdGhvdWdodCBpdCB3b3VsZCBiZSBhIGxldCBkb3duLCBob3dldmVyIGFmdGVyIEkgZ290IG15IHJlZ2lvbiAxIGR2ZCAoIHRoZSBkdmQgd2FzIGF2YWlsYWJsZSBiZWZvcmUgdGhlIGZpbG0gaGl0IHRoZSB1ayBjaW5lbWFzKSBJIHdhcyBwbGVhc2FudGx5IHN1cnByaXNlZCwgc3Ryb25nIHBlcmZvcm1hbmNlcyBmcm9tIGFsbCBjYXN0IG1lbWJlcnMgbWFrZSB0aGlzIGEgdmVyeSBlbmpveWFibGUgbW92aWUuIFRoZSBmYWN0IHRoYXQgdGhlIHNjcmlwdCBpcyBxdWl0ZSB3ZWFrIG1lYW5zIHRoYXQgeW91IGRvbnQgZ2V0IGJvZ2dlZCBkb3duIGluIHN0b3J5IGFuZCB0aGVyZWZvcmUgdGhlIHJlcGVhdCB2aWV3aW5nIGZhY3RvciBpcyBncmVhdGVyLiBJIHJlY29tbWVuZCB0aGlzIG1vdmllIHRvIG9uZSBhbmQgYWxsPGJyIC8+PGJyIC8+KQAAAAAAAABACp0LCNcCENcCIosLQWZ0ZXIgbG9zaW5nIHRoZSBFbW15IGZvciBoZXIgcGVyZm9ybWFuY2UgYXMgTWFtYSBSb3NlIGluIHRoZSB0ZWxldmlzaW9uIHZlcnNpb24gb2YgR1lQU1ksIEJldHRlIHdvbiBhbiBFbW15IHRoZSBmb2xsb3dpbmcgeWVhciBmb3IgQkVUVEUgTUlETEVSOiBESVZBIExBUyBWRUdBUywgYSBsaXZlIGNvbmNlcnQgc3BlY2lhbCBmaWxtZWQgZm9yIEhCTyBmcm9tIExhcyBWZWdhcy4gTWlkbGVyLCB3aG8gaGFzIGJlZW4gcGVyZm9ybWluZyBsaXZlIG9uIHN0YWdlIHNpbmNlIHRoZSAxOTcwJ3MsIHByb3ZlcyB0aGF0IHNoZSBpcyBzdGlsbCBvbmUgb2YgdGhlIG1vc3QgZWxlY3RyaWZ5aW5nIGxpdmUgcGVyZm9ybWVycyBpbiB0aGUgYnVzaW5lc3MuIEZyb20gaGVyIG9wZW5pbmcgbnVtYmVyLCBoZXIgY2xhc3NpYyAiRnJpZW5kcyIsIHdoZXJlIHNoZSBkZXNjZW5kcyBmcm9tIHRoZSB3aW5ncyBhdG9wIGEgYmVhdXRpZnVsIHByb3AgY2xvdWQsIEJldHRlIGNvbW1hbmRzIHRoZSBzdGFnZSB3aXRoIHN0eWxlIGFuZCBjaGFyaXNtYSBmcm9tIGEgcmFwLXN0eWxlZCBudW1iZXIgY2FsbGVkICJJIExvb2sgR29vZCIgc2hlIHRoZW4gcHJvdmVzIHRoYXQgc2hlIGhhcyBhIHdheSB3aXRoIGEgam9rZSBsaWtlIGZldyBvdGhlciBwZXJmb3JtZXJzIGluIHRoaXMgYnVzaW5lc3MgYXMgc2hlIHNlZ3VlcyBoZXIgd2F5IHRocm91Z2ggYSB2YXJpZXR5IG9mIG11c2ljYWwgc2VsZWN0aW9ucy4gVGhlIHNlY3Rpb24gb2YgdGhlIHNob3cgd2hlcmUgc2hlIHNhbHV0ZXMgYnVybGVzcXVlIGdvZXMgb24gYSBsaXR0bGUgdG9vIGxvbmcgYnV0IHNoZSBkb2VzIG1hbmFnZSB0byBpbmNvcnBvcmF0ZSBoZXIgb2xkIFNvcGhpZSBUdWNrZXIgam9rZXMgaGVyZSB0byBnb29kIGFkdmFudGFnZSAoZXZlbiB0aG91Z2ggc2hlIGFjdHVhbGx5IGZvcmdldHMgb25lIGpva2UgaW4gdGhlIG1pZGRsZSBvZiB0ZWxsaW5nIGl0LCBidXQgaGVyIGFkLWxpYmJpbmcgdW50aWwgc2hlIHJlbWVtYmVycyBpdCBpcyBoeXN0ZXJpY2FsKS4gQmV0dGUgYWxzbyB0cmVhdHMgdXMgdG8gIlJvc2UncyBUdXJuIiBmcm9tIEdZUFNZIGFuZCB0aGUgdGl0bGUgdHVuZSBmcm9tIGhlciBzbWFzaCBmaWxtIFRIRSBST1NFIGFzIHdlbGwgYXMgYSBzaGFtZWxlc3MgcGx1ZyBmb3IgaGVyIGhpdCBtb3ZpZSBUSEUgRklSU1QgV0lWRVMgQ0xVQi4gU2hlIGJyaW5ncyB0aGUgaG91c2UgZG93biBuZWFyIHRoZSBlbmQgd2l0aCAiU3RheSB3aXRoIE1lLCBCYWJ5IiBmcm9tIFRIRSBST1NFIGFuZCBoZXIgb25seSAjMSBoaXQgcmVjb3JkLCAiV2luZCBCZW5lYXRoIE15IFdpbmdzIiBmcm9tIEJFQUNIRVMuIEl0J3MgYSBkYXp6bGluZyBldmVuaW5nIG9mIG11c2ljYWwgY29tZWR5IGVudGVydGFpbm1lbnQgYW5kIGZvciBNaWRsZXIgZmFucywgaXQncyBhIG11c3QuKQAAAAAAAABACuAGCNgCENgCIs4GQWRtaXR0ZWRseSwgeW91IGNhbiBwdXQgYSBtb2RlbCBhaXJwbGFuZSBhZ2FpbnN0IGEgYmxhY2sgYmFja2dyb3VuZCBhbmQgY2FsbCBpdCBzY2ktZmksIGFuZCB0aGF0cyBlbm91Z2ggdG8gZ2V0IG1lIGludGVyZXN0ZWQsIHNvIGlmIHlvdSBhcmUgbGlrZSB0aGF0LCBCbGFjayBIb3Jpem9uIHdpbGwgYXQgbGVhc3QgZ2V0IHlvdSBpbnRlcmVzdGVkIGJlZm9yZSB5b3Ugd2F0Y2ggaXQuIFRoZSBiZXN0IHBhcnQgb2YgdGhlIG1vdmllIGlzIHdoZW4gdGhleSByZWhhc2ggc29tZSBhY3R1YWwgZm9vdGFnZSBvZiBhIHNodXR0bGUgbGF1bmNoLjxiciAvPjxiciAvPlRoZSBtb3ZpZSBwbGF5cyBsaWtlIHRoZSBOYWtlZCBHdW4gc2VyaWVzLCBzcG9vZmluZyBjb3AgZHJhbWFzIHdpdGggYmFkIGNsaWNow6lzIGFuZCBiYWQgYWN0aW5nLiBVbmZvcnR1bmF0ZWx5LCBpIGRvbid0IHRoaW5rIHRoZXkgbWVhbnQgdG8gYmUgZnVubnksIHRoZSBhY3RvcnMgcmVhbGx5IGFyZSBtYWRlIG9mIGNhcmRib2FyZCwgdGhlIGRpYWxvZyByZWFsbHkgZG9lcyBzdWNrLCBzbyB3ZWxsIGp1c3QgaGF2ZSB0byBsYXVnaCBhdCB0aGVtLCBhbmQgbm90IHdpdGggdGhlbS48YnIgLz48YnIgLz5PbiBhIHNpZGUgbm90ZSwgaXQgaXMgcmFyZSB0byBzZWUgYSBtb3ZpZSB0aGF0IHRha2VzIHBsYWNlIGhhbGYgaW4gb3V0ZXIgc3BhY2UsIGhhbGYgb24gZWFydGgsIGFuZCBkb2Vzbid0IG1peCBpbiB0aGUgZXhwZWN0ZWQgZXh0cmF0ZXJyZXN0cmlhbHMgYW5kIHN1cGVybmF0dXJhbCBldmVudHMuIEkgcmVhbGx5IGRvIGFjaGUgZm9yIG1vcmUgcmVhbGlzdGljIGRyYW1hIGJhc2VkIG9uIG91ciBzcGFjZSBlbmRlYXZvcnMuKQAAAAAAAABACswECNkCENkCIroEQSB0cnVseSBleGNlbGxlbnQgbG9vayBhdCB0aGUgd29ybGQgYW5kIHRoZSByZWFsaXRpZXMgb2YgYmVpbmcgYSBoZXJvaW4gYWRkaWN0LiBUaGUgbW92aWUgaXMgb25lIHRoYXQgd2lsbCBoaXQgbXVjaCB0b28gY2xvc2UgdG8gaG9tZSB0byB0aG9zZSB3aG8gd2VyZSBpbnZvbHZlZCBpbiB0aGUgZHJ1ZyBjdWx0dXJlIGFuZCBoYXZlIGtub3dsZWRnZSBvZiB3aGF0IGJlaW5nKG9yIGJlaW5nIGFyb3VuZCkgYSBoZXJvaW4gYWRkaWN0IHJlYWxseSBpcy4gR29vZCBtb3ZpZSwgd2hpY2ggd2lsbCBuZXZlciB0cnVseSBiZSBvdXRkYXRlZC4gRXhjZWxsZW50IHBlcmZvcm1hbmNlcyBieSBhbGwgaW52b2x2ZWQgYW5kIHRoZSBtaW5pbWFsaXN0IHNldCBpcyBQcmVtaW5nZXIncyB3YXkgb2Ygc2hvd2luZyBob3cgYmxlYWsgYSBKVU5LSUUnUyB3b3JsZCBjYW4gYmVjb21lLiBXb3J0aCBhIGxvb2stLWFuIGVkdWNhdGlvbiBvZiBzb3J0cy4gVGhlIGdvbGRlbiBhcm0gaXMgYSB3b3JyaWVkIGxvb2sgYXQgdGhlIHRydXRoIG9mIHRoZSB1bmRlcmdyb3VuZCBsaWZlIG9mIHBhaW4gYSBqdW5raWUgbGl2ZXMgaW4uKQAAAAAAAABACtQOCNoCENoCIsIOQSB0YWxlbnRlZCBoaWdoIHNjaG9vbCBncmFkdWF0aW5nIHNlbmlvciB3aXRoIGEgYmFkIGF0dGl0dWRlIGlzIGZvcmNlZCB0byBwbGF5IGluIHRoZSBzdGF0ZSBhbGwtc3RhciBoaWdoIHNjaG9vbCBmb290YmFsbCBnYW1lLiBXaGVuIGhlIG1lZXRzIGFuZCBmYWxscyBmb3IgYW4gYXR0cmFjdGl2ZSBsb2NhbCBnaXJsIHNoZSBoZWxwcyBoaW0gcmVhbGl6ZSBoZSBoYXMgYSBzaG90IGF0IGEgJ2Z1bGwgcmlkZScgc2Nob2xhcnNoaXAgaWYgaGUgcGxheXMgd2VsbC48YnIgLz48YnIgLz5BbGwgdG9vIG9mdGVuLCB0aGVzZSBkcmFtYXMgZmFsbCBpbnRvIGZvcm11bGFpYyB0cmFwcyBhbmQgdGVsbCB0aGUgc2FtZSBvbGQgc3Rvcnkgb2YgYSB0cm91YmxlZCBhbmQgY29uZnVzZWQgdGVlbi4gRlVMTCBSSURFJ3MgTWF0dCBTYWJvIGNlcnRhaW5seSBmaXRzIHRoaXMgcHJvZmlsZSwgYnV0IGJlbG93IHRoZSBzdXJmYWNlIGlzIGEgbXVjaCBtb3JlIHVuaXF1ZSBpbmRpdmlkdWFsIHRoYW4gd2UgdXN1YWxseSBzZWUgaW4gdGhpcyBnZW5yZS4gTWF0dCBpcyB0aGUgY2VudGVyIG9mIHRoZSBhY3Rpb24gYW5kIGhlIGlzIGEgcmVhbGlzdGljIHRlZW5hZ2VyLCBib3RoIG92ZXItY29uZmlkZW50IGFuZCB2dWxuZXJhYmxlLCBvcHRpbWlzdGljIGFuZCBjeW5pY2FsIGJ5IHR1cm5zLiBJbmZsdWVuY2VkIGJ5IEFteSwgTWF0dCBncm93cyBpbnRvIGEgbWFuIG9mIGNoYXJhY3RlciBhbmQgaGVhcnQuIEhlLCBpbiB0dXJuLCBmb3JtcyBmcmllbmRzaGlwcyB3aXRoIGhpcyB0ZWFtbWF0ZXMsIHdoaWNoIGluZmx1ZW5jZXMgaGlzIGdyb3d0aCBhcyBhbiBhdGhsZXRlIGFuZCBhcyBhIHRlYW0gcGxheWVyLjxiciAvPjxiciAvPkZVTEwgUklERSBoYXMgYWxsIHRoZSBlbGVtZW50cyB3ZSBsb3ZlIHRvIHNlZSBpbiBhIG1vdmllLS1ncmVhdCBhY3RpbmcsIGFkbWlyYWJsZSBjaGFyYWN0ZXJzLCBleGNpdGluZyBzcG9ydHMgc2NlbmVzLCBwb2lnbmFudCBkcmFtYSwgYW5kIGEgbG92ZSBzdG9yeS4gU3RpbGwsIHdoaWxlIG9uZSBtYXkgaGF2ZSBzZWVuIHRoZXNlIGVsZW1lbnRzIGluIG90aGVyIGZpbG1zLCBGVUxMIFJJREUgaXMgYXNzaXN0ZWQgYnkgcGVyZm9ybWFuY2VzIHRoYXQgYXJlIHNpbmNlcmUgYW5kIG9jY2FzaW9uYWxseSwgZXZlbiBtb3ZpbmcuIFBlcmhhcHMgd2hhdCdzIG1vc3QgaW1wcmVzc2l2ZSBhYm91dCBGVUxMIFJJREUgaXMgaXRzIHNlbnNlIG9mIHJlYWxpdHkuIEFsdGhvdWdoIHRoZSBhdXRob3Igb2YgdGhlIHByZXZpb3VzIGNvbW1lbnQgd291bGQgc2VlbSB0byBkaXNhZ3JlZSwgKGNsZWFybHkgYSBkaXNncnVudGxlZCBzdHVkZW50IHdobywgZm9yIHF1aXRlIG9idmlvdXMgcmVhc29ucywgcmVjZWl2ZWQgYSBwb29yIGdyYWRlIGluIGhpcyBmaWxtIGNsYXNzKSBkaXJlY3RvciBNYXJrIEhvZWdlciBncm91bmRzIHRoZSBmaWxtIGluIGEgYmVsaWV2YWJsZSBzaXR1YXRpb24gYW5kIGxvY2F0aW9uIGFuZCBkb2VzIGEgZ3JlYXQgam9iIG9mIGdldHRpbmcgZG93biB0byB0aGUgZ3JpdCBvZiB3aGF0IGxpZmUgaXMgbGlrZSBpbiBhIHNtYWxsIHRvd24uIFRoZXNlIGNoYXJhY3RlcnMgYXJlIHJlYWwgcGVvcGxlIHJvb3RlZCBpbiByZWFsaXN0aWMgc2l0dWF0aW9ucywgd2hpY2ggb2Z0ZW4gY3JlYXRlIHRoZSBtb3N0IGNvbXBlbGxpbmcgZW50ZXJ0YWlubWVudC4gT24gb25lIGxldmVsIGl0IGlzIGEgbG92ZSBzdG9yeSwgb24gYW5vdGhlciBpdCBpcyBhIGNoYXJhY3RlciBzdHVkeSwgYW5kIHlldCBhbm90aGVyIGl0IGlzIGEgc2ltcGxlIGZvb3RiYWxsIGZpbG0uIEFsbCBvZiB0aGVzZSBpZGVhcyBjb21lIHRvZ2V0aGVyIHRvIGZvcm0gYSBjb2hlc2l2ZSB2ZWhpY2xlLikAAAAAAAAAQAqaBAjbAhDbAiKIBEEgc29tZXdoYXQgdHlwaWNhbCBiaXQgb2YgZmlsbW1ha2luZyBmcm9tIHRoaXMgZXJhLiBPYnZpb3VzbHksIEl0IHdhcyBmaXJzdCBjb25jZWl2ZWQgaW50byB0aGlzIHdvcmxkIGZvciB0aGUgc3RhZ2UsIGJ1dCBub25ldGhlbGVzcyBhIHZlcnkgZ29vZCBmaWxtIGZyb20gYmVnaW5uaW5nIHRvIGVuZC4gUGV0ZXIgTydUb29sZSBhbmQgU3VzYW5uYWggWW9yayBnZXQgdG8gZG8gdGhlaXIgc3RhZ2UgcGVyZm9ybWFuY2UgYWN0IGZvciB0aGUgc2lsdmVyIHNjcmVlbiBhbmQgYm90aCBkbyBpdCBlZmZlY3RpdmVseS4gVGhlcmUgaXMgdmVyeSBsaXR0bGUgaW4gdGhlIHdheSBvZiBzdG9yeSBhbmQgYW55b25lIG5vdCBmYW1pbGlhciB3aXRoIHRoaXMgdHlwZSBvZiBvZmYgYmVhdCBjaGFyYWN0ZXIgc3R1ZHkgbWF5IGJlIGEgbGl0dGxlIHB1dCBvZmYgYnkgaXQuIEFsbCBpbiBhbGwsIHRob3VnaCwgQSBnb29kIGZpbG0gaW4gd2hpY2ggUGV0ZXIgTydUb29sZSBhbmQgU3VzYW5uYWggWW9yayBnZXQgdG8gb3ZlcmFjdC4pAAAAAAAAAEAKswQI3AIQ3AIioQRBIHJpZGljdWxvdXMgbW92aWUsIGEgdGVycmlibGUgZWRpdGluZyBqb2IsIHdvcnN0IHNjcmVlbnBsYXksIHJpZGljdWxvdXMgYWN0aW5nLCBhIHN0b3J5IHRoYXQgaXMgY29tcGxldGVseSB1bnVuZGVyc3RhbmRhYmxlLi4uPGJyIC8+PGJyIC8+SWYgR29kIHdhcyBnb2luZyB0byBkZWNpZGUgaWYgbW92aWVzIHNob3VsZCBjb250aW51ZSB0byBiZSBkb25lLCBqdWRnaW5nIGJ5IHRoaXMgb25lLCB0aGUgZW50aXJlIHdvcmxkIG1vdmllIGluZHVzdHJ5IHdvdWxkIG5vdyBiZSBkZWFkLi4uPGJyIC8+PGJyIC8+QSB3b25kZXJmdWwgbW92aWUgdG8gc2hvdyB0aGF0IGNpbmVtYSBzaG91bGQgbm90IGJlIGRvbmUgYnkgcGVvcGxlIHdobyAidGhpbmsiIHRoZXkgY2FuIG1ha2UgbW92aWVzLjxiciAvPjxiciAvPkkgYW0gc3RpbGwgd29uZGVyaW5nIHdobyBhcmUgdGhvc2UgdHdvIGdpcHN5IGdpcmxzIHdobyBzaG93IHVwIGluIHRoZSBtb3ZpZSBmb3Igb3ZlciBoYWxmIGFuIGhvdXIsIGFuZCBhcmUgbmV2ZXIgaW50cm9kdWNlZCB0byB1cy4uLjxiciAvPjxiciAvPikAAAAAAAAAQArYGQjdAhDdAiLGGUEgcmVhbGx5IHZlcnkgYmFkIG1vdmllLCB3aXRoIGEgdmVyeSBmZXcgZ29vZCBtb21lbnRzIG9yIHF1YWxpdGllcy48YnIgLz48YnIgLz5JdCBzdGFydHMgb2ZmIHdpdGggcHJlZ25hbnQgTGluZGEgQmxhaXIsIHdobyBydW5zIGRvd24gYSBoYWxsd2F5cyB0byBmbGVlIHdoYXQgbWlnaHQgYmUgbW9uc3RlcnMgb3IgcGVvcGxlIHdpdGggcGl0Y2hmb3JrcywgSSdtIG5vdCBzdXJlLiBTaGUganVtcHMgdGhyb3VnaCBhIHdpbmRvdyBhbmQgd2FrZXMgdXAsIGFuZCB3ZSBzZWUgc2hlIGlzIHZlcnkgcHJlZ25hbnQuIFRoZSBkZWdyZWUgdG8gd2hpY2ggc2hlIGlzIHByZWduYW50IHZhcmllcyB3aWRlbHkgdGhyb3VnaG91dCB0aGUgbW92aWUuPGJyIC8+PGJyIC8+U2hlIGFuZCBhbiBhbm5veWluZyBhbmQgcG9zc2libHkgcmV0YXJkZWQgbGl0dGxlIGJveSB3aG8gSSB0aG91Z2h0IHdhcyBoZXIgc29uIHRyYXZlbCB0byBhbiBhYmFuZG9uZWQgaG90ZWwgb24gYW4gaXNsYW5kLiBJdGFsaWFuIGhvcnJvciBkaXJlY3RvcnMgZmluZCB0aGUgbW9zdCBpcnJpdGF0aW5nIGxpdHRsZSBib3lzIHRvIHB1dCBpbiB0aGVpciBtb3ZpZXMhIE9uIHRoZSBpc2xhbmQgYWxyZWFkeSBhcmUgRGF2aWQgSGFzc2VsaG9mZiBhbmQgaGlzIEdlcm1hbi1zcGVha2luZyB2aXJnaW4gZ2lybGZyaWVuZCAoeW91IGtub3cgaG93IEdlcm1hbnMgYXJlIHNhaWQgdG8gbG92ZSBIYXNzZWxob2ZmLi4uKS4gSGUncyB0YWtpbmcgcGhvdG9ncmFwaHMsIGFuZCBzaGUncyB0cmFuc2xhdGluZyBhbiBlc290ZXJpYyBHZXJtYW4gYm9vayBhYm91dCB3aXRjaGVzLCBJIHRoaW5rLjxiciAvPjxiciAvPkFsc28gdHJhdmVsaW5nIHRvIHRoZSBpc2xhbmQgYXJlIGFuIG9sZGVyIGNvdXBsZSB3aG8gaGF2ZSBwdXJjaGFzZWQgaXQsIGFuZCBhIHJlYWwgZXN0YXRlIGFnZW50LCBhbmQgYSB3b21hbiBJIHRob3VnaHQgd2FzIHRoZWlyIGRhdWdodGVyLiBFdmlkZW50bHkgc2hlIHdhcyBhbiBhcmNoaXRlY3QsIGFuZCBMaW5kYSBCbGFpciBhbmQgdGhlIGJveSBhcmUgdGhlIG9sZGVyIGNvdXBsZSdzIGNoaWxkcmVuLiBJIGd1ZXNzIHRoZXkgYWxsIHRyYXZlbGVkIHRvIHRoZSBpc2xhbmQgdG9nZXRoZXIsIGJ1dCBpdCByZWFsbHkgc2VlbWVkIGxpa2UgTGluZGEgYW5kIHRoZSBib3kgd2VyZSBhcGFydCBmcm9tIHRoZSByZXN0IG9mIHRoZW0gKG1heWJlIHRoZXkgd2VyZSBmaWxtZWQgc2VwYXJhdGVseSkuPGJyIC8+PGJyIC8+VGhlIGhvdGVsIHNlZW1zIG5lYXQsIGNlcnRhaW5seSBmcm9tIHRoZSBleHRlcmlvcnMsIGJ1dCBpdCBpc24ndCB1c2VkIHRvIGFueSBncmVhdCBlZmZlY3QuIEFuIG9sZCB3b21hbiBpbiBiYWQgbWFrZXVwIGFuZCBhIGJsYWNrIGNsb2FrIGtlZXBzIGFwcGVhcmluZyB0byB0aGUgYm95IGFuZCBjaGFudHMgc29tZXRoaW5nIGluIEdlcm1hbiBzb21ldGltZXMsIHdoaWNoIGhlIGV2ZW50dWFsbHkgcmVjb3JkcyBvbiBoaXMgU2VzYW1lIFN0cmVldCB0YXBlIHJlY29yZGVyLjxiciAvPjxiciAvPlBlb3BsZSBzdGFydCBnZXR0aW5nIGtpbGxlZCwgZWl0aGVyIGluIHRoZWlyIGRyZWFtcywgb3Igc3Vja2VkIGludG8gaGVsbCBvciBzb21ldGhpbmcuIFNvbWUgb2YgdGhlc2UgZ29yZSBzY2VuZXMgYXJlIE9LLCBidXQgbm90IGVub3VnaCB0byByZWNvbW1lbmQgdGhlIG1vdmllLiBUaG91Z2ggdGhlIGNvcHkgSSB3YXRjaGVkIHN0YXRlZCBpdCBpcyB1bmN1dCBvbiB0aGUgYm94IGNvdmVyLCB0aGUgZGVhdGggb2Ygb25lIGNoYXJhY3RlciB3aG9zZSB2ZWlucyBleHBsb2RlIHJlYWxseSBzZWVtcyB0byBoYXZlIGJlZW4gY3V0LiBNdWNoIG9mIHRoZSBzY2VuZSBpcyBzaG93aW5nIGFub3RoZXIgY2hhcmFjdGVyJ3MgcmVhY3Rpb24gc2hvdHMsIHNpbmNlIHdlJ3JlIG5vdCBzZWVpbmcgYW55dGhpbmcgb3Vyc2VsdmVzLiBUaGUgY3JlZXBpZXN0IHNjZW5lIGlzIG9uZSBpbiB3aGljaCBhIG1hbiBvciBkZW1vbiB3aXRoIGEgcmVhbGx5IG1lc3N5LWxvb2tpbmcgd291bmQgb2YgYSBtb3V0aCByYXBlcyBzb21lb25lLiBIZSBsb29rZWQgcGFydGljdWxhcmx5IG5hc3R5LiBUaGVyZSdzIGEgbGF1Z2hhYmx5IGFuZCBwYWluZnVsbHkgYmFkIHNjZW5lIGluIHdoaWNoIExpbmRhIEJsYWlyIGlzIHBvc3Nlc3NlZC4gSSB3aXNoIGlmIGEgaG9ycm9yIG1vdmllIGlzIGdvaW5nIHRvIGNhc3QgaGVyLCB0aGV5IHdvdWxkIGRvIHNvbWV0aGluZyBvcmlnaW5hbCB3aXRoIGhlciByb2xlLCBhbmQgbGV0IGhlciBsZWF2ZSBFeG9yY2lzdCBiZWhpbmQgaGVyIChleGNlcHQgZm9yIHRoZSB5ZWFybHkgaG9ycm9yIGNvbnZlbnRpb25zKS48YnIgLz48YnIgLz5JbiB0aGUgd2VpcmQsIGxhcmdlbHkgSXRhbGlhbiwgdHJhZGl0aW9uIG9mIGNsYWltaW5nIHRvIGJlIGEgc2VxdWVsIHRvIHNvbWV0aGluZyBpdCBpcyB1bnJlbGF0ZWQgdG8sIHRoaXMgaXMgYWxzbyBBS0EgTGEgQ2FzYSA0IGFuZCBHaG9zdGhvdXNlIDIuIFRoYXQgaXMsIGl0IGlzIHN1cHBvc2VkbHkgYSBzZXF1ZWwgdG8gQ2FzYSAzIC0gR2hvc3Rob3VzZSwgTGEgKDE5ODgpIC0gaXQncyBub3QgKHRoYXQncyBhbHNvIGEgYmV0dGVyIG1vdmllIHRoYW4gdGhpcyBvbmUpLiBMYSBDYXNhIDEgYW5kIHR3byB3ZXJlIFRoZSBFdmlsIERlYWQgKDE5ODEpIGFuZCBFdmlsIERlYWQgSUkgKDE5ODcpIC0gYWdhaW4gdW5yZWxhdGVkIHRvIFdpdGNoZXJ5IGFuZCBMYSBDYXNhIDMgKGFuZCBtdWNoIGJldHRlciB0aGFuIHRob3NlKS4gVGhlcmUncyBhbHNvIGEgQ2FzYSA1LCBMYSAoMTk5MCkgQUtBIEhvdXNlIDUsIHdoaWNoIHNlZW1zIHRvIHdhbnQgdG8gYmUgYSBzZXF1ZWwgdG8gdGhlIGZha2UgTGEgQ2FzYSBzZXJpZXMgYW5kIHRoZSBzZXJpZXMgSG91c2U6IEhvdXNlICgxOTg2KSBIb3VzZSBJSTogVGhlIFNlY29uZCBTdG9yeSAoMTk4NyksIFRoZSBIb3Jyb3IgU2hvdyAoMTk4OSkgQUtBIEhvdXNlIElJSSwgYW5kIEhvdXNlIElWICgxOTkyKS4gSG93J3MgVGhlIEhvcnJvciBTaG93IGZpdCBpbiB0aGVyZT8gSXQgZG9lc24ndCByZWFsbHksIGl0IGNsYWltZWQgdG8gYmUgYSBzZXF1ZWwsIHRodXMgcmVxdWlyaW5nIHRoZSByZWFsIHNlcmllcyBlbnRyeSB0byByZW51bWJlciBpdHNlbGYgdG8gY2F1c2UgbGVzcyAob3IgbW9yZT8pIGNvbmZ1c2lvbi4gT2RkbHksIFRoZSBIb3Jyb3IgU2hvdyBpcyBhbHNvIEFLQSBIb3Jyb3IgSG91c2UsIGFuZCBMYSBDYXNhIDUgaXMgYWxzbyBBS0EgSG9ycm9yIEhvdXNlIDIuIERvZXMgeW91ciBoZWFkIGh1cnQgeWV0PykAAAAAAAAAQArpAwjeAhDeAiLXA0EgbG9uZ3RpbWUgZmFuIG9mIEJldHRlIE1pZGxlciwgSSBtdXN0IHNheSBoZXIgcmVjb3JkZWQgbGl2ZSBjb25jZXJ0cyBhcmUgbXkgZmF2b3JpdGVzLiBCZXR0ZSB0aHJpbGxzIHVzIHdpdGggaGVyIGpva2VzIGFuZCBicmluZ3MgdXMgdG8gdGVhcnMgd2l0aCBoZXIgYmFsbGFkcy4gQSBsaXRlcmFsIHJhaW5ib3cgb2YgZW1vdGlvbiBhbmQgdGFsZW50LCBCZXR0ZSBzaG93cyB1cyBoZXIgYmVzdCBmcm9tIGhlciBzb2xpZCByZXBlcnRvaXJlLCBhcyB3ZWxsIGFzIG5ldyBzb25ncyBmcm9tIHRoZSAiQmV0dGUgb2YgUm9zZXMiIGFsYnVtLiBTcGFubmluZyBnZW5lcmF0aW9ucyBvZiBwZW9wbGUgc2hlIG9mZmVycyBzb21ldGhpbmcgZm9yIGV2ZXJ5b25lLiBUaGUgb25lIGFuZCBvbmx5IERpdmluZSBEaXZhIHByb3ZlcyBoZXJlIHRoYXQgc2hlIGlzIHRoZSBtb3N0IGludGVuc2VseSB0YWxlbnRlZCBwZXJmb3JtZXIgYXJvdW5kLikAAAAAAAAAQAruCwjfAhDfAiLcC0EgaG9saWRheSBvbiBhIGJvYXQsIGEgbWFycmllZCBjb3VwbGUsIGFuIGFuZ3J5IHdhaXRlciBhbmQgYSBzaGlwd3JlY2sgaXMgdGhlIHJlYXNvbiB0byB0aGlzIGZpbG1zIGJlZ2lubmluZy48YnIgLz48YnIgLz5JIGxpa2UgYm9vYnMuIE5vIHF1ZXN0aW9uIGFib3V0IHRoYXQuIEJ1dCB3aGVuIHRoZSBtYWluIGNoYXJhY3RlciBhbGxpZXMgd2l0aCB3aG9ldmVyIGhhcHBlbnMgdG8gaGF2ZSB0aGUgbW9zdCBmaXNoIGF0IHRoZSBtb21lbnQsIG1vc3RseSBieSBoYXZpbmcgc2V4IHdpdGggdGhlbSBhbmQgcGxheWluZyB0aGUgcm9sZSBvZiB0aGUgY29uc3RhbnQgdmljdGltLCBteSBhbmdlciBqdXN0IHJpc2VzIHRvIGEgd2hvbGUgbmV3IGxldmVsLiBUYWtlIHR3byBndXlzIChhIGh1c2JhbmQgYW5kIGFub3RoZXIgbWFuKSwgcHV0IGEgcHVyZSBib21ic2hlbGwgd29tYW4gaW4gdGhlIG1pZGRsZSBvZiB0aGVtLCBhZCBhIGRlc2VydGVkIGlzbGFuZCwgc3VidHJhY3QgYWxsIGhlciBtb3JhbCBpc3N1ZXMsIGFkIGEgd2hvbGUgYnVuY2ggb2YgbW9yYWwgaXNzdWVzIHRvIHRoZSBtZW4gYW5kIG1peCBpdCBpbiBhIGJpZyBib3dsIG9mIGFyZ3VtZW50cywgZmlzaCBhbmQgYSB6aXBwbyBsaWdodGVyIGFuZCB5b3Ugd2lsbCBjb21lIHVwIHdpdGggYSBwaWVjZSBvZiBqdW5rIG1vdmllIGxpa2UgdGhpcy4gPGJyIC8+PGJyIC8+VGhlIGFjdGluZyBpcywgSSB3b3VsZCBzYXksIGdvb2QuIFRoZXJlIGFyZSBzb21lIGJsb29wZXJzIGJ1dCBub3QgbWFueSBhcyBmYXIgYXMgaSBjb3VsZCBzZWUuIFRoZSBtYWluIGZlbWFsZSBjaGFyYWN0ZXIgbWFrZXMgbWUgc2ljay4gVGhpcyBpcyBkdWUgdG8gaGVyIGxhY2sgb2YgbW9yYWwgdmFsdWVzLiBUaGUgbWFuIHdpdGggdGhlIG1vc3QgZmlzaCBnZXQncyBoZXIgYXR0ZW50aW9uLiBFdmVuIHRob3VnaCBvbmUgb2YgdGhlbSBpcyBoZXIgaHVzYmFuZCwgc2hlIHNlZXMgbm8gcHJvYmxlbSB3aXRoIGJlaW5nIHVuZmFpdGhmdWwgd2l0aCAoTWFudWVsKSB0aGUgb3RoZXIgbWFuIGJlY2F1c2UgIkkgbXVzdCBkbyBpdCB0byBzdXJ2aXZlIi4gSG93IGNhbiB5b3UganVzdGlmeSBoYXZpbmcgc2V4IHdpdGggYW5vdGhlciBtYW4gZm9yIGZpc2ggd2hlbiB5b3VyIGh1c2JhbmQgaXMgMzBmZWV0IGF3YXk/IEFuZCBoZSB3b24ndCBldmVuIGJlbmVmaXQgZnJvbSBpdD8gVGhlIGZlbWFsZSBjaGFyYWN0ZXIgaGFzIGFic29sdXRlbHkgbm8gcHJvYmxlbXMgdG8ganVzdGlmeSBhbnl0aGluZyB0aGF0IHNoZSBkb2VzLiBJZiBzaGUgZG9lc2VuJ3QgZ2V0IGFwcHJvdmFsIGZvciBoZXIgYWN0aW9ucywgc2hlJ3MgYSB2aWN0aW0uPGJyIC8+PGJyIC8+SSByZWNvbW1lbmQgZXZlcnlvbmUgdG8gc2VlIHRoaXMgbW92aWUuIFRoaXMgaXMgdGhlIGtpbmQgb2YgbW92aWUgdGhhdCB3aWxsIG1ha2UganVzdCBhYm91dCBldmVyeXRoaW5nIGVsc2UgeW91IHNlZSB0aGlzIHllYXIgYSBwbGVhc2FudCBtb3ZpZSBleHBlcmllbmNlLikAAAAAAAAAQArHCAjgAhDgAiK1CEEgaGF2ZSBhIGZlbWFsZSBmcmllbmQgd2hvIGlzIGN1cnJlbnRseSBiZWluZyBkcmF3biBpbnRvIGEgcmVsYXRpb25zaGlwIHdpdGggYW4gU09CIHdobyBoYXMgYSBsb25nIHRlcm0gZ2lybGZyaWVuZC4gT2YgY291cnNlIHRoZSBTT0IgaXMgdmVyeSBnb29kLWxvb2tpbmcsIGNoYXJtaW5nLCBldGMgYW5kIG15IGZyaWVuZCBpcyBhIHZlcnkgaW50ZWxsaWdlbnQgd29tYW4uIFdhdGNoaW5nIEplYW4gUGllcnJlIExlYXVkJ3MgY2hhcmFjdGVyIGF0IHdvcmsgaXMgZXhhY3RseSBsaWtlIHdhdGNoaW5nIHdoYXQgZ29lcyBvbiBpbiByZWFsIGxpZmUgd2hlbiBndXlzIGxpa2UgdGhhdCBkZXN0cm95IHRoZSBsaXZlcyBvZiBvdXIgZmVtYWxlIGZyaWVuZHMuIEl0J3MgdHJhZ2ljLCBhbmQgeW91IGtub3cgc2hlJ3MgZ29pbmcgdG8gZW5kIHVwIHZlcnkgaHVydCwgYnV0IHRoZXJlJ3Mgbm90aGluZyB5b3UgY2FuIGRvLiBMZWF1ZCBpcyBicmlsbGlhbnQuIFRvdGFsbHkgZW1wdHkuIEEgYmxhbmsgdGhyb3VnaG91dCwgaGUgcHVsbHMgdGhlIGZhY2VzIGFuZCB0ZWxscyB0aGUgc3RvcmllcyBoZSB0aGlua3Mgd2lsbCBnZXQgdGhlIHJlYWN0aW9uIGhlIHdhbnRzLjxiciAvPjxiciAvPlRoZSBzY2VuZSB0d28gaG91cnMgaW4gd2hlbiBMZWF1ZCBhbmQgTGVicnVuIGhhdmUgbWFkZSBsb3ZlLCBhbmQgdGhlIG5leHQgbW9ybmluZyBoZSBwdXRzIG9uIGEgcmVjb3JkIGFuZCwgdmVyeSBzd2VldGx5IGFuZCBjaGFybWluZ2x5LCBzaW5ncyBhbG9uZyB0byBhbXVzZSBoZXIgaXMgYnJpbGxpYW50LiBUaGUgIldoYXQgdGhlIGhlbGwgYW0gSSBkb2luZyBoZXJlIHdpdGggdGhpcyBpZGlvdCIgZXhwcmVzc2lvbiB0aGF0IGZsaWNrZXJzIGJhY2sgYW5kIGZvcnRoIGFjcm9zcyBoZXIgZmFjZSB3aWxsIGJlIGluIG15IG1lbW9yeSBmb3IgYSBsb25nIHRpbWUgdG8gY29tZS48YnIgLz48YnIgLz5JdCdzIGEgbG9uZyBmaWxtLCBidXQgc2VlIGl0IGluIG9uZSBnbywgcHJlZmVyYWJseSBpbiBhIGNpbmVtYS4gVGFrZXMgYSB3aGlsZSB0byBnZXQgaW50bywgYnV0IHRoZW4gdGhlIHRpbWUganVzdCBkaXNhcHBlYXJzLikAAAAAAAAAQAraDAjhAhDhAiLIDEEgZnJpZW5kIGFuZCBJIHdlbnQgdG8gc2VlIHRoaXMgbW92aWUuIFdlIGhhdmUgb3Bwb3NpdGUgb3BpbmlvbnMgYWJvdXQgRnVqaW1vcmkgYnV0IGFmdGVyIHdhdGNoaW5nIHRoaXMgbW92aWUgd2UgYWdyZWUgb24gdGhlIGZvbGxvd2luZzogdGhlIGVhc2llc3Qgd2F5IHRvIGhhdmUgYW4gaW5hY2N1cmF0ZSBkb2N1bWVudGFyeSBpcyB0byBtYWtlIGl0IGFib3V0IGEgZm9yZWlnbiBjb3VudHJ5IGluIHdoaWNoIHlvdSB3ZXJlIG5vdCBwcmVzZW50IHdoZW4gdGhlIGV2ZW50cyBoYXBwZW5lZCwgbm8gbWF0dGVyIGhvdyB0YWxlbnRlZCBvciBob3cgbXVjaCB5b3UgaW52ZXN0IGluIHRoZSBmaWxtLiBJZiB5b3UgYXJlIHRydWx5IGxvb2tpbmcgdG8gbGVhcm4gYWJvdXQgYW5vdGhlciBjb3VudHJpZXMgaGlzdG9yeSwgd2F0Y2ggc29tZXRoaW5nIG1hZGUgYnkgbmF0aXZlcyBvZiB0aGF0IGNvdW50cnkgb3RoZXJ3aXNlIHlvdSB3b24ndCBiZSBhYmxlIHN0ZXAgYXdheSBmcm9tIHlvdXIgYnViYmxlLiBBbmQgdGhvc2Ugd2hvIHRyeSB0byBmb3JjZSB0aGVpciB2aWV3cyBhbmQgb3BpbmlvbnMgYWJvdXQgc29tZXRoaW5nIHRvIHdoaWNoIHRoZXkgZG9uJ3QgYmVsb25nIGFyZSByZWFsbHkgYWJ1c2luZyB0aGVpciBwb3dlci4gVG8gbWFrZSBpdCBldmVuIHdvcnNlLCB0aGUgZGlyZWN0b3IgY2hvc2UgdG8gbm90IHRhbGsgYWJvdXQgdGhlIGVtYmFycmFzc2luZyBpbnZvbHZlbWVudCBvZiB0aGUgQ0lBIHdpdGggRnVqaW1vcmkncyByZWdpbWUuIFNoZSBkZWNpZGVzIHRvIGV2YWRlIGRlYWxpbmcgd2l0aCB0aGUgb25seSBzdWJqZWN0IGZvciB3aXRjaCBoZXIgY291bnRyeSBoYXMgbXVjaCB0byBleHBsYWluIHRvIFBlcnV2aWFucy4gQnV0IHRoaXMgaXMgbm90IHN1cnByaXNpbmcgYmVjYXVzZSwgYm90aCwgdGhlIGRpcmVjdG9yIGFuZCB0aGUgQ0lBIGFyZSB2aW9sYXRpbmcgdGhlIHNvdmVyZWlnbnR5IG9mIFBlcnUgYnkgdHJ5aW5nIHRvIGFmZmVjdCB0aGUgZGVtb2NyYXRpYyBwcm9jZXNzZXMgYXQgdmVyeSBkaWZmZXJlbnQgbGV2ZWxzIG9mIGNvdXJzZS48YnIgLz48YnIgLz5JZiB0aGUgZGlyZWN0b3Igd2FzIHJlYWxseSBpbnRlcmVzdGVkIGluIGhlbHBpbmcgUGVydSBzaGUgd291bGQgaGF2ZSBmaW5hbmNlZCBhIG5hdGl2ZSB0byBtYWtlIHRoZSBkb2N1bWVudGFyeS4gSW4gYW55IGNhc2UgdGhlcmUgYXJlIG51bWVyb3VzIFBlcnV2aWFuIG1hZGUgZG9jdW1lbnRhcmllcywgZmlsbXMgYW5kIGJvb2tzIGFib3V0IHRoZSBzdWJqZWN0LiBTdWNoIGluY2x1ZGUgIk9qb3MgUXVlIE5vIFZlbiIsICJEaWFzIGRlIFNhbnRpYWdvIiwgIk1vbnRlc2lub3MtRnVqaW1vcmk6IExhcyBEb3MgQ2FyYXMgZGUgbGEgTWlzbWEgTW9uZWRhIiwgIk1vbnRlc2lub3M6IFBvZGVyb3NvIENhYmFsbGVybyIsIGV0Yy4gVGhlIGRpcmVjdG9yIG9mIHRoZSAiRmFsbCBvZiBGdWppbW9yaSIgc2hvdWxkIHNwZW5kIGhlciB0aW1lIGFuYWx5emluZyB0aGUgbnVtZXJvdXMgcHJvYmxlbXMgaW4gaGVyIG93biBjb3VudHJ5IG9yIGF0IGxlYXN0IHRoZSBpbnZvbHZlbWVudCBvZiBoZXIgY291bnRyeSBpbiB0aGUgbWF0dGVycyBvZiBvdGhlciBuYXRpb25zLikAAAAAAAAAQArjBwjiAhDiAiLRB0EgY291cGxlIG1vdmUgaW50byB0aGVpciBkcmVhbSBob21lLCB1bmF3YXJlIHRoYXQgaXQgYW5kIGl0cyBuZWlnaGJvdXJzIGhhdmUgYmVlbiBidWlsdCBvdmVyIGxhbmQgZm9ybWVybHkgdXNlZCBhcyBhIGNlbWV0ZXJ5LiBUaGUgZmlsbSBpcyBzYWlkIHRvIGhhdmUgYmVlbiBiYXNlZCBvbiBhIHRydWUgc3RvcnksIGFsdGhvdWdoIGhvdyBtdWNoIG9mIGl0IGlzIHN1cHBvc2VkIHRvIGJlIHRydWUgaXMgbm90IGRpc2Nsb3NlZC4gVGhlIHBsb3QgaXMgaGFyZGx5IHVuaXF1ZSAtIHNlZSBTcGllbGJlcmcncyAnUG9sdGVyZ2Vpc3QnICgxOTgyKS4gV2l0aGluIGEgc2hvcnQgdGltZSwgdGhleSBleHBlcmllbmNlIHZhcmlvdXMgc3VwZXJuYXR1cmFsIHBoZW5vbWVuYTogdGhlc2UgcmFuZ2UgZnJvbSB0aGUgZGlzdHVyYmluZyAtIG15c3RlcmlvdXMgc2hhZG93cywgdGhlIHNlcmlvdXMgaWxsbmVzcyBvZiB0aGUgZGF1Z2h0ZXIgLSB0byB0aGUgZnJhbmtseSByaWRpY3Vsb3VzIC0gdG9pbGV0cyBjb250aW51YWxseSBmbHVzaGluZyBhbmQgZ2FyYWdlIGRvb3JzIGdvaW5nIG91dCBvZiBjb250cm9sLiBUaGVyZSBpcyBsaXR0bGUgZGVwdGggdG8gdGhlIHN0b3J5OiBvbmNlIGl0IGhhcyBiZWNvbWUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgbGFuZCBoYWQgYmVlbiB1c2VkIGFzIGEgY2VtZXRlcnksIHdlIGRvIG5vdCBsZWFybiBhbnl0aGluZyBtb3JlLiBUaGUgcGxvdCBkb2VzIG5vdCBzZWVtIHRvIGRldmVsb3AuIFRoZSBjaGFyYWN0ZXJzIGFyZSBub3QgcGFydGljdWxhcmx5IHdlbGwgZHJhd24gb3IgaW4gYW55IHdheSBtZW1vcmFibGUsIG5vciBpcyB0aGUgYXRtb3NwaGVyZSBwYXJ0aWN1bGFybHkgc3BlY2lhbC4gVGhlIGZpbG0gY291bGQgYmUgZGlzdHVyYmluZyB0byBzb21lIHZpZXdlcnMuIFRoZXJlIGlzIG5vIHNlbnNlIG9mIGNhdGhhcnNpcyBvciBhbnkga2luZCBvZiBwb3NpdGl2ZSBtZXNzYWdlIGZyb20gaXQuKQAAAAAAAABACswSCOMCEOMCIroSPGJyIC8+PGJyIC8+U3VtbWFyeTogTm90IHdvcnRoIHRoZSBmaWxtPGJyIC8+PGJyIC8+QXMgYW4gYXZpZCBHb25lIFdpdGggdGhlIFdpbmQgZmFuLCBJIHdhcyBkaXNhcHBvaW50ZWQgdG8gd2F0Y2ggdGhlIG9yaWdpbmFsIG1vdmllIGFuZCBzZWUgdGhhdCB0aGV5IGhhZCBsZWZ0IG91dCBtYW55IGltcG9ydGFudCBjaGFyYWN0ZXJzLiBMdWNraWx5LCB0aGUgZmlsbSBvbiBpdHMgb3duIHdhcyBhIHdvbmRlcmZ1bCBwaWVjZS4gV2hlbiB0aGUgYm9vayBTY2FybGV0dCBjYW1lIG91dCwgSSByZWFkIGl0IGluIGhvcGVzIG9mIGZvbGxvd2luZyB0d28gb2YgbXkgZmF2b3JpdGUgbGl0ZXJhcnkgY2hhcmFjdGVycyBmYXJ0aGVyIG9uIHRoZWlyIGpvdXJuZXkgdG9nZXRoZXIuIFdoaWxlIHRoZSBib29rIGxhY2tzIGFueSB0cnVlIHF1YWxpdHksIGl0IHJlbWFpbnMgYSBnb29kIHN0b3J5LCBhbmQsIGFzIGxvbmcgYXMgSSB3YXMgYWJsZSB0byBzZXBhcmF0ZSBpdCBmcm9tIHRoZSBvcmlnaW5hbCwgd2FzIGFuZCBzdGlsbCBpcyBlbmpveWFibGUuIEhvd2V2ZXIsIEkgY29uc2lkZXIgdGhlIHNpeCBob3VycyBJIHNwZW50IHdhdGNoaW5nIHRoZSAiU2NhcmxldHQiIG1pbmlzZXJpZXMgdG8gYmUgc29tZSBvZiB0aGUgd29yc3Qtc3BlbnQgaG91cnMgb2YgbXkgbGlmZS4gRGlzY3JlZGl0aW5nIGFueSBvZiB0aGUgb3JpZ2luYWwgY2hhcmFjdGVyIHRyYWl0cyBzbyB3ZWxsLWZvcm1lZCBpbiBNYXJnYXJldCBNaXRjaGVsbCdzIGJvb2ssIHRoaXMgc2VyaWVzIGFsc28gdHVybmVkIHRoZSBzdG9yeSBvZiB0aGUgc2VxdWVsIGludG8gb25lIG9mIHJhcGUsIG1pc3RydXN0LCBtdXJkZXIsIGFuZCBtaXNmb3JtZWQgcmVsYXRpb25zaGlwcyB0aGF0IGV2ZW4gdGhlIGJvb2sgU2NhcmxldHQgc3RheWVkIGF3YXkgZnJvbS4gVGhlIGNhc3RpbmcgZm9yIG1hbnkgb2YgdGhlIGNoYXJhY3RlcnMgcmVmdXNlZCB0byBleGFtaW5lIHRoZSB0cmFpdHMgdGhhdCBoYWQgYmVlbiBzbyB3ZWxsLWZvcm1lZCBpbiBib3RoIHRoZSBvcmlnaW5hbCBub3ZlbCBhbmQgZmlsbSwgYW5kIGV2ZW4gY2FycmllZCB0aHJvdWdoIGluIHRoZSBzZWNvbmQgYm9vaywgYW5kIGFnYWluIGxlYXZlcyBvdXQgYXQgbGVhc3Qgb25lIGluY3JlZGlibHkgY3J1Y2lhbCBjaGFyYWN0ZXIuIEluIHRoZSBub3ZlbCwgU2NhcmxldHQgTydIYXJhIEJ1dGxlciBmb2xsb3dzIGhlciBlc3RyYW5nZWQgaHVzYmFuZCBSaGV0dCBCdXRsZXIgdG8gQ2hhcmxlc3RvbiB1bmRlciB0aGUgZ3Vpc2Ugb2YgdmlzaXRpbmcgZXh0ZW5kZWQgZmFtaWx5LiBBZnRlciBjb21pbmcgdG8gYW4gImFycmFuZ2VtZW50IiB3aXRoIFJoZXR0LCBzaGUgYWdyZWVzIHRvIGxlYXZlLCBhbmQgcHJvY2VlZHMgdG8gcmVjb25uZWN0IHdpdGggaGVyIE8nSGFyYSByZWxhdGl2ZXMgaW4gU2F2YW5uYWguIEV2ZW50dWFsbHksIHNoZSBhY2NvbXBhbmllcyBoZXIgY291c2luIENvbHVtLCBhIHBhc3Npb25hdGUgbGVhZGVyIG9mIHRoZSBGZW5pYW4gQnJvdGhlcmhvb2QsIHRvIElyZWxhbmQsIHRvIGZ1cnRoZXIgZXhwbG9yZSBoZXIgZmFtaWx5J3MgInJvb3RzIHRoYXQgZ28gZGVlcCwiIGFuZCBpcyBldmVudHVhbGx5IG5hbWVkICJUaGUgTydIYXJhLCIgdGhlIGhlYWQgb2YgdGhlIGZhbWlseS4gV2hpbGUgaGVyIGR1dGllcyBhcyBUaGUgTydIYXJhIGtlZXAgaGVyIGVuZ2FnZWQgaW4gaGVyIHRvd24gb2YgQmFsbHloYXJhLCBTY2FybGV0dCB2ZW50dXJlcyBvdXQgaW50byB0aGUgd29ybGQgb2YgdGhlIEVuZ2xpc2ggbGFuZG93bmVycywgYW5kIGluc3RhbnRseSBiZWNvbWVzIGEgc291Z2h0LWFmdGVyIGd1ZXN0IGF0IG1hbnkgb2YgdGhlaXIgcGFydGllcy4gU2hlLCBoYXZpbmcgYmVlbiBzY29ybmVkIGJ5IFJoZXR0IHRpbWUgYW5kIHRpbWUgYWdhaW4sIGV2ZW50dWFsbHkgYWdyZWVzIHRvIG1hcnJ5IEx1a2UsIHRoZSBlYXJsIG9mIEZlbnRvbiwgdW50aWwgUmhldHQgY29tZXMgYWxvbmcgaW4gYSBjbGljaMOpZCAibmlnaHQtb24td2hpdGUtaG9yc2UiIC0gdHlwZSBvZiBhIHJlc2N1ZS4gVGhlICJTY2FybGV0dCIgbWluaXNlcmllcyBmYWlscyBldmVuIHRvIGRvIHRoaXMganVzdGljZS4gUmFwZWQgYnkgaGVyIGZpYW5jw6kgYW5kIHNjb3JuZWQgYnkgaGVyIGZhbWlseSwgdGhlIHNlcmllcyBzaG93cyBTY2FybGV0dCB0aHJvd24gaW4gamFpbCBhZnRlciBzaGUgaXMgYmxhbWVkIGZvciBhIG11cmRlciBoZXIgY291c2luIGNvbW1pdHRlZC48YnIgLz48YnIgLz5JIGhlYXJ0aWx5IGFkdmlzZSBhbnlvbmUgY29uc2lkZXJpbmcgc3BlbmRpbmcgdGhlaXIgZGF5IHdhdGNoaW5nIHRoaXMgdG8gcmV0aGluayB0aGlzIGRlY2lzaW9uLjxiciAvPjxiciAvPikAAAAAAAAAQAq+BAjkAhDkAiKsBDxiciAvPjxiciAvPkZpcnN0IG9mIGFsbCwgSSByZXZpZXdlZCB0aGlzIGRvY3VtZW50YXJ5IGJlY2F1c2UgSSBoYWQgYW4gaW50ZXJlc3QgaW4gdGhlIHN1YmplY3QgaXQgcG9ydHJheWVkLCB0aGUgTEEgcHVua3MuPGJyIC8+PGJyIC8+SSBsaXN0ZW5lZCB0aGF0IG11c2ljIGFuZCBJIGxvdmVkIHRoYXQgbXVzaWMgYW5kIEkgcmVhZCBhIGxvdCBvZiB0aGUgc21hbGwgemluZXMgdGhhdCB3ZXJlIG1hZGUgaW4gdGhlIGVhcmx5IDgwJ3MgYW5kIHRoYXQgd2VyZSBub3Qgc28gZWFzaWx5IGFjaGlldmVkIGluIEZpbmxhbmQuPGJyIC8+PGJyIC8+U28gaWYgeW91IGRvbid0IGxpa2UgdGhpcyBraW5kIG9mIG11c2ljIHdoeSB5b3Ugd3JpdGUgaGVyZSBhYm91dCBpdD8gSSBsaWtlIHRoaXMga2luZCBvZiBtdXNpYywgaXQgc3BlYWtzIG15IHNvdWwsIHRodXMgSSBrbm93IHB1bmtzIGZyb20gYWxsIG92ZXIgRXVyb3BlICYgQW1lcmljYXMsIHNvIHdoeSBkbyB5b3UsIHdobyBmaW5kIHRoaXMgbXVzaWMgInJlcHVnbmFudCIgY2FyZSB0byBjb21tZW50IGF0IGFsbD88YnIgLz48YnIgLz4pAAAAAAAAAEAKyggI5QIQ5QIiuAg8YnIgLz48YnIgLz5CYWNrIGluIGhpcyB5b3V0aCwgdGhlIG9sZCBtYW4gaGFkIHdhbnRlZCB0byBtYXJyeSBoaXMgZmlyc3QgY291c2luLCBidXQgaGlzIGZhbWlseSBmb3JiaWQgaXQuIE1hbnkgZGVjYWRlcyBsYXRlciwgdGhlIG9sZCBtYW4gaGFzIHJhaXNlZCB0aHJlZSBjaGlsZHJlbiAodHdvIGJveXMgYW5kIG9uZSBnaXJsKSwgYW5kIGFsbG93cyBoaXMgc29uIGFuZCBkYXVnaHRlciB0byBtYXJyeSBhbmQgaGF2ZSBjaGlsZHJlbi4gU29vbiwgdGhlIHNpc3RlciBpcyBib3JlZCB3aXRoIGJyb3RoZXIgIzEsIGFuZCBqdW1wcyBpbiB0aGUgYmVkIG9mIGJyb3RoZXIgIzIuPGJyIC8+PGJyIC8+T25lIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIHRocmVlIHNpYmxpbmdzIGFyZSBzdHVjayBzb21ld2hlcmUgb24gYSByZW1vdGUgaXNsYW5kLiBCdXQgbm8gLS0gdGhleSBhcmUgdXBwZXIgY2xhc3MgRXVyb3BlYW5zIGdvaW5nIHRvIGNvbGxlZ2UgYW5kIGJ1c3kgaW4gdGhlIHNvY2lhbCB3b3JsZC48YnIgLz48YnIgLz5OZXZlciBkbyB3ZSBzZWUgYSBmbGlydGF0aW91cyBtb21lbnQgYmV0d2VlbiBhbnkgbm9uLXJlbGF0ZWQgZmVtYWxlIGFuZCB0aGUgdHdvIGJyb3RoZXJzLiBOZXZlciBkbyB3ZSBzZWUgYW55IGZsaXJ0YXRpb3VzIG1vbWVudCBiZXR3ZWVuIGFueSBub24tcmVsYXRlZCBtYWxlIGFuZCB0aGUgb25lIHNpc3Rlci4gQWxsIGZsaXJ0YXRpb3VzIG1vbWVudHMgYXJlIHNoYXJlZCBiZXR3ZWVuIG9ubHkgYmV0d2VlbiB0aGUgYnJvdGhlcnMgYW5kIHNpc3Rlci48YnIgLz48YnIgLz5UaGUgd2Vha2VzdCBwYXJ0IG9mIEdMQURJQVRPUiB3YXMgdGhlIGluY2VzdCB0aGluZy4gVGhlIHlvdW5nIGVtcGVyb3IgQ29tbW9kdXMgd291bGQgaGF2ZSBodW5kcmVkcyBvZiBzbGF2ZSBnaXJscyBhbmQgYSBjaXR5IGZ1bGwgb2YgbWFycmlhZ2UtbWluZGVkIGdpcmxzIGFsbCBvdmVyIGhpbSwgYnV0IG5vIC0tIGhlIG9ubHkgd2FudGVkIGhpcyBzaXN0ZXI/IElmIG1vdmllIGluY2VzdCBpcyB5b3VyIGN1cCBvZiB0ZWEsIHRoZW4gU1VOU0hJTkUgd2lsbCAoc2xvd2x5KSB0aHJpbGwgeW91IHRvIG5vIGVuZC4pAAAAAAAAAEAK/A0I5gIQ5gIi6g0xc3Qgd2F0Y2hlZCAxMi8yNi8yMDA4IC0oRGlyLUV1Z2VuZSBMZXZ5KTogQ29ybnkgY29tZWR5IG11cmRlciBteXN0ZXJ5IHdpdGggdmVyeSBmZXcgbGF1Z2hzLiBUaGUgbW92aWUgYXBwZWFycyB0byBiZSBiYXNlZCBvbiBhbiBlYXJsaWVyIEl0YWxpYW4gbW92aWUgYWNjb3JkaW5nIHRvIHRoZSBjcmVkaXRzIGJ1dCB3YXMgcmUtd3JpdHRlbiBieSB0d28gZmFpcmx5IHBvcHVsYXIgQW1lcmljYW4gcm9tYW50aWMgY29tZWR5IHdyaXRlcnMuIEJ1dCB0aGlzIG9uZSBieSBDaGFybGVzIFNoeWVyICYgTmFuY3kgTWV5ZXJzIGRvZXMgbm90IGN1dCBpdCBjb21wYXJlZCB0byB0aGVpciBvdGhlciBlZmZvcnRzLiBUaGUgc3RvcnkgaXMgYWJvdXQgYSBjb3VwbGUgb2YgZG93bi1hbmQtb3V0IHRyYXZlbGluZyBBbWVyaWNhbnMsIHBsYXllZCBieSBSaWNoYXJkIExld2lzIGFuZCBTZWFuIFlvdW5nLCB3aG8gc3R1bWJsZSB1cG9uIGEgbG9zdCBkb2cgYW5kIGhvcGUgdG8gbWFrZSBhIGZvcnR1bmUgaW4gcmV3YXJkIG1vbmV5IGFmdGVyIHNlZWluZyBhbiBhZCBpbiB0aGUgcGFwZXIgZm9yIHRoZSBkYWNoc3VuZCdzIHJldHVybi4gVXBvbiB0cnlpbmcgdG8gcmV0dXJuIGl0LCB0aGV5IHNlZSBhIGhhbmQgc3RpY2tpbmcgb3V0IG9mIGEgZ2FyYWdlIGRvb3IgYXQgdGhlIGxhZHkncyByZXNpZGVuY2UgdGhhdCB0aGV5IGJlbGlldmUgaXMgYXR0YWNoZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGRlYWQgYm9keSBvZiB0aGUgd29tYW4gd2hvIGlzIHN1cHBvc2VkIHRvIGdpdmUgdGhlbSB0aGUgbW9uZXkuIFRoZXkgZnJlYWsgb3V0IGFuZCBpbnN0ZWFkIG9mIGNvbnRhY3RpbmcgdGhlIHBvbGljZSBhbmQgdGVsbGluZyB0aGVtIHRoZSB0cnV0aCB0aGV5IG1ha2Ugb3V0IGxpa2UgcnVuYXdheXMgZnJvbSB0aGUgc2NlbmUgZXhwZWN0aW5nIHRvIGJlIGZyYW1lZCBmb3IgdGhlIG11cmRlci4gVGhlIG90aGVyIGNoYXJhY3RlcnMgaW4gdGhlIGZpbG0gYXJlIG1ldCBvbiBhIHRyYWluIHByaW9yIHRvIHRoaXMgYW5kIGhhbmcgYXJvdW5kIGEgTW9udGUgQ2FybG8gZ2FtYmxpbmcgcmVzb3J0IGRvaW5nIHZhcmlvdXMgdGhpbmdzIHRvIGJlIHB1bGxlZCBpbnRvIHRoZSBzdG9yeS4gVGhlIG90aGVyIGNhc3QgbWVtYmVycyBpbmNsdWRlIGNoYXJhY3RlciBhY3RvcnMgSm9obiBDYW5keSwgSmFtZXMgQmVsdXNoaSwgQ3liaWxsIFNoZXBoZXJkLCBHZW9yZ2UgSGFtaWx0b24gYW5kIG90aGVycy4gQWZ0ZXIgdGhlIHBvbGljZSBmaW5kIG91dCBhYm91dCB0aGUgZGVhdGgsIHRoZXkgc3RhcnQgcXVlc3Rpb25pbmcgdGhlIG1haW4gY2hhcmFjdGVycyBhbmQsIG9mIGNvdXJzZSwgdGhleSBoYXZlIHRvIHdvcmsgdGhydSB0aGVpciBnb29meSBsaWVzIHRvIGZpZ3VyZSBvdXQgd2hhdCByZWFsbHkgaGFwcGVuZWQuIE5vbmUgb2YgdGhlIGNoYXJhY3RlciBhY3RvcnMgbWVudGlvbmVkIGVhcmxpZXIgY2FuIGJyaW5nIHRoaXMgbW92aWUgb3V0IG9mIGl0J3MgbWVkaW9jcmUgc3RhdGUgZGVzcGl0ZSBzb21lIGZ1bm55IG1vbWVudHMgbW9zdGx5IHByb3ZpZGVkIGJ5IHRoZSBCZWx1c2hpL1NoZXBoZXJkIGNvdXBsZS4gVGhpcyBpc24ndCBhIGhvcnJpYmxlIG1vdmllLCBpdCBqdXN0IGlzbid0IHRoYXQgZ29vZC4gVGhlcmUgYXJlIHBsZW50eSBvZiBhdmVyYWdlIG1vdmllcyBvdXQgdGhlcmUgYW5kIHRoaXMgaXMganVzdCBhbm90aGVyIG9uZSBmb3IgdGhlIHBpbGUuIFRyeSBpdCwgbWF5YmUgeW91J2xsIGxpa2UgaXQsIHByb2JhYmx5IHlvdSB3b24ndC4pAAAAAAAAAEAK1xAI5wIQ5wIixRAuLi5hdCBsZWFzdCBkdXJpbmcgaXRzIGZpcnN0IGhhbGYuIElmIGl0IGhhZCBzdGFydGVkIG91dCB3aXRoIHRoZSB0aHJlZSBidWRkaWVzIGluIHRoZSBuYXZ5IGFuZCBjb25jZW50cmF0ZWQgb24gdGhlIG5hdmFsIGFjdGlvbiBzY2VuZXMsIGl0IHdvdWxkIGhhdmUgYmVlbiBhIG11Y2ggYmV0dGVyIGFuZCB0aWdodGVyIGZpbG0uIFRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgZmlsbSBpcyB3b3J0aCBpdCwgZXNwZWNpYWxseSBmb3IgdGhlIGFjdGlvbiBzZXF1ZW5jZXMgYW5kIGNsb3NlIHVwIHNob3RzIG9mIGVhcmx5IDIwdGggY2VudHVyeSBzaGlwcywgYnV0IGl0J3MgbGlrZSBhIGR1bGwgdG9vdGhhY2hlIGdldHRpbmcgdGhlcmUuIEFsc28sIGRvbid0IHdhdGNoIHRoaXMgZmlsbSBqdXN0IGJlY2F1c2UgR2luZ2VyIFJvZ2VycyBpcyBpbiBpdC4gU2hlIGhhcyBhbiBpbXBvcnRhbnQgcm9sZSwgYnV0IGl0J3MgYSBzbWFsbCBvbmUuPGJyIC8+PGJyIC8+VGhlIGZpbG0gc3RhcnRzIG91dCBzaG93aW5nIHRocmVlIE5ldyBZb3JrIENpdHkgYnVkZGllcyB3b3JraW5nIHRoZSB0b3VyaXN0IHRyYWRlIGFuZCBhbHNvIGluIGdvb2QtbmF0dXJlZCBjb21wZXRpdGlvbiBmb3IgdGhlIGhhbmQgb2YgU2FsbHkgKEdpbmdlciBSb2dlcnMpLCBhIHNpbmdpbmcgY2FuZHkgc2FsZXNnaXJsIGFsb25nIHRoZSBhdmVudWUuIFdvcmxkIFdhciBJIGJyZWFrcyBvdXQsIHRoZSB0aHJlZSBidWRkaWVzIHNlZW0gY29tcGxldGVseSBpbmRpZmZlcmVudCB0byB0aGUgc3RydWdnbGUsIHlldCBlbmxpc3QgaW4gdGhlIG5hdnkgYW55d2F5cy4gVGhlIG9uZSBvZiB0aGUgdGhyZWUgd2l0aCB0aGUgbGVhc3QgaW5kdXN0cnkgYXMgYSBjaXZpbGlhbiAoQmlsbCBCb3lkIGFzIEJhbHRpbW9yZSkgd2luZHMgdXAgdGhlIGNvbW1hbmRpbmcgb2ZmaWNlciB0byB0aGUgb3RoZXIgdHdvIChSb2JlcnQgQXJtc3Ryb25nIGFzIER1dGNoIGFuZCBKYW1lcyBHbGVhc29uIGFzIFNrZWV0cykuIFRvIG1ha2UgbWF0dGVycyBtb3JlIGNvbXBsZXgsIFNhbGx5IGhhcyBmYWxsZW4gaW4gbG92ZSB3aXRoIG9uZSBvZiB0aGUgdGhyZWUsIGJ1dCBkb2Vzbid0IGhhdmUgdGhlIGNoYW5jZSB0byB0ZWxsIGhpbSBiZWZvcmUgdGhlIHRocmVlIHNhaWwgb2ZmIHRvIHdhci48YnIgLz48YnIgLz5UaGUgZmlsbSBpcyBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nIG9uIGJvYXJkIHNoaXAsIG1haW5seSBiZWNhdXNlIG9mIHRoZSBjbG9zZSBzaG90cyB3ZSBoYXZlIG9mIHRoZSBzaGlwIGl0c2VsZiwgYW5kIGFsc28gYmVjYXVzZSB0aGUgY2hlbWlzdHJ5IGFtb25nIHRoZSB0aHJlZSBidWRkaWVzIGlzIGJlbGlldmFibGUuIEhvd2V2ZXIsIEphbWVzIEdsZWFzb24gYXQgYWdlIDQ5IGxvb2tzIGEgYml0IGxvbmcgaW4gdGhlIHRvb3RoIHRvIGJlIGEgc3dhYmJ5LCBlc3BlY2lhbGx5IHdoZW4gdGhlIHNpZ24gYXQgdGhlIGVubGlzdG1lbnQgb2ZmaWNlIHNhaWQgeW91IGhhZCB0byBiZSBiZXR3ZWVuIDE3IGFuZCAzNSB0byBiZSBlbGlnaWJsZS48YnIgLz48YnIgLz5PbmUgcmVhbCBvYnZpb3VzIGZsYXcgaW4gdGhlIGZpbG0gdGhhdCBtYWRlIG1lIGJlbGlldmUgdGhhdCBldmVyeXRoaW5nIG91dHNpZGUgdGhlIG5hdmFsIHNjZW5lcyB3YXMgc2xhcHBlZCB0b2dldGhlciB3aXRoIG1pbmltdW0gY2FyZSBpcyB0aGUgY29zdHVtZSBkZXNpZ24sIG9yLCBJIHNob3VsZCBzYXksIHRoZSBsYWNrIG9mIGl0LiBJbiB0aGUgc2NlbmVzIGluIE5ldyBZb3JrIGp1c3QgcHJpb3IgdG8gV1dJIHdlIGhhdmUgZXZlcnlvbmUgZHJlc3NlZCBpbiB0aGUgZmFzaGlvbnMgb2YgMTkzMSBhbmQgZXZlcnlvbmUgZHJpdmluZyB0aGUgY2FycyBvZiAxOTMxIC0gbm8gZWZmb3J0IHdhcyB0YWtlbiB0byBicmluZyB0aGlzIGZpbG0gaW50byBwZXJpb2QuPGJyIC8+PGJyIC8+SW4gY29uY2x1c2lvbiwgaWYgeW91IHdhdGNoIHRoZSBmZXcgc2NlbmVzIHdpdGggR2luZ2VyIFJvZ2VycyBpbiB0aGVtIGFuZCB0aGUgbGFzdCA0NSBtaW51dGVzIGludm9sdmluZyB0aGUgbmF2YWwgc3VpY2lkZSBtaXNzaW9uLCB5b3UndmUgc2VlbiBldmVyeXRoaW5nIGhlcmUgd29ydGggc2VlaW5nLiBUaGUgcmVzdCBpcyBwYWRkaW5nLikAAAAAAAAAQAqzBwjoAhDoAiKhBy4uLkJ1dCBub3QgdGhpcyBvbmUhIEkgYWx3YXlzIHdhbnRlZCB0byBrbm93ICJ3aGF0IGhhcHBlbmVkIiBuZXh0LiBXZSB3aWxsIG5ldmVyIGtub3cgZm9yIHN1cmUgd2hhdCBoYXBwZW5lZCBiZWNhdXNlIEdXVFcgd2FzIE1hcmdhcmV0J3MgYmFieS4gSSBhbSBhIGxpZmVsb25nIGZhbiBvZiBHb25lIFdpdGggdGhlIFdpbmQgYW5kIEkgY291bGQgbm90IGhhdmUgYmVlbiBtb3JlIHJlcHVsc2VkIGJ5IHRoZSBtb3ZpZS4gSSBkaWQgY29tcGFyZSAiU2NhcmxldHQiIHRvIHRoZSBvcmlnaW5hbCBHV1RXIGJlY2F1c2UgYW55IGZpbG0gd29ydGggZm9sbG93aW5nIEdXVFcgbmVlZGVkIHRvIGJlIG9uIHRoZSBzYW1lIHF1YWxpdHkgbGV2ZWwgYXMgdGhlIGZpcnN0LiBSaGV0dCB3YXMgY2FzdCBiZWF1dGlmdWxseSwgYWx0aG91Z2ggTk8gT05FIHdpbGwgZXZlciBjb21wYXJlIHRvIE1yLiBHYWJsZS4gSSBhbSBhbHNvIGEgc3RyaWN0IFZpdmllbiBMZWlnaCBmYW4hISBTaGUgV0FTIFNjYXJsZXR0LiBTaGUgZml0IHRoZSBiaWxsLiBOb3QgYW5vdGhlciBhY3RyZXNzIGluIHRoaXMgbGlmZXRpbWUgb3IgYW5vdGhlciB3aWxsIGV2ZXIgZml0IHRoZSBzYW1lIHNob2VzIGJ1dCB3aXRoICJTY2FybGV0dCIgdGhlIGpvYiBjb3VsZCBoYXZlIGJlZW4gZG9uZSBiZXR0ZXIuIE5vdCBlbm91Z2ggdGhvdWdodCB3ZW50IGludG8gZmluZGluZyB0aGUgcHJvcGVyIFNjYXJsZXR0LCB0aGF0IHdhcyBldmlkZW50LjxiciAvPjxiciAvPk92ZXJhbGwsIHNvbWV0aGluZyB0byBsb29rIHRvIGJ1dCBpZiB5b3Ugd2FudCB0byBrbm93IHRoZSB3aGF0IGhhcHBlbmVkIHRvIFNjYXJsZXR0IGFuZCBSaGV0dCwgSSBzdWdnZXN0IHdyaXRpbmcgaXQgeW91cnNlbGYgb3IgZmluZGluZyBmYW4gZmljdGlvbi4gVGhpcyBtb3ZpZSBpcyBub3Qgd29ydGggdGhlIHRpbWUuKQAAAAAAAABACvwHCOkCEOkCIuoHLi4uLi4uLlBsYXlpbmcgS2FkZGlkZGxlaG9wcGVyLCBDb2wgU2FuIEZlcm5hbmRvLCBldGMuIHRoZSBtYW4gd2FzIHByZXR0eSB3aWRlIHJhbmdpbmcgYW5kIGEgc2NyZWFtLiBJIGxvdmUgd2F0Y2hpbmcgaGltIGludGVyYWN0IHcvIEFtYW5kYSBCbGFrZSwgb3IgRG9uIEtub3R0cyBvciB3aG9tZXZlci0taGUgY2xlYXJseSB3YXMgaGF2aW5nIGEgYmFsbCBhbmQgSSB0aGluayBoZSBtYWRlIGl0IGVhc2llciBvbiBoaXMgZ3Vlc3RzIGFzIHdlbGwtLXNvIGxvbmcgYXMgdGhleSBLbmV3IGFoZWFkIG9mIHRpbWUgaXQgd2Fzbid0IGEgZGlzY2lwbGluZWQsIDE5IHRha2Uga2luZCBvZiBwcm9kdWN0aW9uLiBSZWxheCBhbmQgYmUgbG9vc2Ugd2FzIGNsZWFybHkgdGhlIG5hbWUgb2YgdGhlIGdhbWUgdGhlcmUuPGJyIC8+PGJyIC8+SGUgcmVtaW5kcyBtZSBvZiBndXlzIGxpa2UgTWlsdG9uIEJlcmxlLCBCZW5ueSBIaWxsLCBtYXliZSBKZXJyeSBMZXdpcyBzb21lIHRvby4gR3JlYXQgdGltaW5nLCBhbmNpZW50IGdhZ3MgdGhhdCBrZXB0IGF1ZGllbmNlcyBpbiBzdGl0Y2hlcyBmb3IgZGVjYWRlcywgc2hlZXIgZW5qb3ltZW50IGFib3V0IHdoYXQgaGUgd2FzIGRvaW5nLiBIaXMgc2FkIGxpdHRsZSBjbG93biBoZSBwbGF5ZWQgd2FzIGdvb2QgdG9vLS1idXQgaW4gYSB0b3VjaGluZyBtYW5uZXIuPGJyIC8+PGJyIC8+UGVyc29uYWxseSBJIHRoaW5rIGhlJ3MgZ3JlYXQsIGhhdmluZyBqdXN0IGJvdWdodCBhIHR3byBEVkQgc2V0IG9mIGhpcyBzaG93cyBmcm9tICc2MSBvciBzbywgaXQgYnJpbmdzIGhpcyBzdHVmZiBiYWNrIGluIGEgZm9uZCB3YXkgZm9yIG1lLiBJIGNhbiByZW1lbWJlciBzZWVpbmcgaGltIG9uIFRWIGF0IHRoZSBlbmQgb2YgaGlzIHJ1biB3aGVuIGhlIHdhcyB3aW5kaW5nIHVwIHRoZSBzZXJpZXMgaW4gMTk3MSBvciBzby48YnIgLz48YnIgLz5DaGVjayB0aGlzIG91dCBpZiB5b3UgYXJlIGEgZmFuIG9yIGN1cmlvdXMuIEhlIHdhcyBhIHJpb3QuKQAAAAAAAABACvAGCOoCEOoCIt4GLW1heSBjb250YWluIHNwb2lsZXJzLTxiciAvPjxiciAvPkNsZWFybHksIHdobyBldmVyIG1hZGUgdGhpcyBmaWxtIG11c3QgaGF2ZSBoYWQgYSBsb3Qgb2YgY29ubmVjdGlvbnMuIEkganVzdCBjYW4ndCBzZWUgaXQgYW55IG90aGVyIHdheS4gV2hhdCByZWFsbHkgc3VycHJpc2VzIG1lIGlzIG5vIG9uZSB1c2VkIHRoZSBuYW1lIEFsbGVuIFNtaXRoZWUsIGFuZCBtb3JlIHN1cnByaXNpbmcsIGV2ZXJ5b25lIGludm9sdmVkIGRpZG4ndCB1c2UgdGhpcyBuYW1lLjxiciAvPjxiciAvPkFueWhvdywgd2hlcmUgdG8gYmVnaW4uIFRoZSBiYWQgZGlhbG9ndWUsIHRoZSBjcnVtbXkgY29zdHVtZXMsIHRoZSBzb3JyeSBsb29raW5nIGZpbG0gc3RvY2ssIHRoZSB1bmludGVudGlvbmFsIGNvbWVkeSwgdGhlIG92ZXItdGhlLXRvcCBjaGFyYWN0ZXJzLCBhbmQgbW9yZSBpbmNvbnNpc3RlbmNpZXMgdGhhbiBHZW9yZ2UgVy4gQnVzaCdzIGNvbGxlZ2UgY2FyZWVyLiBJIGRvbid0IGtub3cgd2hhdCB3YXMgZnVubmllciwgdGhlIGd1eSBsb3NpbmcgaGlzIGFybSBiZWNhdXNlIG9mIGEgc25vd2JhbGwsIG9yIHRoZSBzbG93IG1vdGlvbiBzY2VuZSB3aGVyZSBhbGwgdGhlIGJhYnkgSmFjayBGcm9zdHMnIHdlcmUgZ2V0dGluZyBraWxsZWQuIEFsc28sIG9uZSBvZiB0aGUgZ3JlYXQgbGluZXMgb2YgYWxsIHRpbWUgd2FzIHV0dGVyZWQgaW4gdGhpcyBmaWxtLiAiSG93IGRvIHdlIGtub3cgaXQncyBoaW0/IiBMaWtlIHRoZXJlJ3MgYW5vdGhlciBtdXRhbnQgc25vd21hbiB3aG8gY2FuIHRhbGsgYW5kIGtpbGwgcGVvcGxlIHdpdGggc25vd2JhbGxzISBBIGdyZWF0IGNhbXAgZmlsbSwgYnV0IGEgdmVyeSBiYWQgZmlsbSBvdmVyYWxsLikAAAAAAAAAQAr3DgjrAhDrAiLlDipTUE9JTEVSUyo8YnIgLz48YnIgLz5JIGRvbid0IGNhcmUgd2hhdCBhbnlvbmUgc2F5cywgdGhpcyBtb3ZpZSBpcyBmcmlnZ2luJyBoaWxhcmlvdXMuIFRoaXMgaXMgdGhlIHNlcXVlbCB0byBKYWNrIEZyb3N0LCBhIG1vdmllIGFib3V0IGEga2lsbGVyIHNub3dtYW4uIFRoZSBzbm93bWFuIGlzIGNyZWF0ZWQgd2hlbiBhIGNvbnZpY3RlZCBzZXJpYWwga2lsbGVyIGFib3V0IHRvIGJlIGV4ZWN1dGVkIGlzIHRha2VuIHRvIHRoZSBleGVjdXRpb24gY2hhbWJlciwgYnV0IHRoZSB0cnVjayBjcmFzaGVzIHdpdGggYSB0cnVjayBjYXJyeWluZyBETkEgbWFuaXB1bGF0aW9uIGNoZW1pY2FscyB0aGF0IG1ha2UgaHVtYW4gRE5BIGJvbmQgd2l0aCBkaXJ0LCBvciBpbiB0aGlzIGNhc2UsIHNub3cuIFRoZSBmaXJzdCBtb3ZpZSB3YXMganVzdCBib3JpbmcsIGFuZCBldmVudHVhbGx5IHRoZSBzbm93bWFuIGlzIGRlc3Ryb3llZCBieSBwb3VyaW5nIGFudGlmcmVlemUgb24gaGltLjxiciAvPjxiciAvPk9yIHNvIHRoZXkgdGhvdWdodC48YnIgLz48YnIgLz5UaGlzIG1vdmllIHRha2VzIHBsYWNlIGFib3V0IGEgeWVhciBhZnRlciB0aGUgc2Vjb25kLiBTb21lIHNjaWVudGlzdHMgcmVzdXJyZWN0IEphY2sgRnJvc3QgYnkgbWl4aW5nIHRoZSBhbnRpZnJlZXplIHdpdGggY2hlbWljYWxzLiBObyBleHBsYW5hdGlvbiBpcyBldmVyIGdpdmVuIGZvciB3aHkgdGhleSBkbyB0aGlzLCB0aGV5IGp1c3QgZG8uIE1lYW53aGlsZSwgdGhlIHNoZXJyaWYgd2hvIGFycmVzdGVkIEZyb3N0IGluIHRoZSBmaXJzdCBpcyBnb2luZyB0byB0aGUgQmFoYW1hcy4gVW5mb3J0dW5hdGVseSwgdGhlIHNub3dtYW4gY29tZXMgd2l0aCBoaW0uPGJyIC8+PGJyIC8+VGhpcyBtb3ZpZSBoYXMgaXQgYWxsLiBJdCBoYXMgdGFsa2luZyBjYXJyb3RzIHRoYXQgY2FuIHN0YW5kIHVwLCBpY2UgY3ViZXMgdGhhdCBleHBsb2RlIHdoZW4geW91IHN0aWNrIHRoZW0gaW4geW91ciBtb3V0aCwgYW5kIGtpbGxlciBzbm93YmFsbHMuIFllcywga2lsbGVyIHNub3diYWxscy4gVGhleSBldmVuIHNheSAiRGFkYSEiIGxpa2UgYmFiaWVzLiBJJ2xsIGhhdmUgdG8gZ2l2ZSB0aGUgbWFrZXJzIG9mIHRoaXMgY3JlZGl0LiBUaGUgc25vd2JhbGxzIGFyZSBzb21lIG9mIHRoZSBjdXRlc3QgbGl0dGxlIHRoaW5ncyBldmVyIGRyZWFtZWQgdXAuIEkgd2lzaCB0aGF0IEkgY291bGQgZ2V0IG9uZSBhcyBhIHBldC4gRnJvc3QgZmluYWxseSBmcmVlemVzIHRoZSBpc2xhbmQsIGFzIGlmIGEga2lsbGVyIHNub3dtYW4gaGFzIHRoZSBhYmlsaXR5IHRvIGluZmx1ZW5jZSBtYWpvciB3ZWF0aGVyIHBhdHRlcm5zLjxiciAvPjxiciAvPlRoZW4gdGhlcmUncyB0aGUgYWN0b3JzLiBUaGVyZSdzIE1hbm5lcnMsIHRoZSBGQkkgYWdlbnQgZnJvbSB0aGUgZmlyc3QgbW92aWUsIGV4Y2VwdCBoZXJlIGhlJ3Mgd2VhcmluZyBhbiBleWVwYXRjaC4gWUFSUiBNQVRFWVMsIFNISVZFUiBNRSBUSU1CRVJTLCBJIEJFIEFOIEZCSSBBR0VOVCEgWUFSUlIhIEFuZCB0aGVuIHRoZXJlJ3MgdGhlIHN0ZXJlb3R5cGljYWwgQnJpdGlzaCBhZHZlbnR1cmVyIGFuZCB0aGUgc3RlcmVvdHlwaWNhbCBibGFjayBKYW1haWNhbiB3aXRoIGRyZWFkbG9ja3MuIEFuZCBmaW5hbGx5LCBDYXB0YWluIEZ1bi4gVGhlIGZydWl0aWVzdCBtYW4gb24gdGhlIGZhY2Ugb2YgdGhlIHBsYW5ldCwgYmFyIG5vbmUuPGJyIC8+PGJyIC8+VGhpcyBtb3ZpZSBpc24ndCBzY2FyeSwgYnV0IGlzIGlzIGhpbGFyaW91cy4gSSBsYXVnaGVkIG15IGJ1dHQgb2ZmIHRoZSB3aG9sZSB3YXkgdGhyb3VnaCwgYW5kIEkgcmVjb21tZW5kIHRoaXMgZm9yIGFueW9uZSB3aG8gbGlrZXMgYSBnb29kICJiYWQiIG1vdmllLjxiciAvPjxiciAvPioqKiBvdXQgKioqKikAAAAAAAAAQArbHwjsAhDsAiLJHyoqU1BPSUxFUlMqKiBJIHJlbnRlZCAiVGVzaXMiIChvciAiVGhlc2lzIiBpbiBFbmdsaXNoKSBvbiB0aGUgc3RyZW5ndGggb2YgZGlyZWN0b3IgQWxlamFuZHJvIEFtZW5hYmFyJ3MgbGF0ZXIgZWZmb3J0ICJUaGUgT3RoZXJzIi4gQmFzZWQgb24gd2hhdCBhIGJyaWxsaWFudGx5IG1lYXN1cmVkIGFuZCBob3JyaWZ5aW5nbHkgZWZmZWN0aXZlIGNyZWVwZmVzdCB0aGF0IGZpbG0gd2FzLCBJIGFzc3VtZWQgaGlzIGVhcmxpZXIgZWZmb3J0cyB3b3VsZCBiZSBvZiBhIHNpbWlsYXIgcXVhbGl0eSBhbmQgSSB3YXMgaW4gdGhlIG1vb2QgZm9yIHNvbWUgZ29vZCBob3Jyb3IuIEluc3RlYWQgSSB3b3VuZCB1cCB3aXRoIHRoZSBtb3N0IHRlZGlvdXMsIHByZXBvc3Rlcm91cyBleGN1c2UgZm9yIGEgbGFtZS1icmFpbmVkIHNsYXNoZXIgbW92aWUgSSd2ZSBzZWVuIHNpbmNlIHRoZSBHZXJtYW4gZmlsbSAiQW5hdG9taWUiICh3aGljaCB0aGlzIG9uZSBraW5kYSByZW1pbmRlZCBtZSBvZikuPGJyIC8+PGJyIC8+VGhlIHBsb3QgaGFzIHBvdGVudGlhbCBidXQgaXQncyB0aHJvd24gYXdheSB3aXRoaW4gdGhlIGZpcnN0IDIwIG1pbnV0ZXMuIEl0IHJldm9sdmVzIGFyb3VuZCBpbm5vY2VudC1uLXByZXR0eSBwc3ljaG9sb2d5IHN0dWRlbnQgQW5nZWxhJ3MgKEFuYSBUb3JyZW50IC0gYSBKZXNzaWNhIEhhcnBlciBkZWFkcmluZ2VyKSB0aGVzaXMgb24gdGhlIHN1YmplY3Qgb2YgdmlvbGVuY2UgaW4gZmlsbXMuIFRocm91Z2ggc29tZSBmYXItZmV0Y2hlZCBjaXJjdW1zdGFuY2VzIHRvbyBkdW1iIHRvIGdvIGludG8gaGVyZSwgc2hlIHdpbmRzIHVwIGluIHBvc3Nlc3Npb24gb2YgYSAnc251ZmYnIHRhcGUgb24gd2hpY2ggdHdvIG1lbiB0b3J0dXJlLCBtdXRpbGF0ZSBhbmQga2lsbCBhIHlvdW5nIGdpcmwgZm9yIHRoZSBjYW1lcmEuIEFuZ2VsYSwgYW5kIGhlciBob3Jyb3ItYnVmZiBmcmllbmQgQ2hlbWEgKEZlbGUgTWFydGluZXopIGFyZSBib3RoIHNob2NrZWQgeWV0IGludHJpZ3VlZCBieSB0aGUgdGFwZSBhbmQgZGVjaWRlIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHdobydzIHJlc3BvbnNpYmxlIGZvciBpdC48YnIgLz48YnIgLz5UaGlzIGxlYWRzIHRvLi4uIHdlbGwsIG5vdGhpbmcuPGJyIC8+PGJyIC8+VGhleSBuZXZlciByZWFsbHkgZ2l2ZSBhIHJlYXNvbiBmb3Igd2h5IHRoZXkgd2FudCB0byBmaW5kIHRoZSBnaXJsJ3Mga2lsbGVycyAoc2luY2UgdGhleSByZXNvbHV0ZWx5IHJlZnVzZSB0byBjb250YWN0IHRoZSBwb2xpY2UgdGhyb3VnaG91dCBhbnkgb2YgdGhlIHVuZm9sZGluZyBldmVudHMsIGV2ZW4gd2hlbiB0aGVpciBvd24gbGl2ZXMgYXQgcmlzaykgYW5kIHRoZSBteXN0ZXJ5IGl0c2VsZiBpcyBhcyBsaW1wIGFzIEdyYWhhbSBOb3J0b24gaW4gYSByb29tIGZ1bGwgb2YgYnVubnkgZ2lybHMuIFRoZXJlIGlzIG9ubHkgb25lIHByb3BlciAnY2x1ZScgKHRoZSB0eXBlIG9mIGNhbWVyYSB0aGUga2lsbGVycyB1c2VkIGlzIGRpc2NvdmVyZWQpIGFuZCB0aGF0J3MgYSkgYSByZWFsbHkgd2VhayBvbmUgYW5kIGIpIHdoZWVsZWQgb3V0IGluIHRoZSBmaXJzdCAyMCBtaW51dGVzLiBUaGUgcmVzdCBvZiB0aGUgc28tY2FsbGVkICd1bnJhdmVsbGluZycganVzdCBvY2N1cnMgdGhyb3VnaCBibGluZCBsdWNrLCBpbmNyZWFzaW5nbHkgcmlkaWN1bG91cyBwbG90IHR3aXN0cyBhbmQgYSBTTEVXIG9mIGF3ZnVsLCB0cmFuc3BhcmVudCBhbmQgdGhvcm91Z2hseSBwb2ludGxlc3MgcmVkIGhlcnJpbmdzIHRoYXQgYXJlIGNodWNrZWQgaW4gbWVyZWx5IHRvIHBhZCBvdXQgdGhlIHJ1bm5pbmcgdGltZS48YnIgLz48YnIgLz5TZXJpb3VzbHkgLSBBbWVuYWJhciBtaWdodCBrbm93IGhpcyBzdHVmZiBhYm91dCBnaG9zdCBzdG9yaWVzIGJ1dCBoZSdzIGNsZWFybHkgbmV2ZXIgcmVhZCBhIGRldGVjdGl2ZSBib29rIGluIGhpcyBsaWZlLiBUaGUga2V5IHRvIGEgZ29vZCB3aG9kdW5uaXQgaXMgdG8gaGF2ZSBhIGxhcmdlIGNsdXN0ZXIgb2YgcG90ZW50aWFsIHN1c3BlY3RzIGFuZCB0byBlbGltaW5hdGUgdGhlbSBvbmUgYnkgb25lIHdpdGggY2xldmVyIGRlZHVjdGlvbiBhbmQgdGhlIGdyYWR1YWwgZGlzY292ZXJ5IG9mIG1vcmUgYW5kIG1vcmUgZXZpZGVuY2UsIGJlZm9yZSBtb3ZpbmcgaW4gZm9yIHRoZSBmaW5hbCB0d2lzdC4gSW4gIlRlc2lzIiwgKlBPVEVOVElBTCBTUE9JTEVSIEFIRUFEKiB0aGUga2lsbGVyJ3MgaWRlbnRpdHkgaXMgZ3Vlc3NlZCBjb3JyZWN0bHkgYnkgdGhlIGFtYXRldXIgJ2RldGVjdGl2ZXMnIGFsbW9zdCBpbnN0YW50bHkgYW5kIHRoZW4gd2UgZ2V0IDEwMCBtaW51dGVzIG9mIHRoZSB3cml0ZXIgdHJ5aW5nIGZlZWJseSB0byB0aHJvdyB1cyBvZmYgdGhlIHNjZW50IHVudGlsIGhlIHJ1bnMgb3V0IG9mIGlkZWFzLCB0aHJvd3MgaGlzIGhhbmRzIHVwIGFuZCBzYXlzICJPSywgeWEgZ290IG1lLCBpdCB3YXMgaGltIGFmdGVyIGFsbCIhIEFzIGZvciBhbnkga2luZCBvZiBsb2dpYyBvciBtb3RpdmUgYmVoaW5kIHRoZSBjcmltZXMgLSBubyBzdWNoIGx1Y2suIFlvdSdyZSB3YXRjaGluZyB0aGUgd3JvbmcgbW92aWUgaWYgdGhhdCdzIHdoYXQgeW91J3JlIGFmdGVyLjxiciAvPjxiciAvPlRoZSBvbmx5IHRoaW5nIHRoYXQgZHJhZ3MgIlRlc2lzIiBkb3duIGZ1cnRoZXIgZnJvbSBqdXN0IGJlaW5nIGEgZHVtYiwgYmFkbHkgd3JpdHRlbiB0aHJpbGxlciBpcyB0aGUgd2F5IGl0IGFjdHVhbGx5IHRyaWVzIHRvIG1ha2Ugc29tZSBsdWRpY3JvdXMsIG11ZGRsZWQtdXAgJ3BvaW50JyBhYm91dCB2aW9sZW5jZSBpbiBmaWxtcy4gSSBoYXZlIG5vIGlkZWEgd2hhdCBzdGFuY2UgaXQncyBhdHRlbXB0aW5nIHRvIHRha2Ugb24gdGhlIHN1YmplY3QgYnV0IGl0IHNlZW1zIGRldGVybWluZWQgdG8gY3JhbSBpbiBhIHRvbiBvZiBtaXNndWlkZWQsIGNvbmZ1c2VkIHBzeWNob2JhYmJsZSwgaW4gYmV0d2VlbiB0aGUgcmVzdCBvZiB0aGUgZ2liYmVyaXNoLCBhbmQgc2F5ICJsb29rIGF0IG1lISBJJ20gcG9saXRpY2FsISIuIFRoZSBmaW5hbCBzY2VuZXMsIGluIHdoaWNoIHRoZSAicG9pbnQiIG9mIHRoZSBtb3ZpZSBpcyBzdXBwb3NlZGx5IGhhbW1lcmVkIGhvbWUsIGFyZSBzbyB1dHRlcmx5IGFic3VyZCBhbmQgcHVlcmlsZSwgb25lIGNhbid0IGhlbHAgYnV0IHdvbmRlciBpZiBBbWVuYWJhciBmZWVscyBlbWJhcnJhc3NlZCBub3cgd2hlbiBoZSB3YXRjaGVzIHRoaXMuIElmIGhlIGRvZXNuJ3QsIGhlIGNlcnRhaW5seSBzaG91bGQuIFRoaXMgaXMgdG90YWwgJ2FtYXRldXIgbmlnaHQgYXQgdGhlIHNsYXNoZXIgaG91c2UnIHN0dWZmLjxiciAvPjxiciAvPk92ZXJhbGwgSSBjYW4ndCBiZWxpZXZlIEkgd2FzdGVkIHR3byB3aG9sZSBob3VycyAoaXQgZmVsdCBsaWtlIGF0IGxlYXN0IHNpeCkgb24gdGhpcywganVzdCBob3Bpbmcgc29tZXRoaW5nIG1pZ2h0IGhhcHBlbi4gVGhlIHVyYmFuIGxlZ2VuZCBvZiAnc251ZmYgZmlsbXMnIChhbmQgdGhhdCBpcyBiYXNpY2FsbHkgYWxsIHRoZXkgYXJlLCBkZXNwaXRlIHRoZSB3YXkgdGhpcyBmaWxtIHRyaWVzIHRvIHN1Z2dlc3QgdGhleSdyZSBzb21lIGtpbmQgb2YgY3JpbWluYWwgcGhlbm9tZW5vbiBzd2VlcGluZyB0aGUgd29ybGQhKSBpcyBhbiBhcmVhIHRoYXQgY2FuIGJlIHNvIHRhbnRhbGlzaW5nbHkgZXhwbG9pdGVkIGluIGdvb2QgaG9ycm9yIGZpbG1zICgiVmlkZW9kcm9tZSIgYW55b25lPykgYnV0IGl0J3Mgc28gZWFzeSB0byBzdGVwIG92ZXIgdGhlIGxpbmUgaW50byBjaGlsZGxpa2UgJ3dvdWxkbid0IGl0IGJlIGNvb2wgaWYhJyB0ZXJyaXRvcnkgd2l0aCBpdCAoaWU6ICJNeSBMaXR0bGUgRXllIikuLi4gIlRlc2lzIiBoaXRzIGFuIGFsbC10aW1lIGxvdyBmb3IgdGhlICdzbnVmZiBtb3ZpZScgZ2VucmUuIE9uIGV2ZXJ5IGxldmVsLCB0aGlzIG9uZSBpcyBiZXR0ZXIgbGVmdCBkZWFkIGFuZCBidXJpZWQuIEknbGwgYXdhcmQgaXQgYSAxIG91dCBvZiAxMCwgZm9yIHNvbWUgbmljZSBsaWdodGluZywgYnV0IHRoYXQncyBhbGwgaXQncyBnZXR0aW5nLikAAAAAAAAAQArdAgjtAhDtAiLLAioqKlNQT0lMRVJTKioqICoqKlNQT0lMRVJTKioqIFdlbGwsIHNlZWluZyBhcyBJIGFtIGEgbWFqb3IgSDpMT1RTIGZhbiwgbWF5YmUgSSBsaWtlZCB0aGUgbW92aWUgbW9yZSB0aGFuIG5vcm1hbCBwZW9wbGUgd291bGQuIEhvd2V2ZXIsIHRoaXMgbW92aWUgaXMgc3RpbGwgZXhjZWxsZW50LiBJdCBoYWQgdG9ucyBvZiBzdXJwcmlzZXMsIGFuZCBpdCBnYXZlIHNvbWUgbW9yZSBjbG9zdXJlIHRvIHRoZSBzZXJpZXMuIFdoaWxlIEkgd2FzIHNhZCB0aGF0IEJheWxpc3MgdHVybmVkIGludG8gYSBtdXJkZXJlciwgdGhlIG92ZXJhbGwgZmVlbGluZyBJIGZlbHQgd2FzIHNhdGlzZmllZC4pAAAAAAAAAEAKji4I7gIQ7gIi/C0qIFNvbWUgc3BvaWxlcnMgKjxiciAvPjxiciAvPlRoaXMgbW92aWUgaXMgc29tZXRpbWVzIHN1YnRpdGxlZCAiTGlmZSBFdmVybGFzdGluZy4iIFRoYXQncyBvZnRlbiB0YWtlbiBhcyByZWZlcmVuY2UgdG8gdGhlIGZpbmFsIHNjZW5lLCBidXQgbW9yZSBhY2N1cmF0ZWx5IGRlc2NyaWJlcyBob3cgZGVhZCBhbmQgYnVyaWVkIHRoaXMgb25jZS1lc3RpbWFibGUgc2VyaWVzIGlzIGFmdGVyIHRoaXMgc2xvcHB5IGFuZCBpbGxvZ2ljYWwgc2VuZC1vZmYuPGJyIC8+PGJyIC8+VGhlcmUncyBhICJoZXkga2lkcywgbGV0J3MgcHV0IG9uIGEgc2hvdyBhaXIiIGFib3V0IHRoaXMgdGVsZW1vdmllLCB3aGljaCBjYW4gYmUgZW5kZWFyaW5nIGluIHNwb3RzLiBTb21lIGZhbnMgd2lsbCBmZWVsIGxpa2UgaW5zaWRlcnMgYXMgdGhleSBlbmpveSBwaWNraW5nIG91dCBhbGwgdGhlIHZhcmlvdXMgY2FtZW8gYXBwZWFyYW5jZXMuIENvLXdyaXRlciwgY28tcHJvZHVjZXIgVG9tIEZvbnRhbmEgYW5kIGhpcyBwYWxzIHBhY2sgdGhlIGdvaW5ncy1vbiB3aXRoIGZyaWVuZHMgYW5kIGZhdm9yaXRlcyBmcm9tIG90aGVyIHNob3dzLCBhcyB3ZWxsIGFzIHJlYWwgQmFsdGltb3JlIHBlcnNvbmFnZXMuPGJyIC8+PGJyIC8+VGhhdCdzIG9uIHRvcCBvZiB0aGUgcmV0dXJucyBvZiB2aXJ0dWFsbHkgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSB0ZWxldmlzaW9uJ3Mgc2hvdyB2YXJpZWQgY2FzdHMsIHlvdXIgb2xkIGZhdm9yaXRlcyBhcyB3ZWxsIGFzIGxhdGVyIG5vbi1mYXZvcml0ZXMuPGJyIC8+PGJyIC8+VGhlcmUgd2FzIGFsd2F5cyBhIHR1Zy1vZi13YXIgcGl0dGluZyBxdWFsaXR5LWNvbnNjaW91cyBleGVjdXRpdmUgcHJvZHVjZXIgQmFycnkgTGV2aW5zb24sIEZvbnRhbmEsIEphbWVzIFlvc2hpbXVyYSBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNyZWF0aXZlIHRlYW0gYWdhaW5zdCBidWRnZXQtY29uc2Npb3VzIE5CQyBleGVjcywgd2hvIHNpbXBseSB3YW50ZWQgYSBhbm90aGVyIG1vcm9uaWMgcG9saWNlIHByb2NlZHVyYWwgbGlrZSAiTmFzaCBCcmlkZ2VzLCIgd2hpY2ggcmVndWxhcmx5IGJlYXQgIkhvbWljaWRlIiBpbiB0aGUgcmF0aW5ncy4gVGhlIHByZXNzdXJlIHRvbGQgYXMgdGhlIHNob3cgYm91bmNlZCBiZXR3ZWVuIHJpdmV0aW5nIHJlYWxpc20gdGhhdCB0cmFuc2NlbmRlZCBpdHMgZm9ybSwgYW5kIHNsZWF6eSBzZW5zYXRpb25hbGlzbSB0aGF0IGRlbWVhbmVkIGl0LjxiciAvPjxiciAvPlVuZm9ydHVuYXRlbHkgZm9yIHRoaXMgbW92aWUsIEZvbnRhbmEsIGNvLXdyaXRlcnMgWW9zaGltdXJhIGFuZCBFcmljIE92ZXJtZXllciBhbmQgZGlyZWN0b3IgSmVhbiBkZSBTZWdvbnphYyBzaW1wbHkgdGhyZXcgaW4gdGhlIHRvd2VsLiBUaGV5IHRvb2sgdGhlIG1vc3QgbHVkaWNyb3VzIHN0b3J5IGFyZSBmcm9tIHRoZSBzZXJpZXMsIHRvcHBlZCBpdCB3aXRoIGFuIHVubGlrZWx5IGFuZCBhcnRpc3RpY2FsbHkgdW5mcnVpdGZ1bCBuZXcgcGxvdCBsaW5lLCBhbmQgbGFpZCB0aGUgYnVyZGVuIG9mIGNhcnJ5aW5nIHRoZSB3aG9sZSBtZXNzIG9uIG9uZSBvZiB0aGUgd2Vha2VyIGNhc3QgbWVtYmVycy48YnIgLz48YnIgLz5CcmllZmx5LCBzb21lIHRpbWUgaGFzIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCBlcGlzb2RlIG9mIHRoZSBzaG93LiBUaGUgZm9ybWVyIGhlYXJ0IG9mIEJhbHRpbW9yZSdzIGhvbWljaWRlIHVuaXQsIFlhcGhldCBLb3R0byBhcyBMdC4gQWwgR2lhcmRlbGxvLCBpcyBub3cgYSBLdXJ0IFNjaG1va2UtbGlrZSBjYW5kaWRhdGUgZm9yIG1heW9yLCBhbmQgU2NobW9rZSBoaW1zZWxmIG1ha2VzIGEgY2FtZW8gYXBwZWFyYW5jZS4gQnV0IHRoaXMgcHJvbWlzaW5nIHN0YXJ0IGltbWVkaWF0ZWx5IGFuZCBpbXByb2JhYmx5IHRha2VzIGEgdHJhZ2ljIHR1cm4uPGJyIC8+PGJyIC8+VGhlIHNwb3RsaWdodCBzaGlmdHMgdG8gR2lhbmNhcmxvIEVzcG9zaXRvIGFzIEdpYXJkZWxsbydzIHNvbiBNaWtlLiBBIGhhbmRzb21lIG1hbiB3aG8gaGFzIGRvbmUgZ29vZCB3b3JrIGVsc2V3aGVyZSwgRXNwb3NpdG8gd2FzIG9uZSBvZiB0aGUgcHJldHR5IGZhY2VzIGJyb3VnaHQgaW4gbGF0ZSB0byBzdXBwb3NlZGx5IGVubGl2ZW4gdGhlIFRWIHNlcmllcy4gQnV0IHRoZSBxdWVzdGlvbiBmb3Igdmlld2VycyBhbHdheXMgd2FzOiBpcyBNaWtlIHRoYXQgdW5jb21mb3J0YWJsZSBhcyBHZWUncyBzb24sIG9yIGlzIEVzcG9zaXRvIHRoYXQgdW5jb21mb3J0YWJsZSBpbiB0aGUgcm9sZT88YnIgLz48YnIgLz5UbyBiZSBmYWlyLCBFc3Bvc2l0byBkb2Vzbid0IGdldCBhIGNoYW5jZSB0byBwbGF5IG91dCB0aGUgbWFpbiBzdG9yeSB3aXRob3V0IGludGVycnVwdGlvbi4gVGhhdCdzIGJlY2F1c2UgdGhlIHdyaXRlcnMgY2hvb3NlIHRoaXMgbW9tZW50IHRvIHJldml2ZSBhbm90aGVyIHN0b3J5bGluZSB0aGF0IHNwYXQgb24gdGhlIGludGVsbGlnZW5jZSBvZiB0aGUgc2hvdydzIGxveWFsIHZvdGVycy48YnIgLz48YnIgLz5BbiBhcHBhcmVudCBzbnVmZiBzdHJlYW1pbmcgdmlkZW8gd2FzIHByb21vdGVkLCBhbmQgdGhlbiBzZWVtZWQgdG8gYWN0dWFsbHkgdGFrZSBwbGFjZSwgb24gdGhlIEludGVybmV0LiBBZnRlciBzb21lIHJlZCBoZXJyaW5ncywgdGhlIGRldGVjdGl2ZXMgYXJyZXN0ZWQgYSByZXBlbGxlbnQgc3VzcGVjdC4gQnV0IFphbGprbyBJdmFuZWsncyBoYXJhc3NlZCBhbmQgb3ZlcndvcmtlZCBEZXB1dHkgU3RhdGVzIEF0dG9ybmV5IGZvcmdvdCB0byBmaWxlIG1vdGlvbnMgaW4gdGltZSwgYW5kIHRoZSBzdXNwZWN0IHdhcyByZWxlYXNlZCwgb25seSB0byBiZSBtdXJkZXJlZCBsYXRlci48YnIgLz48YnIgLz5MZXQncyBzdW1tYXJpemU6IGhlIGZvcmdvdCB0byBmaWxlIHRoZSBwYXBlcndvcmsgYmVjYXVzZSBpdCB3YXNuJ3QgdGhlIG1vc3Qgc2Vuc2F0aW9uYWwgY2FzZSBvZiBoaXMgY2FyZWVyLCBiZWNhdXNlIHRoZSBtYXlvciwgdGhlIGF0dG9ybmV5IGdlbmVyYWwsIHRoZSBnb3Zlcm5vciwgdGhlIGVudGlyZSBNYXJ5bGFuZCBMZWdpc2xhdHVyZSwgdGhlIFUuUy4gQXR0b3JuZXkgR2VuZXJhbCwgTkJDLCBDb3VydCBUViwgdGhlIEJCQywgQVAsIFJldXRlcnMsIFBlb3BsZSwgVGhlIFN1biwgdGhlIFdhc2hpbmd0b24gUG9zdCwgdGhlIE5ldyBZb3JrIFRpbWVzLCB0aGUgTEEgVGltZXMsIFRpbWUgTWFnYXppbmUsIFRoZSBUaW1lcyBvZiBMb25kb24sIFRoZSBFY29ub21pc3QsIFRoZSBKb2hhbm5lc2J1cmcgTWFpbCBhbmQgR3VhcmRpYW4sIEwnT3NzZXJ2YXRvcmUgUm9tYW5vLCBMZSBGaWdhcm8sIFBhcmlzIE1hdGNoLCBMJ0VxdWlwZSBhbmQgQ29tcHV0ZXIgV29ybGQgd2VyZW4ndCBjYWxsaW5nIGV2ZXJ5IDEwIG1pbnV0ZXMgdG8gYXNrIGFib3V0IHRoZSBzdGF0dXMgb2YgdGhlIGNhc2UuPGJyIC8+PGJyIC8+TmV2ZXJ0aGVsZXNzLCB0aGUgb2xkIGdhbmcgb2YgZGV0ZWN0aXZlcyBhbmQgYXNzb2NpYXRlcyBmbG9ja3MgYmFjayB0byBCYWx0aW1vcmUgdG8gaGVscCBvdXQuIFRoZXJlJ3MgcXVpdGUgYW4gYXJyYXkgb2YgdGFsZW50IG9uIGRpc3BsYXkuIFVuZm9ydHVuYXRlbHksIHdpdGggdGhlIGxpbWl0ZWQgYW1vdW50IG9mIGRpYWxvZ3VlIHRvIGhhbmQgb3V0LCBzb21lIG9mIHRoZW0gYXJlIG1lcmVseSBvbiBkaXNwbGF5LjxiciAvPjxiciAvPlR3byBvZiB0aGUgc3Ryb25nZXN0IGFjdG9ycywgQ2xhcmsgSm9obnNvbiBhbmQgTWVsaXNzYSBMZW8sIGFyZSBjcmltaW5hbGx5IHVuZGVydXNlZCwgd2hpbGUgdGltZSB3YXN0ZWQgb24gSm9uIFNlZGEgYW5kIE1pY2hhZWwgTWljaGVsbGUgY291bGQgYmUgYmV0dGVyIHNwZW50IG9uIGNvbW1lcmNpYWxzLiBUaGUgd3JpdGVycyBkbyBzZWVtIHRvIHNhdGlyaXplIHRoaXMsIHByZXNlbnRpbmcgSmFzb24gUHJpZXN0bGV5IGFzIHRoZSBsYXRlc3QgYmlnLWRlYWwgZGV0ZWN0aXZlLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhleSBnaXZlIGVhc3ktY29tZSwgZWFzeS1nbyBNaWNoZWxsZSBGb3JiZXMgYSB2ZXJ5IGFmZmVjdGluZyBzY2VuZS48YnIgLz48YnIgLz5UaGVyZSdzIHNvbWUgb3RoZXIgc2x5IGNhc3RpbmcsIHdpdGggYWN0dWFsIEx0LiBHYXJ5IEQnQWRkYXJpbywgdGhlIGNlbnRlciBvZiB0aGUgYm9vayB0aGF0IGdhdmUgcmlzZSB0byB0aGUgc2hvdywgcGxheWluZyBhbm90aGVyIGRldGVjdGl2ZS4gR3Vlc3RzIGRyb3AgaW4gZnJvbSBvdGhlciBzaG93cywgbGlrZSBXaGl0bmV5IEFsbGVuIGRvaW5nIGhlciBkZWFkcGFuIGFuZCBjbHVlbGVzcyAiTWlzcyBTYWxseSIgZnJvbSB0aGUgY2hpbGRyZW4ncyBzaG93IGJlbG92ZWQgYnkgdGhlIGlubWF0ZXMgb24gRm9udGFuYSdzICJPei4iIERpbmEgTmFwb2xpIG9mIFdCQUwgVFYgdHVybnMgdXAgYXMgaGVyc2VsZi4gPGJyIC8+PGJyIC8+RXZlbiB3aGVuIGVudGVydGFpbmluZywgdGhvdWdoLCB0aGVzZSBndWVzdHMgY2FuIGJlIGRpc3RyYWN0aW5nLiBFZCBCZWdsZXkgSnIuIGFjdHVhbGx5IGFkdmFuY2VzIHRoZSBzdG9yeSBpbiBoaXMgYnJpZWYgYXBwZWFyYW5jZSwgcGxheWluZyBEci4gVmljdG9yIEVocmxpY2ggZnJvbSBGb250YW5hJ3MgIlN0LiBFbHNld2hlcmUuIiBIZSdzIHN0aWxsIGEgdml2aWQgY2hhcmFjdGVyLCBhbmQgZml0cyBpbiBhIGhvc3BpdGFsIHNldHRpbmcuIFRoZW4geW91IHJlbWVtYmVyLCBkaWRuJ3QgU3QuIEVsZWdpdXMgdHVybiBvdXQgdG8gYmUgYW4gYXV0aXN0aWMgYm95J3MgZmFudGFzeT88YnIgLz48YnIgLz5UaGUgbW9zdCB1c2VmdWwgY2FtZW8gcmVmbGVjdHMgY29ycG9yYXRlIHN5bmVyZ3kuIFRoaXMgbW92aWUgd2FzIG1hZGUgd2hlbiBDb3VydCBUViBib3VnaHQgcmUtcnVuIHJpZ2h0cyB0byB0aGUgc2VyaWVzLiBUaGF0IG5ldHdvcmsgY29udHJpYnV0ZWQgbGVnYWwgd2FpZiBIZWxlbiBMdWNhaXRpcywgd2hvIGhhZCBpbnRlcnZpZXdlZCB0aGUgSG9taWNpZGUgdGVhbSBhbmQgbGF0ZXIgYXBwZWFyZWQgb24gIk96LiIgVGhlIFRWIGNvcnJlc3BvbmRlbnQgZG9lcyBhbiBlZmZpY2llbnQgam9iIHN1bW1hcml6aW5nIHRoZSBuZXdzLCB0aGF0IGlzLCBwbG90IHBvaW50cyBmb3IgbGF0ZWNvbWVycy48YnIgLz48YnIgLz5BbHRob3VnaCBzaGUncyBzbyB0aGluIHRoYXQgc2hlIGRpc2FwcGVhcnMgd2hlbiBzaGUgdHVybnMgc2lkZXdheXMsIEx1Y2FpdGlzIGFsc28gYWRlcHRseSBoYW5kbGVzIGEgYml0IG9mIHBoeXNpY2FsIGNvbWVkeSB3aXRoIEVzcG9zaXRvLiBIZSBzaG93cyBtb3JlIGp1aWNlIGluIGhpcyBzY2VuZXMgd2l0aCBMdWNhaXRpcyB0aGFuIHdpdGggYW55IG9mIGhpcyB1c3VhbCBjb2xsZWFndWVzLiBQZXJoYXBzIHRob3NlIHR3byBzaG91bGQgaGF2ZSBkb25lIGEgc3Bpbi1vZmYuPGJyIC8+PGJyIC8+QXMgdGhlIG1vdmllIHdpbmRzIGRvd24sIHRoZSBjcmVhbSBvZiB0aGUgY2FzdCByaXNlcyB0byB0aGUgdG9wLiBBbHRob3VnaCB0aGV5IGFyZSBzYWRkbGVkIHdpdGggYSBsb3NlciBzY3JpcHQsIEFuZHJlIEJyYXVnaGVyIGFuZCBLeWxlIFNlY29yIG92ZXJjb21lIGl0LiBUaGVpciBwZXJmb3JtYW5jZXMgcmVtaW5kIHZpZXdlcnMgd2hhdCBtYWRlIEhvbWljaWRlLCBmb3IgY29uc2lkZXJhYmxlIHN0cmV0Y2hlcywgdGhlIGJlc3Qgc2hvdyBvbiB0aGUgYWlyIGFuZCBvbmUgb2YgdGhlIGJlc3QgdGVsZXZpc2lvbiBwcm9kdWN0aW9ucyBldmVyLjxiciAvPjxiciAvPkl0J3MgZnVuIHRvIHdhdGNoIHRvcCBwcm9zIGRvIHRoZWlyIHN0dWZmOyBpdCdzIGp1c3QgYSBzaGFtZSB0aGlzIG1vdmllIGRvZXNuJ3QgZ2l2ZSB0aGVtIG1vcmUgb2YgYSBjaGFuY2UuIERpZS1oYXJkIGZhbnMgbWF5IHdhbnQgdG8gc2VlIHRoaXMgbW92aWUgYW55d2F5LCBidXQgeW91IGNhbiBsaXZlIHdpdGhvdXQgaXQuKQAAAAAAAABACuYSCO8CEO8CItQSKFRoaXMgaXMgYSByZXZpZXcgb2YgdGhlIGxhdGVyIEVuZ2xpc2ggcmVsZWFzZSBieSBEaXNuZXksIGZlYXR1cmluZyBBbGlzb24gTG9obWFuLCBQYXRyaWNrIFN0ZXdhcnQsIGFuZCBjby4pIDxiciAvPjxiciAvPkkgcmVhbGx5IHdhbnRlZCB0aGlzIGZpbG0gdG8gYmUgZ29vZC4gUmVhbGx5LCByZWFsbHkuIEknbSBhIGh1Z2UgZmFuIG9mIFByaW5jZXNzIE1vbm9ub2tlIGFuZCBTcGlyaXRlZCBBd2F5LCBhbmQgYWZ0ZXIgc2VlaW5nIGFsbCB0aGUgZ2xvd2luZyByZXZpZXdzIG9uIHRoaXMgZWFybGllciBNaXlhemFraSBmaWxtLCBJIHdhcyBlYWdlciB0byBzZWUgaXQuIEJ1dCBJIHdhcyBzaG9ja2VkLCBzaG9ja2VkIEkgc2F5LCBhdCB0aGUgcXVhbGl0eSBvZiB0aGlzIGZpbG0uIFRob3NlIGxhdGVyIGZpbG1zIGJvYXN0IHdlbGwtY3JhZnRlZCBwbG90cywgMy1kaW1lbnNpb25hbCBjaGFyYWN0ZXJzLCBhbmQgdGhlIGJlc3QgZmlsbSBtdXNpYyBzaW5jZS4uLndlbGwuLi5ldmVyLiBUaGlzIGZpbG0ganVzdCBkb2Vzbid0IGNvbWUgY2xvc2UuPGJyIC8+PGJyIC8+TWlnaHQgYXMgd2VsbCBzdGFydCB3LyB0aGUgcG9zaXRpdmUgYXNwZWN0cywgdGhvdWdoLiBMaWtlIGFsbCBNaXlhemFraSBmaWxtcywgdGhpcyBvbmUgaXMgc3RpbGwgdmVyeSBpbWFnaW5hdGl2ZSwgd2l0aCBhIGJpemFycmUgZmFudGFzeS9zY2ktZmkgc2V0dGluZywgaW4gYSBwb3N0LWFwb2NhbHlwdGljIHdvcmxkIHdoZXJlIGluc2VjdHMgYXJlIHRoZSBkb21pbmFudCBzcGVjaWVzLiBOYXVzaWNhYSBjYW4gYWxzbyBib2FzdCBzb21lIGZhciBzdXBlcmlvciBhbmltYXRpb24gdG8gb3RoZXIgZmlsbXMgZnJvbSBpdHMgdGltZS4gKHRob3VnaCBub3QgYXMgYmVhdXRpZnVsIGFuZCBmbHVpZCBhcyBNaXlhemFraSdzIGxhdGVyIGZpbG1zKSBBbmQgdGhlIEVuZ2xpc2ggdm9pY2UgYWN0aW5nIGlzIHF1aXRlIHdlbGwgZG9uZS48YnIgLz48YnIgLz5CdXQgdGhpcyBmaWxtLi4uanVzdC4uLmlzbid0Li4uZ29vZC4uLiBUaGUgY2hhcmFjdGVycyBhcmUgYWxsIGNhcmRib2FyZCAtIGZyb20gc2FjY2hhcmluZSBzd2VldCBsaXR0bGUgTmF1c2ljYWEsIHRvIHRoZSBydXRobGVzc2x5IGV2aWwgVG9sbWVraWFucywgdG8gZXZlcnlvbmUgaW4gYmV0d2Vlbi4gT25jZSB5b3UndmUgc2VlbiBlYWNoIG9mIHRoZW0gZm9yIDMwIHNlY29uZHMsIHlvdSd2ZSBzZWVuIGFsbCB0aGVyZSBpcy4gQW5kIHRoZSBmYWN0IHRoYXQgdGhlIHBsb3QganVzdCBhbWJsZXMgYWxvbmcgZG9lc24ndCBoZWxwLjxiciAvPjxiciAvPlRoZW4gdGhlcmUncyB0aGUgbXVzaWMuLi4gTm93LCBIaXNhaWNoaSBpcyBoYW5kcyBkb3duIG15IGZhdm9yaXRlIGZpbG0gY29tcG9zZXIsIGJ1dCBOYXVzaWNhYSBkb2Vzbid0IGRvIGhpbSBqdXN0aWNlLiBIYWxmIHRoZSBtdXNpYyBpcyA4MCdzIGtleWJvYXJkcyBvbiBvdmVyZHJpdmUsIGFuZCBpdCB1c3VhbGx5IGVudGVycyBhbmQgbGVhdmVzIHNvIGFicnVwdGx5IHRoYXQgaXQgZGlzdHJhY3RzIHRoZSB2aXN1YWxzIHJhdGhlciB0aGFuIGhlbHBpbmcgdGhlbS4gSSBoaWdobHkgc3VzcGVjdCB0aGF0IEhpc2FpY2hpIHdhcyB0b2xkIHRvIGNvbXBvc2UgYSBsb3Qgb2YgdGhlIG11c2ljIGJlZm9yZSBoZSBldmVuIHNhdyB0aGUgcGljdHVyZS48YnIgLz48YnIgLz5CdXQgd2FpdCEgVGhlcmUncyBhIGdyZWF0IG1lc3NhZ2Ugd2l0aCB0aGlzIGZpbG0sIHJpZ2h0PyEgTGV0J3MgYWxsIHNhdmUgdGhlIGVudmlyb25tZW50ISBUb28gYmFkIHRoYXQgdGhpcyBmaWxtIGhpdHMgeW91IG92ZXIgdGhlIGhlYWQgd2l0aCBpdCBsaWtlIGEgc2xlZGdlaGFtbWVyLiBUaGVyZSBpcyBhIHNjZW5lIGluIHdoaWNoIE5hdXNpY2FhIGh1Z3MgYSB0cmVlLiBObywgcmVhbGx5LiBJIGFpbid0IGtpZGRpbmcuPGJyIC8+PGJyIC8+SXQgbWFrZXMgbWUgYSBsaXR0bGUgc2FkIHRvIHRhbGsgYWJvdXQgaG93IGxhbWUgdGhpcyBmaWxtIGlzLiBCdXQgZm9yIHNvbWUgcmVhc29uIGFsbCB0aGUgb3RoZXIgcmV2aWV3cyBvbiBJTURiIHNlZW0gdG8gYWRvcmUgaXQuIEFuZCB3aGVuIHRoZSBjaGFyYWN0ZXJzIGhhdmUgdG8gdGFsayB0byB0aGVtc2VsdmVzIGluIGV4dGVuZGVkIHNlbnRlbmNlcyB0byB0ZWxsIHlvdSB3aGF0J3MgZ29pbmcgb24sIHRoYXQncyBsYW1lLjxiciAvPjxiciAvPklmIHlvdSdyZSB0aGUga2luZCBvZiBwZXJzb24gd2hvIHdvcnNoaXBzIGFuaW1lLCBlbmpveXMgODAncyBtdXNpYywgYW5kIHBsYW50cyBhIHRyZWUgZXZlcnkgQXJib3IgZGF5LCB5b3Ugd2lsbCBwcm9iYWJseSBsaWtlIHRoaXMgZmlsbS4gT3RoZXJ3aXNlLCBzYXZlIHlvdXIgbW9uZXkgZm9yIGhpcyBsYXRlciBmaWxtcywgYmVjYXVzZSB0aGV5IHJvY2sgYmlnIHRpbWUuKQAAAAAAAABACoQICPACEPACIvIHKFNwb2lsZXJzKTxiciAvPjxiciAvPk9oIHN1cmUgaXQncyBiYXNlZCBvbiBNb2J5IERpY2suIFRvdGFsbHkgb2JzZXNzZWQgYW5kIGl0IGRlc3Ryb3kncyBoaW0uIEl0J3MgYSB0b3RhbCBmb2xseS4gVGhlIG1vdmllIHN0YXJ0cyBvZmYgcmF0aGVyIHdlbGwsIGJ1dCBieSB0aGUgZW5kIG9mIHRoZSBmaWxtLCBldmVyeW9uZSBlbHNlIGlzIGRlc3Ryb3llZCBhbmQgdGhlIG1haW4gc3RhcidzIG1pbmQgaXMgYSBibGFuay48YnIgLz48YnIgLz5UaGUgc3VwcG9zZWQgaGFsZiBzaXN0ZXIgaXMgbmV2ZXIgY29udmluY2luZy4gU29tZSB2ZXJ5IHBvb3IgbGlnaHRpbmcgZWZmZWN0cy4gTXVzaWMgaXMgaW50ZXJlc3RpbmcuIEJ1dCBsaXR0bGUgZWxzZS4gSXQgdG9vayBtZSBvdmVyIGEgbW9udGggdG8gZmluYWxseSBmaW5pc2ggdGhlIGRhcm4gdGhpbmcuIEkgc3VwcG9zZSBpZiB5b3UgbGlrZSBCZWluZyBKb2huIE1hbGtvdmljaCwgeW91IG1pZ2h0IGxpa2UgdGhpcy4gQnV0IHdoZXJlIGFzIEJKTSB3YXMgYSBncmVhdCBtb3ZpZSB0aGF0IEkganVzdCBkaWRuJ3Qgd2FudCB0byB3YXRjaCBhZ2FpbiwgUG9sYSBYIGlzIGEgbW92aWUgSSBqdXN0IGhhdGUgdG8gaGlnaCBoZWxsLiBUaGUgb25seSBwb3NzaWJsZSBleGNpdGVtZW50IGluIHRoZSBmaWxtIGlzIHRoZSBncmF0dWF0aW91cyBpbmNlc3Qgc2V4dWFsIHNjZW5lIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgZmlsbS4gKEhvcGVmdWxseSB5ZXIgbm90IHRoaW5raW5nIG9mIENhdGhlcmluZSBlaXRoZXIuKTxiciAvPjxiciAvPlRoaXMgbW92aWUgaXMgc2V2ZXJlbHkgYm9yaW5nLCBkZXByZXNzaW5nLCBhbmQgcG9vcmx5IGRpcmVjdGVkLiBOb3QgaGlnaGx5IHJlY29tbWVuZGVkLiBJZiBpZiB5b3UgbGlrZSBmcmVuY2ggbW92aWVzLiAoZ28gd2F0Y2ggQ3JpbXNvbiBSaXZlcnMgaW5zdGVhZCk8YnIgLz48YnIgLz40LzEwPGJyIC8+PGJyIC8+UXVhbGl0eTogNS8xMCBFbnRlcnRhaW5tZW50OiAxLzEwIFJlcGxheWFibGU6IDAvMTApAAAAAAAAAEAK4wcI8QIQ8QIi0QcnRGVhZCBMZXR0ZXIgT2ZmaWNlJyBpcyBhIGxvdy1idWRnZXQgZmlsbSBhYm91dCBhIGNvdXBsZSBvZiBlbXBsb3llZXMgb2YgdGhlIEF1c3RyYWxpYW4gcG9zdGFsIHNlcnZpY2UsIHN0cnVnZ2xpbmcgdG8gcmVidWlsZCB0aGVpciBkYW1hZ2VkIGxpdmVzLiBVbmZvcnR1bmF0ZWx5LCB0aGUgYWN0aW5nIGlzIHBvb3IgYW5kIHRoZSBsaW5rcyBiZXR3ZWVuIHRoZSBjaGFyYWN0ZXJzJyBwYXN0IG1pc2ZvcnR1bmVzIGFuZCBwcmVzZW50IG1pbmRzZXRzIGFyZSBjbHVtc2lseSBhbmQgb3Zlci1zY2hlbWF0aWNhbGx5IHJlcHJlc2VudGVkLiBXaGF0J3MgbW9zdCBkaXNhcHBvaW50aW5nIG9mIGFsbCwgaG93ZXZlciwgaXMgdGhlIHBvcnRyYXlhbCBpcyBsaWZlIGluIHRoZSBvZmZpY2Ugb2YgdGhlIGZpbG0ncyB0aXRsZTogdGhlcmUncyBubyBtZWNoYW5pc2F0aW9uIHdoYXRzb2V2ZXIsIGFuZCBpdCdzIHF1aXRlIGltcG9zc2libGUgdG8gYXNjZXJ0YWluIHdoYXQgYW55IG9mIHRoZSBzdGFmZiByZWFsbHkgZG8gZm9yIGEgbGl2aW5nLiBHcmFudGVkLCBwYXJ0IG9mIHRoZSBwbG90IGlzIHRoYXQgdGhlIG9mZmljZSBpcyB0aHJlYXRlbmVkIHdpdGggY2xvc3VyZSwgYnV0IHRoaXMgc29ydCBvZiBvZmZpY2Ugc3VyZWx5IGNsb3NlZCBpbiB0aGUgMTkzMHMsIGlmIGl0IGV2ZXIgdHJ1bHkgZXhpc3RlZC4gSXQncyBhIHNoYW1lLCBhcyB0aGUgZmlsbSdzIG92ZXJhbGwgdG9uZSBpcyBwb2lnbmFudCBhbmQgd3J5LCBhbmQgdGhlcmUncyBzb21lIHByb21pc2UgaW4gdGhlIHNjZW5hcmlvOiBidXQgZmV3IG9mIHRoZSBkZXRhaWxzIGNvbnZpbmNlLiBPdmVyYWxsLCBpdCBmZWVscyB0aGUgd29yayBvZiBzb21lb25lIHdobyBoYXNuJ3QgYWN0dWFsbHkgZXhwZXJpZW5jZWQgbXVjaCBvZiByZWFsIGxpZmU7IGEgc3R1ZGVudCBmaWxtLCB3aXRoIGEgY29uY2VwdCBhbmQgYW4gb3V0bGluZSwgYnV0IHNhZGx5IGxpdHRsZSBlbHNlLikAAAAAAAAAQAqXDgjyAhDyAiKFDiJXaXRjaGVyeSIgbWlnaHQganVzdCBiZSB0aGUgbW9zdCBpbmNvaGVyZW50IGFuZCBsYW1lbnRhYmx5IHNjcmlwdGVkIGhvcnJvciBtb3ZpZSBvZiB0aGUgODAncyBidXQsIGx1Y2tpbHkgZW5vdWdoLCBpdCBoYXMgYSBmZXcgY29tcGVuc2F0aW5nIHF1YWxpdGllcyBsaWtlIGZhbnRhc3RpYyBnb3JlIGVmZmVjdHMsIGFuIGV4aGlsYXJhdGluZyBtdXNpY2FsIHNjb3JlIGFuZCBzb21lIHRlcnJpZmljIGNhc3RpbmcgY2hvaWNlcy4gSG9uZXN0bHkgdGhlIHNjcmVlbnBsYXkgZG9lc24ndCBtYWtlIG9uZSBpb3RhIG9mIHNlbnNlLCBidXQgd2hvIGNhcmVzIHdoZW4gTGluZGEgQmxhaXIgKHdpdGggYW4gZXhwbG9kZWQgaGFpcnN0eWxlKSBwb3J0cmF5cyB5ZXQgYW5vdGhlciBnaXJsIHBvc3Nlc3NlZCBieSBldmlsIHBvd2VycyBhbmQgRGF2aWQgSGFzc2VsaG9mIGRlcGljdHMgYSBodW5reSBwaG90b2dyYXBoZXIgKHdobyBjYW4ndCBzZWVtIHRvIGdldCBsYWlkKSBpbiBhIG1vdmllIHRoYXQgY29uc3RhbnRseSBmZWF0dXJlcyBibG9vZHkgdm9vZG9vLCBzZXduLXNodXQgbGlwcywgdXBzaWRlIGRvd24gY3J1Y2lmaXhpb25zLCB2aWNpb3VzIGJ1cm5pbmdzIGFuZCBhbiBvdmVydXNlZCBidXQgZ2VudWluZWx5IGNyZWVweSB0dW5lLiBFaWdodCByYW5kb20gcGVvcGxlIGFyZSBnYXRoZXJlZCB0b2dldGhlciBvbiBhbiBhYmFuZG9uZWQgdmFjYXRpb24gcmVzb3J0IGlzbGFuZCBvZmYgdGhlIGNvYXN0IG9mIE1hc3NhY2h1c2V0dHMuIFRoZSB5b3VuZyBjb3VwbGUgaXMgdGhlcmUgdG8gaW52ZXN0aWdhdGUgdGhlIHBsYWNlJ3MgZGFyayBoaXN0b3J5OyB0aGUgZHlzZnVuY3Rpb25hbCBmYW1pbHkgKHdpdGggYSBwcmVnbmFudCBMaW5kYSBCbGFpciBldmVuIHRob3VnaCBub2JvZHkgc2VlbXMgdG8gYm90aGVyIGFib3V0IHdobyB0aGUgZmF0aGVyIGlzIGFuZCB3aGF0IGhpcyB3aGVyZWFib3V0cyBhcmUpIGNvbnNpZGVycyByZS1vcGVuaW5nIHRoZSBob3RlbCBhbmQgdGhlIHl1bW15IGZlbWFsZSBhcmNoaXRlY3Qgc2ltcGx5IHRhZ2dlZCBhbG9uZyBmb3IgY2FzdWFsIHNleC4gVGhleSdyZSBmb3JjZWQgdG8gc3RheSB0aGUgbmlnaHQgaW4gdGhlIHJhbXNoYWNrbGUgaG90ZWwgYW5kIHRoZW4gc3VkZGVubHkgdGhlIHByZXZpb3VzIGxhbmRsYWR5IMKWIGFuIGFnaW5nIGFjdHJlc3Mgb3Igc29tZXRoaW5nIHdobyBhbHdheXMgZHJlc3NlcyBpbiBibGFjayDCliBzdGFydHMgdGFraW5nIHRoZW0gb3V0IGluIHZhcmlvdXMgZW5ncm9zc2luZyB3YXlzLiBFdmVyeXRoaW5nIGlzIHNvbWVob3cgcmVsYXRlZCB0byB0aGUgaW50cm8gc2VxdWVuY2Ugc2hvd2luZyBhIHdvbWFuIGFjY3VzZWQgb2Ygd2l0Y2hlcnkganVtcCBvdXQgb2YgYSB3aW5kb3cuIEFueXdheSwgdGhlIHBsb3QgaXMgZGVmaW5pdGVseSBvZiBtaW5vciBpbXBvcnRhbmNlIGluIGFuIEl0YWxpYW4gaG9ycm9yIGZyYW5jaGlzZSB0aGF0IHN0YXJ0ZWQgYXMgYW4gdW5vZmZpY2lhbCBzcGluLW9mZiBvZiAiVGhlIEV2aWwgRGVhZCIuIFRoZSBhdG1vc3BoZXJlIGlzIG9jY2FzaW9uYWxseSB1bnNldHRsaW5nIGFuZCB0aGUgbWFrZS11cCBlZmZlY3RzIGFyZSB1bmRvdWJ0ZWRseSB0aGUgbW9zdCBzdXBlcmlvciBlbGVtZW50IG9mIHRoZSBlbnRpcmUgZmlsbS4gVGhlcmUncyBzb21ldGhpbmcgc3VwcmVtZWx5IG1vcmJpZCBhbmQgdW5zZXR0bGluZyBhYm91dCBzdGFyaW5nIGF0IGEgZGVmZW5zZWxlc3Mgd29tYW4gaGFuZ2luZyB1cHNpZGUgZG93biBhIGNoaW1uZXkgYW5kIHdhaXRpbmcgdG8gZ2V0IGZyaWVkLikAAAAAAAAAQArREQjzAhDzAiK/ESJUaHJlZSIgaXMgYSBzZXJpb3VzbHkgZHVtYiBzaGlwd3JlY2sgbW92aWUuIE1hc3F1ZXJhZGluZyBhcyBhIHBzeWNob2xvZ2ljYWwgdGhyaWxsZXIsIGl0J3MgY2xvc2VzdCByZWxhdGl2ZSBpcyB0aGUgbW9udW1lbnRhbGx5IHN1cGVyaW9yICJEZWFkIENhbG0iIChhbHNvIGZlYXR1cmluZyBCaWxseSBaYW5lKS4gIkRlYWQgQ2FsbSIgcHJvdmlkZWQgd2VsbCBkcmF3biBjaGFyYWN0ZXJzIHRvIHJvb3QgZm9yIGluIHRoZSBmb3JtIG9mIFNhbSBOZWlsIGFuZCBOaWNvbGUgS2lkbWFuJ3MgZ3JpZXZpbmcgcGFyZW50cyBhdHRlbXB0aW5nIHRvIHJlLWRlZmluZSB0aGVpciByZWxhdGlvbnNoaXAgb24gYW4gb2NlYW4gY3J1aXNlLiBUaGV5IGVuZCB1cCBiZWluZyB0ZXJyb3Jpc2VkIGJ5IFphbmUncyBhZHJpZnQgcHN5Y2hvLWtpbGxlci4gSXQgcHJvdmlkZWQgc2hhcnAsIGluY3JlYXNpbmdseSByYXRjaGV0ZWQgc3VzcGVuc2UsIGEgc2NhcnkgZmVlbGluZyBvZiBjbGF1c3Ryb3Bob2JpYSBpbiBvcGVuIHNlYXMgYXMgdGhlIGNhdCBhbmQgbW91c2UgZ2FtZSBvZiBsaWZlIGFuZCBkZWF0aCB1bmZvbGRlZC48YnIgLz48YnIgLz4iVGhyZWUiIHN1ZmZlcnMgZnJvbSBwb29ybHkgZHJhd24gY2hhcmFjdGVyaXNhdGlvbiAodGhlIGF1ZGllbmNlIGRvZXNuJ3QgY2FyZSB3aGF0IGhhcHBlbnMgdG8gYW55IG9mIHRoZW0pLCBhIHN0dXBpZCBhbmQgdW5uZWNlc3Nhcnkgdm9vZG9vIHBsb3QgZGV2aWNlLCBhIHRvdGFsIGxhY2sgb2Ygc3VzcGVuc2Ugb3IgZXhjaXRlbWVudCBhbmQgc29tZSB0aHVkZGluZywgaGFtbXkgcGVyZm9ybWFuY2VzIGZyb20gdGhlIHByaW5jaXBhbCBwbGF5ZXJzLiBaYW5lIGluIHBhcnRpY3VsYXIgZ29lcyB3YXkgb3ZlciB0aGUgdG9wIGluIGFuIGlycml0YXRpbmdseSBtYW5uZXJlZCBmYXNoaW9uLiBJbiAiRGVhZCBDYWxtIiBoZSB3YXMgbWVuYWNpbmcsIHdpcmVkIGFuZCBzZWV0aGluZyB3aXRoIGJhcmVseSBjb250cm9sbGVkIHNleHVhbCB2aW9sZW5jZS4gSGVyZSBoZSBpcyBib21iYXN0aWMsIHBldHVsYW50IHNsaW15LCBhbmQgdW5yYXZlbGxlZC4gQW5kIHdoZXJlIGRvZXMgaGUgZ2V0IGhpcyBzZWVtaW5nbHkgaW5leGhhdXN0aWJsZSBzdXBwbHkgb2YgZHJ5IGNpZ2FyZXR0ZXMgYW5kIGNpZ2Fycz8gQW5kIGhvdyBjb21lIGhpcyBsaWdodGVyIHN0YXlzIGZ1bGwgb2YganVpY2UgZm9yIG92ZXIgYSB5ZWFyPyBNcyBCcm9vayBpcyB2ZXJ5IHBpY3R1cmVzcXVlLCBzdHVubmluZ2x5IHByZXR0eSwgYnV0IGJvdGggaGVyIGNoZXN0IGFuZCByZWFyIGFwcGVhciB0byBoYXZlIGJlZW4gd2lsZGx5IG92ZXItaW5mbGF0ZWQgYnkgc29tZSBzb3J0IG9mIGxpZmUtcmFmdCBwdW1wLiBUaGV5IGRvLCBob3dldmVyLCBzdWNjZWVkIGluIGFjdGluZyB3aXRoIG1vcmUgc2tpbGwgYW5kIGNvbnZpY3Rpb24gdGhhbiB0aGUgcmVzdCBvZiBoZXIuIERyYW1hdGljIGFjdHJlc3MsIGluIHRoZSBwdXJlc3Qgc2Vuc2Ugb2YgdGhlIHRlcm0sIHNoZSBpcyBub3QuIFRoZSBndXkgcGxheWluZyB0aGUgdm9vZG9vLWhleGVkIE1hbnVlbCwgdGhlIHRoaXJkIGNvbXBvbmVudCBvZiB0aGlzIHNvcnJ5IHRyaWFuZ2xlLCBjb3VsZCBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgYSBsdW1wIG9mIGRyaWZ0d29vZCAtIG5vIG9uZSB3b3VsZCBub3RpY2UuIEluIGZhY3QsIGp1ZGdpbmcgYnkgaGlzIGNvbXBsZXRlIGxhY2sgb2YgYWJpbGl0eSB0byBkZWxpdmVyIGRpYWxvZ3VlIGluIGFueSBtZWFuaW5nZnVsIG9yIGR5bmFtaWMgd2F5LCBkcmlmdHdvb2QgcmVwcmVzZW50cyBhIHBvdGVudGlhbCBpbXByb3ZlbWVudCBpbiB0aGUgY2FzdGluZyBzdGFrZXMgKGV4Y3VzZSBwdW4pLjxiciAvPjxiciAvPlBsdXMgc2lkZXM6IHRoZSBzY2VuZXJ5IGlzIG5pY2UgYW5kIHRoZSBjaW5lbWF0b2dyYXBoeSAoYWJvdmUgYW5kIGJlbG93IHRoZSB3YXRlcikgaXMgY3JlZGlibGUuPGJyIC8+PGJyIC8+SSdtIGd1ZXNzaW5nIHRoaXMgaGFkIGEgdmVyeSBsaW1pdGVkIChpZiBhbnkpIHRoZWF0cmljYWwgcmVsZWFzZSBvciB3ZW50IHN0cmFpZ2h0IHRvIHJlbnRhbCBhbmQgcmV0YWlsIERWRC4gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyBpdCdzIG5vdCB2ZXJ5IGdvb2QuIElmIHlvdSB3YW50IHNvbWV0aGluZyBkZWNlbnQgYWxvbmcgdGhlc2UgbGluZXMsIGdldCAiRGVhZCBDYWxtLiIgSXQgd2FzIG1hZGUgYnkgcGVvcGxlIHdobyBrbmV3IGEgYml0IGFib3V0IGNpbmVtYS4pAAAAAAAAAEAK+QUI9AIQ9AIi5wUiR28gRmlzaCIgZ2FybmVyZWQgUm9zZSBUcm9jaGUgcmlnaHRseSBvciB3cm9uZ2x5IHRoZSByZXB1dGF0aW9uIG9mIGEgZmlsbSBtYWtlciB3aXRoIG11Y2ggcHJvbWlzZS48YnIgLz48YnIgLz5JdHMgdGhlbiBoYXJkIHRvIHVuZGVyc3RhbmQgaG93IHNoZSBjb3VsZCB0dXJuIG91dCBhIG1vdmllIG1hZGUgdXAgb2Ygc3RlcmVvdHlwZXMgdGhhdCBvbmUgYXNzb2NpYXRlcyB3aXRoIGluZmVyaW9yIHNpdGNvbXMuIFRoZSBlbnRpcmUgZmlsbSByaW5ncyBob2xsb3cuIEkgY3JpbmdlZCB0aGUgd2hvbGUgd2F5IHRocm91Z2guPGJyIC8+PGJyIC8+SXRzIHN1cHBvc2VkIHRvIGJlIGEgbG9vayBpbnRvIG5pbmV0aWVzIGh1bWFuIHNleHVhbGl0eS4gV2VsbCBub3QgbXVjaCBtb3JlIGhlcmUgdG8gYmUgbGVhcm5lZCB0aGFuIGZyb20gIkluIGFuZCBPdXQiLiBCeSBub3cgbW9zdCBvZiB1cyBhY3R1YWxseSBkbyBrbm93LCB0aGF0IHRoZXJlIGFyZSBtZW4gd2hvIGFyZSBzZXh1YWxseSBhdHRyYWN0ZWQgdG8gd29tZW4gYW5kIHRoZXJlIG1lbiB3aG8gYXJlIHNleHVhbGx5IGF0dHJhY3RlZCB0byBtZW4gYW5kIHRoZXJlIGFyZSBldmVuIG1lbiBzZXh1YWxseSBhdHRyYWN0ZWQgdG8gYm90aCBzZXhlcy4gPGJyIC8+PGJyIC8+U2VsZG9tIGhhcyB0aGlzIHJldmVsYXRpb24gYmVlbiBwb3J0cmF5ZWQgb24gdGhlIHNjcmVlbiB3aXRoIHNvIGxpdHRsZSB3aXQgYW5kIHN0eWxlLjxiciAvPjxiciAvPlBhdGhldGljLikAAAAAAAAAQAq8BQj1AhD1AiKqBcO9IHRow71uayB1emFrIMO9cyB0aGUgb25lIG9mIHRoZSBiZXN0IGZpbG1zIG9mIGFsbCB0aW1lcyBhbmQgZXZlcnlib2R5IG11c3QgcmVhbGl6ZSB0aGlzIG1vdmllLkkgbSBhIFR1cmtpc2ggYm95IGFuZCBhIGJpZyBjaW5lbWEgZnVuLiBhbmQgaW4gdGhpcyBkYXlzIG91ciBjaW5lbWEgaW5kdXN0cnkgaXMgaGlnaGluZyB1cC5BbmQgVVpBSyBpcyB0aGUgYmVzdCBUdXJraXNoIGZpbG0gb2YgbGFzdCB0ZW4geWVhcnMuYW5kIG1heWJlIG9uZSBvZiB0aGUgYmVzdCBmaWxtcyBvZiBhbGwgdGltZXMuZGlyZWN0b3IgbnVyaSBiaWxnZSBjZXlsYW4gaXMgcXVpdGUgYW1hemluZy50ZWxsaW5nIHN0b3J5LGNoYXJhY3RlcnMsYXRtb3NwaGVyZSBpcyB3b25kZXJmdWwuaGUgaXMgYSBtaW5pbWFsaXN0IGRpcmVjdG9yIGFuZCB0ZWxscyBhYm91dCByb3V0aW5lIGV2ZW50IGZhbWlseSxkcmVhbXMsZXhwZWN0cyxsaWZlLnRlbGxzIGFib3V0IHlvdSAsdGVsbHMgYWJvdXQgbWUsdGVsbHMgYWJvdXQgdXMuSSBwcm9taXNlIHlvdSB3aWxsIGZpbmQgYSBwaWVjZSBvZiB5b3VyIGJvZHkgaW4gdGhpcyBtb3ZpZS5jaW5lbWEgbGlmZSB3ZWxjb21lcyBhIG5ldyBkaXJlY3Rvci5oZSBpcyB3YWl0aW5nIHRvIHJlYWxpemUuSSBwcm9taXNlIHlvIHlvdSB3aWxsIGxvdmUgdGhpcyBtb3ZpZSBwbGVhc2Ugd2F0Y2ggaXQpAAAAAAAA8D8K2QUI9gIQ9gIixwXCoMKgwqDCoEZpbG0gYXV0ZXVyIFN0ZXBoYW4gV29sb3N6Y3p1ayBleHBsb3JlcyB0aGUgZGVwdGhzIG9mIGxvdmUsIHBhc3Npb24sIGFuZCBicm90aGVyaG9vZCBhbmQgdGhlIGRldmFzdGF0aW5nIHJlc3VsdHMgb2YgbG9zcyBpbiBoaXMgbGF0ZXN0IGZpbG0gQkxJTkRTUE9ULjxiciAvPjxiciAvPkJMSU5EU1BPVCdTIGRpZWdldGljIHdvcmxkIGlzIGV4cGxvZGluZyB3aXRoIHN1c3BlbnNlIGFuZCB0YWtlcyB0aGUgYXVkaWVuY2Ugb24gYSB0d2lzdGluZyDCoGpvdXJuZXkgdG8gdGhlIGNvcmUgb2YgdGhlIGh1bWFuIHNvdWwuIMKgQXMgYSBkaXJlY3RvciwgaGUgbWFuYWdlcyB0byBkcmF3IHRoZSBodW1hbiBzcGlyaXQgZnJvbSB0aGUgcGVyZm9ybWFuY2VzIG9mIGhpcyBhY3RvcnMuIMKgwqBXaXRoIHN1cGVyYiBlZGl0aW5nLCBlc3BlY2lhbGx5IGluIHRoZSBmbGFzaGJhY2sgc2NlbmVzIGFuZCBiZWF1dGlmdWwgY2luZW1hdG9ncmFwaHksIEJMSU5EU1BPVCBpcyBhIHRob3VnaHQgcHJvdm9raW5nIHN1c3BlbnNlIGZyb20gYmVnaW5uaW5nIHRvIGVuZC4gwqBBIHRocmlsbGVyIHdoaWNoIGxlYXZlcyBtdWNoIHRvIHRoZSBtaW5kcycgZXllLjxiciAvPjxiciAvPldoYXQgYW4gwqBhc3RvdW5kaW5nIGFjY29tcGxpc2htZW50IGZvciBTdGVwaGFuIFdvbG9zemN6dWsuPGJyIC8+PGJyIC8+wqAgQ2hlZXJzIFN0ZXBoYW4hIEFuZ2VsYSBTYW5kZXIpAAAAAAAA8D8KpgoI9wIQ9wIilAp+fkkgd2FzIGFibGUgdG8gc2VlIHRoaXMgbW92aWUgeWVzdGVyZGF5IG1vcm5pbmcgb24gYSBlYXJseSB2aWV3aW5nIHBhc3N+fjxiciAvPjxiciAvPkkgYW0gYSBtb20gb2YgMiBjaGlsZHJlbiwgd2hvIHJhbmdlIGZyb20gMTEgZG93biB0byA2LiBTbyBJJ20gc3VyZSBwbGVudHkgb2YgcGFyZW50cyBjYW4gcmVsYXRlIHRvIGhhdmluZyB0byBzZWUgbWFueSBtYW55ICJraWRzIiBtb3ZpZXMuIFRoaXMgd2FzIHJlZnJlc2hpbmcgZm9yIG1lLiBJIGhhdmVuJ3QgcmVhZCB0aGlzIHBhcnRpY3VsYXIgYm9vaywgc28gSSBkb24ndCBrbm93IGlmIGl0IHN0YXllZCB0cnVlIHRvIHRoZSBib29rIG9yIG5vdC4gQnV0IGl0IHN1cmUgdG9vayB0aGUgZ3Jvc3NuZXNzIGZhY3RvciB0byBhIGhpZ2ggbGV2ZWwuIFRoaXMgaXMgdGhlIHN0b3J5IG9mIHRoZSAibmV3IiBraWQgaW4gdG93biBhbmQgaXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhlcmUgYXJlIGEgZ3JvdXAgb2YgYm95cyB3aG8gaGF2ZSBmb3JtZWQgYSBjbHViIG9mIHNvcnRzIGFuZCBsb3ZlIHRvIHBpY2sgb24ga2lkcyAuLi4uc291bmQgZmFtaWxpYXI/IEhhdmVuJ3Qgd2UgYWxsIHN1ZmZlcmVkIHRoaXMgb25lIHRpbWUgb3IgYW5vdGhlci4gSGUgaGFzIHRoZSBsaXR0bGUgYnJvdGhlciB3aG8gaGUgY2FudCBzdGFuZCBhbmQgcGFyZW50cyB0aGF0IGhlIGlzIGVtYmFycmFzc2VkIGFib3V0LiBXaGF0IEkgZW5qb3llZCBtb3N0IG9mIGFsbCB3YXMgc2VlaW5nIGhvdyBlYWNoIGNoYXJhY3RlciB3YXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSBhbm90aGVyIHRoZXkgYWxsIHN0b29kIG91dC4gVGhlIGJ1bGx5ICh3aHkgZG8gdGhleSBhbHdheXMgbWFrZSB0aGUgYnVsbHkgYSByZWQgaGVhZD8gTXkgZGF1Z2h0ZXIgaGFzIHJlZCBoYWlyISBhbmQgc2hlIGlzIG5vIGJ1bGx5IS4ubG9sKSBpcyB3ZWxsIGEgZ3JlYXQgYnVsbHksIHdobyBmaW5kcyBoaW1zZWxmIGJlaW5nIHllbGxlZCBhdCBieSBoaXMgb3duIGJpZyBicm90aGVyLiBJdCB0b29rIHR3aXN0cyBhbmQgdHVybnMgYW5kIHdlbGwgeW91IGZhbGwgaW4gbG92ZSB3aXRoIGFsbCBvZiB0aGVtIGFuZCByZWFsbHkgZmluZCB5b3Vyc2VsZiByb3V0aW5nIGZvciBhbGwgdGhlIGNoYXJhY3RlcnMhIEV2ZW4gdGhlIHBhcmVudHMsIGdyZWF0IGNvbm5lY3Rpb24gYmV0d2VlbiBmYXRoZXIgYW5kIHNvbi4gQWxsIGFyb3VuZCBlbmpveWFibGUsIHN3ZWV0LGZ1bm55LCBncm9zcyBldGMuLi4uLi5UYWtlIHlvdXIga2lkcyEhISBZb3Ugd2lsbCBlbmpveSBpdCBhcyBtdWNoIGFzIHRoZXkgZG8hKQAAAAAAAPA/CrsPCPgCEPgCIqkPe3JhbnQgc3RhcnR9IEkgZGlkbid0IHdhbnQgdG8gYmVsaWV2ZSB0aGVtIGF0IGZpcnN0LCBidXQgSSBndWVzcyB0aGlzIGlzIHdoYXQgcGVvcGxlIGFyZSB0YWxraW5nIGFib3V0IHdoZW4gdGhleSBzYXkgU291dGggS29yZWFuIGNpbmVtYSBoYXMgcGVha2VkIGFuZCBtYXkgZXZlbiBiZSBnb2luZyBkb3duaGlsbC4gQWZ0ZXIgdGhlIHN1cnByaXNpbmdseSBmdW4gYW5kIG1vdmluZyBtb25zdGVyIG1vdmllICJHd29lbXVsIiAoYWthICJUaGUgSG9zdCIpIG9mIDIwMDYtLSB3aGljaCBhY3R1YWxseSBzdWNjZWVkZWQgaW4gbWFraW5nIGEgc2hhcnAgc2F0aXJlIG91dCBvZiBhIEItbW92aWUgZ2VucmUtLSBzdWNjZXNzaXZlIEtvcmVhbiBibG9ja2J1c3RlcnMgaGF2ZSBiZWNvbWUgbW9yZSBhbmQgbW9yZSBnZW5lcmljLCBldmVuIHRob3VnaCB0aGVpciBidWRnZXRzIChtYWlubHkgc3BlbnQgb24gc3BlY2lhbCBlZmZlY3RzKSBoYXZlIGJlY29tZSBtb3JlIGFuZCBtb3JlIGZhbnRhc3RpYy4gRG8gU291dGggS29yZWFuIG1vdmllLW1ha2VycyByZWFsbHkgd2FudCB0byBzcXVhbmRlciBhbGwgdGhlIGF1ZGllbmNlIGFuZCBpbnZlc3RvciBnb29kd2lsbCwgd2hpY2ggdGhlaXIgaW5kdXN0cnkgaGFzIGJ1aWx0IHVwIHNpbmNlIHRoZSAxOTk5IGJyZWFrLW91dCBmaWxtICJTaGlyaS9Td2lyaSIsIGJ5IG1ha2luZyBhIHdob2xlIHNlcmllcyBvZiBiaWcgYnVkZ2V0IG1lZGlvY3JlIG1vdmllcyBsaWtlIG1haW5sYW5kIENoaW5hIGRpZD8ge3JhbnQgZW5kfTxiciAvPjxiciAvPlRoZSBvbmx5ICJyZWFzb24iIEkgY2FuIGZhdGhvbSBmb3IgbWFraW5nIHRoaXMgbW92aWUgaXMgdG8gZHVwZSB0aGUgaW52ZXN0b3JzIGludG8gZmluYW5jaW5nIHRoZSBtb3N0IGRldGFpbGVkIGFuZCBmbHVpZCBkaWdpdGFsIGFuaW1hdGlvbiBvZiBhIEtvcmVhbi8gRWFzdCBBc2lhbi1zdHlsZWQgZHJhZ29uIEkgaGF2ZSBzZWVuIHRvIGRhdGUsIGZvciB0aGUgZmluYWwgc2NlbmVzLiBOb3cgaWYgdGhleSBoYWQgaW50cm9kdWNlZCB0aGF0IGRyYWdvbiBhdCB0aGUgYmVnaW5uaW5nIGFuZCBnaXZlbiBpdCBtb3JlIHBlcnNvbmFsaXR5IGFuZCBwdXJwb3NlIGxpa2UgaW4gdGhlIDE5OTYgIkRyYWdvbmhlYXJ0IiwgdGhlIG1vdmllIG1pZ2h0IGhhdmUgaGFkIGEgZmV3IG1vcmUgcmVkZWVtaW5nIHF1YWxpdGllcyBvdGhlciB0aGFuIGhhdmluZyBsb3RzIG9mIGRpZ2l0YWxseSBhbmltYXRlZCBkcmFnb25zLiBSZW1lbWJlciAiRHVuZ2VvbnMgJiBEcmFnb25zIiBpbiAyMDAwPyBIYXNuJ3QgYW55b25lIGxlYXJudCB0aGF0IHRoZSB0cmljayBpcyBub3QgaG93IE1VQ0ggc3BlY2lhbCBlZmZlY3RzIHlvdSB1c2UsIGJ1dCBob3cgV0VMTCB5b3UgdXNlIGl0PyBJIGhvcGUgdGhlcmUgYXJlIG1vcmUgKGFuZCBiZXR0ZXIpIEtvcmVhbiBsZWdlbmRzIHRoZXkgY2FuIHVzZSwgYmVjYXVzZSB0aGV5IGhhdmUganVzdCBraWxsZWQgYSBsb3Qgb2YgaW50ZXJuYXRpb25hbCBpbnRlcmVzdCBpbiBLb3JlYW4gZHJhZ29uIGxlZ2VuZHMgd2l0aCB0aGUgd2F5IHRoZXkgZmlsbWVkIHRoaXMgb25lLjxiciAvPjxiciAvPkluIHNob3J0LCBJIGFncmVlIHdpdGggYWxsIHRoZSBuZWdhdGl2ZSByZXZpZXdzIGdvbmUgYmVmb3JlIGFuZCB3b25kZXIgaG93IEtvcmVhbnMgZmVsdCBhYm91dCBoYXZpbmcgdGhlaXIgZm9sayBhbnRoZW0gIkFyaXJhbmciIGJlaW5nIHBsYXllZCBhdCB0aGUgdmVyeSBlbmQuIEFzIGEgY3JlYXR1cmUgZmVhdHVyZSwgSSB3b3VsZCBoYXZlIGdpdmVuIGl0IGF0IGxlYXN0IDUgc3RhcnMgb3V0IG9mIDEwIGlmIHRoZSBzcGVjaWFsIGVmZmVjdHMgb3IgYWN0aW9uIHNlcXVlbmNlcyBoYWQgYmVlbiB3b3J0aCBpdCwgYnV0IEkndmUgc2VlbiBtYW55IHZpZGVvIGdhbWVzIHdpdGggYmV0dGVyIGNhbWVyYSB3b3JrIGFuZCBzY3JpcHRpbmcgKGp1c3QgbGVzcyBkcmFnb25zKS4pAAAAAAAA8D8KxR8I+QIQ+QIisx97UG9zc2libGUgc3BvaWxlcnMgY29taW5nIHVwLi4uIHlvdSd2ZSBiZWVuIGZvcmV3YXJuZWQufTxiciAvPjxiciAvPlRoaXMgaXMgYWJzb2x1dGVseSBvbmUgb2YgbXkgYWxsIHRpbWUgZmF2b3JpdGUgbXVzaWNhbHMgYW5kIG1vdmllIG11c2ljYWxzISAoVGhlIG90aGVyIGlzIERhbW4gWWFua2VlcyB3aXRoIEd3ZW4gVmVyZG9uLCBUYWIgSHVudGVyIGFuZCBSYXkgV2Fsc3RvbikgQXMgd2UgYWxsIGtub3csIHNvbWV0aW1lcyB0aGUgbHVzdGVyIChub3QgdG8gbWVudGlvbiB0aGUgc29uZ3MpIG9mIGEgc2hvdyBhcmUgbG9zdCBpbiBpdHMgdHJhbnNpdGlvbiBmcm9tIHN0YWdlIHRvIHNjcmVlbi4gVGhpcyBpcywgZm9yIHRoZSBtb3N0IHBhcnQsIERFRklOSVRFTFkgbm90IHRoZSBjYXNlIGhlcmUuPGJyIC8+PGJyIC8+VGhlIHNldHMgYXJlIGRpdmluZSwgYnJpZ2h0IGFuZCBjb2xvcmZ1bCwgdGhlIGNoYXJhY3RlcnMgYXJlIGJpZ2dlciB0aGFuIGxpZmUgYW5kIHlvdSBjYW4ndCBoZWxwIGJ1dCBsb3ZlIHRoZW0sIGFuZCBNaWNoYWVsIEtpZGQncyBjaG9yZW9ncmFwaHkgaXMgYWJzb2x1dGVseSBzdHVubmluZy4gKFNvIGdsYWQgdG8ga25vdyB0aGV5IHVzZWQgdGhlIG9yaWdpbmFsIEJyb2Fkd2F5IGNob3Jlb2dyYXBoZXIpPGJyIC8+PGJyIC8+QWxsIG9mIHRoZSBhY3RvcnMgImJvdW5jZSB0aGUgYmFsbCIgKHRoYXQgaXMsIGhhdmUgdW5iZWF0YWJsZSBjaGVtaXN0cnkpIHRvIHBlcmZlY3Rpb24gaW4gdGhpcyBmaWxtLiBGcmFuayBhbmQgTWFybG9uIGFyZSBhYnNvbHV0ZWx5IGJlbGlldmFibGUgYXMgdGhlIHByb3ByaWV0b3Igb2YgdGhlIG9sZGVzdCBlc3RhYmxpc2hlZCBwZXJtYW5lbnQgZmxvYXRpbmcgY3JhcCBnYW1lIGluIE5ldyBZb3JrLCBhbmQgdGhlIG1vc3Qgbm90b3Jpb3VzIGdhbWJsZXIgd2hvIGJldHMgb24gZXZlbiB0aGUgbW9zdCBtaW51dGUgdGhpbmdzLS0gc3VjaCBhcyBoaXMgZmV2ZXIgZ29pbmcgdXAgdG8gMTA0IGlmIGhlIGRvZXNuJ3QgdGFrZSBwZW5pY2lsbGluLiBTd2VldCwgZnJlc2ggZmFjZWQgSmVhbiBTaW1tb25zIGlzIHBlcmZlY3QgZm9yIHRoZSByb2xlIG9mIFNhcmFoIChhbHRob3VnaCBpdCBpcyB0cnVlLCBoZXIgc2luZ2luZyBwaXBlcyBhcmUgbm90IGFzIG91dHN0YW5kaW5nIGFzIHRoYXQgb2YgSXNhYmVsIEJpZ2xleSBvciBKb3NpZSBkZSBHdXptYW4pLS0gdGhlIG1pc3Npb24gZG9sbCB3aXRoIGEgaGVhcnQgb2YgZ29sZCBhbmQgYSBkcml2ZSB0byBoZWFsIGFsbC4gQW5kIGxhc3QgYnV0IGNlcnRhaW5seSBub3QgbGVhc3QgKG9uIG15IGxpc3QgYW55d2F5KSBpcyBNaXNzIFZpdmlhbiBCbGFpbmUsIHJlcHJpc2luZyBoZXIgQnJvYWR3YXkgcm9sZSBhcyBNaXNzIEFkZWxhaWRlLS0gdGhlIEhvdCBCb3ggbGVhZCBzaW5nZXIgYW5kIGRhbmNlciB3aG8gd291bGQgbGlrZSB0byBmaW5hbGx5IGVuZCBoZXIgMTQgeWVhciBlbmdhZ2VtZW50IHRvIE5hdGhhbiB3aXRoIG1hcnJpYWdlLCBhbmQgcmlkIGhlcnNlbGYgb2YgdGhlIHBzeWNob3NvbWF0aWMgY29sZCBoZSdzIGdpdmVuIGhlci48YnIgLz48YnIgLz5GaXJzdCBvZmYsIGt1ZG9zIHRvIFN0dWJieSBLYXllIGFuZCBCLlMuIFB1bGxleSBhcyB0aGV5IHJlcHJpc2UgdGhlaXIgQnJvYWR3YXkgcm9sZXMgYXMgTmljZWx5LU5pY2VseSBKb2huc29uIGFuZCBCZW5ueSBTb3V0aHN0cmVldC4gVGhlcmUgd2VyZSBuZXZlciB0d28gbW9yZSBsb3ZlYWJsZSBnYW1ibGVycyB0aGFuIHRoZXNlIGd1eXMuPGJyIC8+PGJyIC8+QnJhbmRvIGlzIHN1cGVyYiwgYXMgdXN1YWwsIGFuZCB0aG91Z2ggaGUncyBub3QgZ290IHRoZSB2b2ljZSBvZiBSb2JlcnQgQWxkYSBvciBQZXRlciBHYWxsYWdoZXIsIHlvdSBmb3JnZXQgaXQtLSBhcyBoZSBoYXMgdGhpcyBzZW5zZSBvZiBkZXRlcm1pbmF0aW9uIHRvIGJyaW5nIGFsbCBoZSBjYW4gdG8gaGlzIHJvbGUgYXMgU2t5IE1hc3RlcnNvbi4gIkx1Y2sgQmUgQSBMYWR5IiBnaXZlcyBtZSBjaGlsbHMgZXZlcnkgdGltZSBJIHNlZSBoaW0gcGVyZm9ybSB0aGUgbnVtYmVyLiBFc3BlY2lhbGx5IGVuam95YWJsZSBpcyBoZWFyaW5nIGhpbSBzYXkgIkRhZGR5Li4uIEkgZ290IGNpZGVyIGluIG15IGVhci4iPGJyIC8+PGJyIC8+U2ltbW9ucyBpcyBjaGFybWluZyBhbmQgcGxlYXNhbnQgaW4gYSByb2xlIHdlbGwgc3VpdGVkIHRvIGhlciBsb29rcywgdm9pY2UgYW5kIHRoZSB3YXkgc2hlIGNhcnJpZXMgaGVyc2VsZi4gWW91IGxvbmcgc28gZGVhcmx5IGZvciBoZXIgbm90IG9ubHkgdG8gd2luIFNreSAob3IsIHRvd2FyZCB0aGUgZW5kLCBiZWxpZXZlIGhpbSksIGJ1dCB0byBoZWxwIHBlb3BsZSBvdmVyY29tZSB0aGVpciBnYW1ibGluZywgZHJpbmtpbmcgYW5kIG90aGVyIHNpbnMsIGFuZCBsaXZlIGEgbGlmZSB3aXRoIEdvZC4gSGVyIHJlbmRpdGlvbiBvZiAiSWYgSSBXZXJlIEEgQmVsbCIgaXMgc3BsZW5kaWQsIHRvIHNheSB0aGUgbGVhc3QhPGJyIC8+PGJyIC8+U2luYXRyYSBpcyB0aGUgbWFuLiBIZSBpcyBzbyBwZXJmZWN0IGZvciB0aGUgcm9sZSBvZiBOYXRoYW4gRGV0cm9pdC0tIGFuZCBoZXJlIGhlIHNpbmdzIHBhcnRzIHRoYXQgU2FtIExldmVuZSBmcm9tIHRoZSBCcm9hZHdheSBjYXN0IG5ldmVyIGNvdWxkICh0ZXJyaWZpYyBhY3RvciwgYnV0IHRoZSBjaGFwIHdhcyB0b25lIGRlYWYuLi4gZ28gZmlndXJlKS4gSSByZWFsbHkgZW5qb3llZCB0aGUgYWRkaXRpb24gb2YgdGhlIHNvbmcgIkFkZWxhaWRlIi4uLiB3aXNoIHNvbWUgZ3V5IHdvdWxkIHNpbmcgbGlrZSB0aGF0IHRvIE1FLiBGcmFua2llJ3MgY29vbCwgc2xpY2sgZGVtZWFub3IgdHJhbnNjZW5kcyB0aGUgYm91bmRhcmllcyBvZiB0aGlzIG1vdmllLiBCdXQgbW9zdCBpbXBvcnRhbnRseSwgeW91IHdhbnQgaGltIHRvIG1hcnJ5IEFkZWxhaWRlLjxiciAvPjxiciAvPkFuZCBzcGVha2luZyBvZiBBZGVsYWlkZSwgVml2aWFuIEJsYWluZSBpcyBqdXN0IHNoZWVyIHBlcmZlY3Rpb24gaW4gdGhpcyByb2xlLiBGcm9tIHRoZSBhY2NlbnQgdG8gaGVyIGJlbHRpbmcgb3V0ICJBZGVsYWlkZSdzIExhbWVudCIsIHNoZSdzIGp1c3QgdGVycmlmaWMuIEFuZCBzaGUncyBhbHNvIG15IGZhdm9yaXRlIHBhcnQgb2YgdGhlIGVudGlyZSBtb3ZpZS4gU2hlIHJlYWxseSBtYWtlcyB5b3UgZmVlbCBmb3IgQWRlbGFpZGUuLi4gZXNwZWNpYWxseSB3aGVuIHNoZSBjcmllcyByaWdodCBiZWZvcmUgYW5kIHRoZW4gYWdhaW4gZHVyaW5nICJTdWUgTWUiLiBJIHN0aWxsIGhhdmVuJ3QgZGVjaWRlZCB3aGV0aGVyIEkgbGlrZSAiUGV0IE1lIFBvcHBhIiBiZXR0ZXIgdGhhbiAiQnVzaGVsIGFuZCBhIFBlY2siLi4uIG1heWJlIEkgbGlrZSB0aGVtIGVxdWFsbHkuIEVpdGhlciB3YXksIHNoZSBkb2VzIGZhbnRhc3RpYyB3aXRoIHRob3NlIGFzIHdlbGwgYXMgIlRha2UgQmFjayBZb3VyIE1pbmsuIiAoSSdtIHNhZCB0aGF0IHRoZXkgbGVmdCBvdXQgImhvbGxhbmRlcml6ZSIgZnJvbSB0aGUgZmlsbS4uLikgU2hlJ3MgYWJzb2x1dGVseSBNQVJWRUxPVVMsIG5vdCB0byBtZW50aW9uIGhpbGFyaW91cywgYW5kIG15IGZhdm9yaXRlIHBhcnQgb2YgdGhlIGVudGlyZSBmaWxtLjxiciAvPjxiciAvPk9uZSBvZiB0aGUgYmVzdCB0aGluZ3MgYWJvdXQgdGhpcyBtb3ZpZSBpcyB0aGVpciBsaW5nby4gSXQncyBhIG1peHR1cmUgb2YgaGlnaCBjbGFzcyBhbmQgc3RyZWV0IHNsYW5nLiBOZXZlciBkbyB0aGV5IHVzZSAiSXQncyIsICJJJ2xsIiBvciAiVGhhdCdzLiIgSXQncyBhbHdheXMgIkl0IGlzIiwgIkkgd2lsbCIgYW5kICJUaGF0IGlzLiIgT3ZlcmFsbCwgR3V5cyAmIERvbGxzIGlzIG9uZSBvZiBteSBmYXZvcml0ZSBhbGwgdGltZSBtb3ZpZXMgYW5kIG11c2ljYWxzLCBhbmQgaXQncyBvbmUgdGhhdCB5b3Ugc2hvdWxkIHRha2UgdGltZSB0byB3YXRjaCBldmVyeSB0aW1lIGl0IGNvbWVzIG9uLiBNeSBvbmx5IGNvbXBsYWludD8gTm8gIk1hcnJ5IFRoZSBNYW4gVG9kYXkuIiBOb3cgVEhBVCdTIGEgZ29vZCBzb25nLikAAAAAAADwPwqGCgj6AhD6AiL0CXplcm8gZGF5IGlzIGJhc2VkIG9mIGNvbHVtYmluZSBoaWdoIHNjaG9vbCBtYXNzYWNyZS4gYW5kIGl0cyBhIHZpZGVvIGRpYXJ5IG9mIHR3byBib3lzLiBhdCBmaXJzdCB5b3UgZG9uJ3Qga25vdyB3aGF0cyBnb2luZyB0byBoYXBwZW4geW91IHRoaW5rIGl0IGlzIGp1c3QgYSBiYWQgc3R1ZGVudCBmaWxtLiB1bnRpbCB0aGV5IHN0YXJ0IHRhbGtpbmcgYWJvdXQgdGhlIGhvcnJpYmxlIHRoaW5ncyB0aGV5IGFyZSBnb2luZyB0byBkbyBpbiB0aGlzIHF1aXRlIHNjaG9vbC4gdW50aWwgdGhleSBzdGFydCB0YWxraW5nIGFib3V0IHBpcGUgYm9tYnMgYW5kIGd1bnMgYW5kIGdvaW5nIHNob290aW5nIGluIHRoZSB3b29kcy4gdGhleSBpcyBhIGxvdCB0byBzYXkgYWJvdXQgdGhpcyBtb3ZpZS4gYWxsIGtub3cgdGhpcyBmaWxtIGlzIHdlbGwgYSBmaWxtIHlvdSBmb3JnZXQgeW91IHdhdGNoaW5nIGEgZmlsbSBhbmQgd2F0Y2hpbmcgYSByZWFsIHZpZGVvIHR3byBib3lzIG1hZGUuPGJyIC8+PGJyIC8+dGhlIHR3byBib3lzIGFjdCBsaWtlIHRoZXkgYXJlIGluIGEgd2VpcmQgY3VsdC4gdGhleSBidXJuIGFsbCB0aGVyZSBzdHVmZi4gbGlrZSBwbGF5IHN0YXRpb24gZ2FtZXMgYm9va3MgZHZkcyBob21ld29yayBzdHVmZiBzY2hvb2wgc3R1ZmYuIHRoZXNlIHR3byBib3lzIGNhbiBiZSBhbnlib2R5IHlvdXIgZnJpZW5kcyB5b3UgYnJvdGhlcnMgb3IgdGhlIHBlb3BsZSB5b3Ugc2VlIHdhbGtpbmcgZG93biB0aGUgc3RyZWV0LiBpdCBnb2VzIHRocm91Z2ggdGhlcmUgZGFpbHkgYWN0aXZlcyAoYW5kIHRoYXQgaXMgbWFraW5nIGEgZ3VuLiBpbiB0aGUgdmlkZW9zIHRoZXkgbWFrZSBpdCBtZW50aW9ucyB0aGUgYnVsbHlpbmcgdGhhdCBoYXBwZW5zIHRvIHRoZW0gYW5kIGhvdyBwZW9wbGUgc2FpZCBzdHVmZiBhYm91dCB0aGVyZSBjbG90aGVzIGFuZCB0aGUgdGhpbmdzIHlvdSBhcmUgaW50byBJJ20gbm90IHNheWluZyBpdHMgcmlnaHQgYnV0IG1hbnkgcGVvcGxlIGRvIGRvIHRoaW5ncyBsaWtlIHRoYXQuPGJyIC8+PGJyIC8+YW5kIGFsc28gdGhlIHRoaW5nIGlzIHdpdGggdGhpcyBwZW9wbGUgYXJlIHN1c3BlY3RlZCB0byBsaWtlIGl0IGJlY2F1c2Ugb2YgdGhlIHNlbnNpdGl2ZSB0b3BpYyB0aGV5IGhhdmUgY2hvc2VuIG9uIHRoaXMgZmlsbS48YnIgLz48YnIgLz5zbyB0aGF0cyBteSByZXZpZXcgb24gemVybyBkYXkuPGJyIC8+PGJyIC8+YW5kIGxldHMganVzdCBzYXkgdGhlIGVuZCBzaG9vdGluZyBzY2VuZSBpcyBtZXNzZWQgdXAuKQAAAAAAAPA/CpMFCPsCEPsCIoEFeW91IHdpbGwgbGlrZWx5IGJlIHNvcmVseSBkaXNhcHBvaW50ZWQgYnkgdGhpcyBzZXF1ZWwgdGhhdCdzIG5vdCBhIHNlcXVlbC5BV0lMIGlzIGEgY2xhc3NpYy5idXQgdGhpcyBtb3ZpZSBpcyBhYm91dCBhcyBmYXIgZnJvbSBiZWluZyBhIGNsYXNzaWMgYXMgeW91IGNhbiBnZXQud2hhdCBhIGpva2Uuc3BlY2lhbCBlZmZlY3RzIHRoYXQgYXJlbid0IHZlcnkgc3BlY2lhbCxob3JyaWJsZSBkaWFsb2d1ZSxub24gYWN0aW5nLmFuZCBhIGxhdWdoYWJseSByaWRpY3Vsb3VzIHN1YnBsb3QgcXVpY2tseSBhbmQgdW5jb252aW5jaW5nbHksKG5vdCB0byBtZW50aW9uIGZsZWV0aW5nKXRhY2tlZCBvbiB3aXRoIGFib3V0IGEgdGhpcmQgb2YgdGhlIG1vdmllIGxlZnQuZGlkIGkgbWVudGlvbiB0aGUgc3RvcnkgaXMgbGVzcyB0aGVuIGxhbWUudGhlcmUncyBubyB3YXkgdGhpcyB3YXMgc3VwcG9zZWQgdG8gYmUgc2VyaW91cyBob3Jyb3IgbW92aWUseWV0IGl0J3MgdG8gc3R1cGlkIHRvIGJlIGZ1bm55IGluIGFueSBnb29kIHdheS50aGUgcmF0aW5nIGl0IGN1cnJlbnRseSBoYXMoNC44LzEwKWlzIHRvbyBnZW5lcm91cyBpZiB5b3UgYXNrIG1lLm15IHJhdGluZyBmb3IgQW4gQW1lcmljYW4gV2VyZXdvbGYgaW4gUGFyaXM6YSAzLjUvMTApAAAAAAAA8D8KtgkI/AIQ/AIipAl5b3UgbXVzdCBiZSBzZWVpbmcgbXkgY29tbWVudHMgb3ZlciBtYW55IGZpbG1zIHVuZGVyIEV2cmVuIEJ1eXJ1ayAuLkkgYW0gb2ZmIHRvIG1ha2UgYW5vdGhlciBjb21tZW50IG92ZXIgYSBtb3ZpZSB0aGF0IGlzIG5vdCBldmVuIHdvcnRoIGEgbWludXRlIG9mIHRhbGtpbmcgdGhvdWdoLi5UaGlzIGZpbG0gaXMgYmFzaWNhbGx5IHR3byBob3VycyBvZiBEYWZvZSdzIGNoYXJhY3RlciBkcmlua2luZyBoaW1zZWxmIC0gbmVhcmx5IGxpdGVyYWxseSAtIHRvIGRlYXRoLiBUaGUgb25seSBzdXJwcmlzZSBpbiB0aGlzIGZpbG0gaXMgdGhhdCB5b3UgZGlkbid0IGhhdmUgZW5vdWdoIGNsdWVzIG9yIGNoYXJhY3RlciBrbm93bGVkZ2UgdG8gYmUgc3VycHJpc2VkLiBJdCB3YXMganVzdCBhIGdyaW0sIHNhZCB3YXN0ZSBvZiB0aW1lLjxiciAvPjxiciAvPldpbGxlbSBEYWZvZSBpcyBleGNlbGxlbnQgYWN0b3IuIFBldGVyIFN0b3JtYXJlIGlzIGFuIGV4Y2VsbGVudCBhY3Rvci4gQnV0IHRoaXMgZmlsbSBqdXN0IHN1Y2tlZC4gU2xvdyBkb2Vzbid0IG1ha2UgdGhlIG1vdmllIGJhZCwgaXQgd2FzIGp1c3QgYmFkLiBUaGUgc2tldGNoeSBwbG90IG1peGVkIHdpdGggYXJ0aXN0aWMgcmFtYmxpbmdzIG9mIGFuYW1vcnBoaWMgZGV0YWlsIGFyZW4ndCBjb2hlc2l2ZWx5IGRyYXduIHRvZ2V0aGVyIGluIGEgbWVhbmluZ2Z1bCB3YXkgZm9yIGEgcGxvdCBleGNlcHQgdG8gaGlnaGxpZ2h0IHNvbWUgZ29yZSB3aGljaCBpcyBpbGx1c3RyYXRlZCBmcm9tIHNldmVyYWwgcGVyc3BlY3RpdmVzLCBmaW5hbGx5IGF0IHRoZSBlbmQuIEkgcmVhbGx5IGFwcHJlY2lhdGUgdGhlIGFydGlzdGljIHZpc2lvbiwgYnV0IGFzIGVudGVydGFpbm1lbnQsIGl0IHB1dCBtZSB0byBzbGVlcC4gKFNlcmlvdXNseSwgSSBmZWxsIGFzbGVlcCBhbmQgaGFkIHRvIHJlLXdhdGNoIHRoZSBmaWxtIC0gd2hpY2ggd2FzIGV2ZW4gbW9yZSBkaXNhcHBvaW50aW5nLikgSSBnZW5lcmFsbHkgZG9uJ3QgbGlrZSB0byBtYWtlIG5lZ2F0aXZlIGNvbW1lbnRzIG9yIHJldmlld3Mgb24gdGhlIHdvcmtzIG9mIG90aGVycywgZXZlbiB3aGVuIHRoZXkgc3VjaywgYnV0IHRoaXMgZmlsbSB3YXJyYW50ZWQgb25lLiBJdCdzIGp1c3QgdG9vIGJhZCB0aGF0IHRoZXNlIGdyZWF0IGFjdG9ycyB3ZXJlIHNoYW1lZCB3aXRoIHRoaXMgZW5kIHJlc3VsdC4pAAAAAAAA8D8K/gcI/QIQ/QIi7Ad5b3Uga25vdywgaSBhbHdheXMgZmFuY3kgZGlzdHVyYmluZyBvciBzdHJhbmdlIG1vdmllcywgZXNwZWNpYWxseSB3aGVuIHRoZXkgZ2V0IHNob3duIGF0IHRoZSBmYW50YXN5IGZpbG0gZmVzdGl2YWwgaW4gaGFtYnVyZywgZ2VybWFueS4gYnV0IHN1YmNvbnNjaW91cyBjcnVlbHR5IHdhcyBwcm9iYWJseSB0aGUgd29yc3QgZmlsbSBpIHNhdyB0aGlzIHllYXIuIHdpbGwgdGhpcyBjb21tZW50IGNvbnRhaW4gYW55IHNwb2lsZXJzPzxiciAvPjxiciAvPm5vLCBiZWNhdXNlIGkganVzdCBkaWQgbm90IHVuZGVyc3RhbmQgdGhpcyBtb3ZpZS4gYnV0IHdlbGwsIHdoYXQgY2FuIHlvdSBleHBlY3QgZnJvbSBhIGZsaWNrIHRoYXQgd2FzIGludHJvZHVjZWQgdG8gYSBmZXN0aXZhbCBjcm93ZCAid2UgKHRoZSBndXlzIGZyb20gdGhlIGZlc3RpdmFsKSBrbm93IHRoYXQgbm90IGFsbCBvZiB5b3Ugd2lsbCB3YXRjaCB0aGlzIG9uZSB1bnRpbCB0aGUgdmVyeSBlbmQiLi4uPGJyIC8+PGJyIC8+aSBsaWtlIHNwbGF0dGVyIG1vdmllcyBhbmQgaSBhbHNvIGxpa2UgbW92aWVzIHdpdGggYSBzdHJvbmcgZ3JhcGhpY2FsIGxhbmd1YWdlLiBidXQgdGhpcz8gdGhlcmUgYXJlIGEgbG90IG9mIGJsb29keSBzY2VuZXMgaW4gdGhpcyBvbmUsIGJ1dCB3aHk/IHdoYXQgaXMgdGhlIGRpcmVjdG9yIHRyeWluZyB0byB0ZWxsIHVzPyBpcyBoZSBzYXlpbmcgdGhhdCB3ZSBsb3N0IGFsbCBtb3JhbGl0eSBhbmQgYWxsIHJlbGlnaW91cyBmZWVsaW5ncz8gb3IgaXMgaGUgc2F5aW5nIHRoYXQgaW5jZXN0IHdpbGwgYWx3YXlzIGVuZCBpbiBhIGRpc2FzdGVyPyB3aG8ga25vd3MgLSBpIGRvIG5vdC48YnIgLz48YnIgLz5pZiB5b3Ugd2FudCB0byB3YXRjaCBhIG1vdmllIHRoYXQga2VlcHMgeW91IHRoaW5raW5nIGZvciBxdWl0ZSBzb21lIHRpbWUgLSB3YXRjaCBpdC4gYnV0IGRvbsK0dCBleHBlY3QgdG8gdGhpbmsgIndvdywgaSBnb3QgdGhlIG1lc3NhZ2UiIC0gaSBkaWQgbm90IGdldCBpdC4uLikAAAAAAADwPwrTBgj+AhD+AiLBBnlvdSBrbm93IEkndmUgc2VlbiBhIGxvdCBvZiBjcmFwcHkgaG9uZyBrb25nIG1vdmllcyBpbiB0ZXJtcyBvZiBwcm9kdWN0aW9uIGFuZCB3ZXJlIGdvb2QuIEJ1dCBSdW5uaW5nIG91dCBvZiBUSW1lIHdhcyBncmVhdC48YnIgLz48YnIgLz5pIGd1ZXNzIHdoYXQgbWFkZSBpdCBzbyBnb29kIHdhcyB0aGUgZmFjdCB0aGF0IEFuZHkgTGF1IGFuZCBDaGluZyBXYW5nLCBoYXZlIHN1Y2ggZ3JlYXQgY2hlbWlzdHJ5LiBUaGUgZmlsbSBhdCBmaXJzdCBpcyByZWFsbHkgZmFzdCBwYWNlZCBidXQgc2xvd3MgZG93biBub3QgZW5vdWdoIHRvIGV2ZW4gbm90aWNlIHdoaWNoIGlzIGFsc28gZ29vZCwgd2UgZG9uJ3Qgd2FudCB0byBoYXZlIGEgaGVhcnQgYXR0YWNrLGxvbC4gSW4gdGVybXMgb2YgcGxvdCB0aGVpciBpcyBlbm91Z2ggb2Ygb3RoZXIgdGhpbmdzIGdvaW5nIG9uIHRvIGtlZXAgeW91IGludGVyZXN0ZWQuIExhdSBoYXMgc29tZSBwcmV0dHkgZ29vZCBtb21lbnRzIGFzIGhlIHVzZXMgbWFrZSB1cCB0byBpbXBlcnNvbmF0ZSBwZW9wbGUgZnJvbSB0aGUgdW5kZXJ3b3JsZC4gQWxzbyB0aGUgbW92aWUgaGFzIHRoZSBiZXN0IG9yaWVudGFsIHN1cHBvcnRpbmcgY2FzdCBzaW5jZSAiaG91c2Ugb2YgRmx5aW5nIERhZ2dlcnMiLjxiciAvPjxiciAvPlRoZSBtb3ZpZSBpcyBncmVhdCBiZWNhdXNlIGl0cyBzbyB1bnByZWRpY3RhYmxlIGFuZCBsZWF2ZXMgeW91IHdvbmRlcmluZyBhdCBldmVyeSBjb3JuZXIuIERlZmluaXRlbHkgYSBnb29kIHJlbnRhbCB3aXRoIHRvbnMgb2YgY29tZWR5LCBhY3Rpb24gYW5kIHRocmlsbHMgcGFjdCBpbiB0byBvbmUsIDggb3V0IG9mIDEwKQAAAAAAAPA/Cu4ECP8CEP8CItwEeW91IGhhdmUgbG92ZWQgVGhlIHNoYXdzaGFuayBSZWRlbXB0aW9uLCBQdWxwIEZpY3Rpb24sIFZlcnRpZ28sIE9sZGJveS4uLi4gQW5kIGkgZ3VhcmFudGVlIHlvdSB3aWxsIGxvdmUgdGhpcyBvbmUgbW9yZS4gaXRzIGEgYnJpbGxpYW50IHRocmlsbGVyLiBUaGUgc3RvcnkgaXMgc28gc2ltcGxlIHlldCBzbyBncmlwcGluZy4gaXQga2VlcHMgeW91IGF0IHRoZSBlZGdlIG9mIHlvdXIgc2VhdCB0aWxsIHRoZSBlbmQuIHRoZSBzbG93IG1vdmluZyBzY2VuZXMsIHNpbXBsZSBtdXNpYyBhZGRzIG1vcmUgcGVyZmVjdGlvbiB0byB0aGUgbW92aWUuIGl0cyBzbyBnZW51aW5lLiB0aGUgcGVyZm9ybWFuY2UgaXMgdG9wIGNsYXNzIHRoZSBkaXJlY3Rpb24gdGhlIHNlcXVlbmNlcy4uLnRoZXkgYXJlIHRvbyBwZXJmZWN0Li5pZiBpIGNvdWxkIGkgd291bGQgcGxhY2UgaXQgaW4gdG9wIDEwIHRocmlsbGVycyBldmVyIG1hZGUuIE1vc3QgZW50ZXJ0YWluaW5nIHRocmlsbGVyIGkgaGF2ZSBzZWVuIGluIGEgd2hpbGUuLi4gKioqKiovKioqKiogbXkgdm90ZSBoZWxwIG1lIG1vdmUgdGhpcyBtb3ZpZSB0byB0b3AgMjUwPGJyIC8+PGJyIC8+eW91IHdpbGwgbG92ZSBpdC4uLikAAAAAAADwPwrZBgiAAxCAAyLHBnlvdSBoYXZlIGEgc3Ryb25nIHN0b21hY2guIEhvbGRlbiB3YXMgYWN0dWFsbHkgNTUgeWVhcnMgb2xkIGF0IGZpbG1pbmcgYnV0IGxvb2tlZCBuZWFyIDcwIGFuZCBoZSBvbmx5IGxpdmVkIGFub3RoZXIgOCB5ZWFycy4gQXQgb25lIHBvaW50IEhvbGRlbiBzYWlkLCAiSSBhbSBvdmVyIHR3aWNlIHlvdXIgYWdlLiIgT2theSwgdHJ5IHRyaXBsZSBncmFuZHBhISBUaGUgIm9sZCBlbm91Z2ggdG8gYmUgeW91ciBmYXRoZXIiIHRoZW1lIHRoZXkgd2VyZSBzaG9vdGluZyBmb3IgZGlkbid0IHdvcmsuIEdyYW50ZWQgc2VuaW9yIGNpdGl6ZW5zIHNvbWV0aW1lcyB3aW5kIHVwIHdpdGggbGVnYWwgdGVlbnMuIE1vcmUgcG93ZXIgdG8gdGhlbSwgYnV0IHRoYXQgZG9lc24ndCBtZWFuIEkgd2FudCB0byB3YXRjaCBpdC4gSXQncyBub3QgYSBtYXR0ZXIgb2YganVkZ21lbnQgYnV0IHRoZSBkaWdlc3RpdmUgdHJhY2suIEkgbGlrZSBteSBmb29kIHdoZXJlIGl0IGJlbG9uZ3MuIExlbnogaXMgZnVuIHRvIHdhdGNoIGFuZCB0aGUgNzBzIGNhcnMsIGNsb3RoZXMsIGZ1cm5pdHVyZSwgZXRjLiBtYWtlIGl0IHdvcnRoIGl0IGlmIGl0IGNvbWVzIG9uIGNhYmxlIGxhdGUgYXQgbmlnaHQgYW5kIHlvdSB3YW50IHRvIHdhdGNoIHNvbWV0aGluZyB0byB3aW5kIGRvd24gZm9yIGJlZC4gSXQgd291bGQgaGF2ZSBiZWVuIG5pY2UgdG8gc2VlIHRoZSBibG9uZGUgZnJpZW5kIG9mIExlbnosIHRoZSBvbmUgd2hvIGhvY2tlZCBoZXIgZ3VpdGFyLCBnZXQgbW9yZSBzY2VuZXMuIFBsZWFzaW5nbHkgc3BhY2V5Li4uIFdobyB3YXMgdGhpcyBjaGljaz8gSSdtIGdvaW5nIHRvIHRyeSBhbmQgZmluZCBvdXQuKQAAAAAAAPA/CusFCIEDEIEDItkFeW91IGNhbiB0ZWxsIHRoZXkgc3BlbnQgNSQgbWFraW5nIHRoaXMuaXQgaXMgYSB3YXN0ZSBvZiB5b3VyIHRpbWUuLi4gdWdoLi4gdGhlcmUgaXMgbm90IGFueXRoaW5nIHJlbW90ZWx5IGdvb2QgYWJvdXQgdGhpcyBtb3ZpZS4uLiAuLiBpIGRvbid0IGtub3cgd2h5IGkga2VwdCB3YXRjaGluZyBpdC4uIHRoZSBjaGljayBpcyBub3QgaG90LiBob3JyaWQgYWN0aW5nLi4geW91IGNvdWxkIGRvIGFueXRoaW5nIGFuZCBpdHMgYSBiZXR0ZXIgdXNlIG9mIHlvdXIgdGltZS4uIGxpa2Ugd2F0Y2hpbmcgVFYgcGxheWluZyBzaGl0dHkgdmlkZW8gZ2FtZXMuLiBpIGZlZWwgcm9iYmVkLiBzaW1wbHkgcm9iYmVkLi4gb2YgbXkgdGltZSAuIGkgaGF2ZSBuZXZlciBtYWRlIGEgcmV2aWV3IGZvciBhIG1vdmllIGJlZm9yZSBhcyB5b3UgY2FuIHByb2JhYmx5IHRlbGwgYnV0IHRoaXMgbW92aWUgaSBmZWx0IGxpa2UgaSBuZWVkZWQgdG8gc2F2ZSB0aGUgcG9vciBzb3VscyB0aGF0IGFyZSBhYm91dCB0byB3YXRjaCBpdCBhbmQgbG9va2luZyBvbiBJTURiIGJlZm9yZSB0byBzZWUgaWYgaXRzIGRlY2VudCBhbmQgbG9va2luZyBhdCB0aGUgY29tbWVudHMuIC10aGVyZSB3YXMgbm8gYWN0aW9uLSAtbm8gaG90IGNoaWNrcy0gLW5vIGJ1ZGdldC0gLXNoaXR0dHR0dHR0dHR0dHR0dHkgYWN0aW5nLSBpdCBzY3JlYW1zIGJhZCBtb3ZpZS4gKioqKnRoZSBXSE9MRSBtb3ZpZSBpcyBpbiBhIHJvb20uKioqKQAAAAAAAPA/CpkLCIIDEIIDIocLeWVzLCBpIGhhdmUgbm90aWNlZCB0aGF0IHRoZXJlIGFyZSAzNDcgb3RoZXIgY29tbWVudHMsIGkgdGhpbmsgdGhhdCBpcyBhIGdvb2Qgc2lnbiBmb3IgYSBtb3ZpZSwgZXZlbiBpZiBzb21lIGFyZSBuZWdhdGl2ZS4gaSBoYXZlIHNlZW4gdGhpcyBtb3ZpZSAyIGFuZCBhIGhhbGYgdGltZXMuIGkgYWRvcmUgaXQgYW5kIHdvdWxkIHdhdGNoIGl0IGFnYWluLiBpdCBpcyB2ZXJ5IHNtYXJ0LCBidXQgaSBjYW4gdW5kZXJzdGFuZCB3aHkgc29tZSBwZW9wbGUgd291bGQgaGF0ZSBpdC4gdGhleSBkb24ndCBnZXQgaXQncyBhcHBlYWwuIHllcywgaSBoYXZlIGEgd2VpcmQgdGFzdGUgaW4gbW92aWVzLCBidXQgdGhpcyBpcyBhIGdyZWF0IG1vdmllLiBzb21lIG9mIHRoZSBsaW5lcyBhcmUganVzdCBzbyBxdWljaywgbGlrZSB0aGUgd2hvbGUgc2NlbmUgaW4gdGhlIGNoaW5lc2UgcmVzdGF1cmFudC4gaSBzdGFydGVkIGR5aW5nIGxhdWdoaW5nLiB0aGF0IGFuZCB3aGVuIGhlIHdhcyBpbiB0aGUgYXNzZW1ibHkgbGluZSB0YWxraW5nIHRvIHRoZSBjb250YWN0LiBqdWRlIGxhdyB3YXMgd29uZGVyZnVsLCB0aG91Z2ggaXQgd2FzIGh1bW9yb3VzLCBoaW0gdHJ5aW5nIHRvIGNvdmVyIHVwIGhpcyB3b25kZXJmdWwgYWNjZW50LiBhbnl3YXlzLCBpIGRvIG5vdCBjb25zaWRlciBteXNlbGYgdGhlIG1vdmllIGdvZGRlc3MgYXMgc29tZSBjcml0aWNzIG9mIHRoaXMgbW92aWUgYW5kIGlmIHlvdSBoYXZlIG5vdGhpbmcgYmV0dGVyIHRvIGRvIHRoYW4gd3JpdGUgcHNldWRvLWludGVsbGVjdHVhbCBtb3ZpZSBjb21tZW50YXJpZXMgYWJvdXQgZmlsbXMgeW91IGhhdGUgb25saW5lLCBpIGZlZWwgc29ycnkgZm9yIHlvdS4gd2h5IGRvbid0IHlvdSB3cml0ZSBhYm91dCBtb3ZpZXMgeW91IGxpa2UsIGxpa2UgbWUuIGkganVzdCBsb3ZlIGhvdyBldmVyeXRoaW5nIHRpZXMgdG9nZXRoZXIsIGl0IGtlZXBzIHlvdSBndWVzc2luZywgZXZlbiB0aG91Z2ggeW91IGd1ZXNzIHdyb25nLiB0aGUgZW5kaW5nIHdhcyBpbnRlcmVzdGluZywgYW5kIG5vdCBvdmVyZG9uZS4gaXQgd2FzIHB1cmVseSBjbGV2ZXIuIGkgd291bGQgbm90IGNvbXBhcmUgaXQgdG8gdGhlIG1hdHJpeCwgYmVjYXVzZSBpIHRoaW5rIHBlb3BsZSB0aGVuIGdldCB0aGUgd3JvbmcgaWRlYS4gaSB3ZW50IGludG8gdGhpcyBtb3ZpZSBleHBlY3Rpbmcgbm90aGluZyBleGNlcHQganVkZSBsYXcgYW5kIGEgc2NpLWZpLiBpIHdhcyBibG93biBhd2F5LiBpIGhhdmUgbm8gY2x1ZSBhYm91dCBhbnkgb3RoZXIgb2YgY3JvbmVuYnVyZydzIGZpbG1zLCBidXQgbG92ZSB0aGlzIG9uIGl0cyBvd24gbWVyaXQuIGFub3RoZXIgY2xldmVyIHRoaW5nIHdhcyB0aGUgZm9yZXNoYWRvd2luZyB3aXRoIHRoZSBkb2cuIGRlZmluaXRlbHkgd2F0Y2ggdGhpcyBtb3ZpZS4pAAAAAAAA8D8KjwUIgwMQgwMi/QR5ZXMgaSBoYXZlIGEgY29weSBvZiBpdCBvbiBWSFMgdW5jdXQgaW4gZ3JlYXQgY29uZGl0aW9uIHRoYXQgaSB0cmFuc2ZlcmVkIHRvIERWRCBhbmQgaWYgYW55b25lIG9uZSB3YW50cyB0byBicmluZyBiYWNrIHRoZSBtZW1vcmllcyBvZiBhIENocmlzdG1hcyBjbGFzc2ljIHBsZWFzZSBlbWlsIG1lIGF0IGRtZDIyMjJAdmVyaXpvbi5uZXQuaSBzZWFyY2hlZCBldmVyeXdoZXJlIGFuZCBpIGZvdW5kIG5vdGhpbmcgb24gdGhpcyBhbmQgaSB0aG91Z2h0IHRoYXQgaSBjYW50IGJlIHRoZSBvbmx5IG9uZSBvbiB0aGlzIHBsYW5ldCB0aGF0IGhhcyB0aGlzIGNsYXNzaWMgb24gdGFwZSB0aGVyZSBoYXMgdG8gYmUgb3RoZXIgcGVvcGxlIGFuZCBpZiB0aGV5IGRvIGkgZml0IGluIHdpdGggdGhlbSBiZWluZyB0aGF0IHZlcnkgdmVyeSBmZXcgdGhhdCBoYXMgdGhpcyBjbGFzc2ljIHNvIGkgY29uc2lkZXIgbXlzZWxmIGx1Y2t5IGFuZCBpIGhhdmUgYWxsIG9mIHRoZSBtdXBwZXRzIENocmlzdG1hcyBleGNlcHQgb25lIHRoYXQgam9obiBkZW52ZXIgZGlkIHdpdGggdGhlIG11cHBldHMgYWdhaW4gaSB0aGlua3MgaXRzIGNhbGxlZCBhIHNtb2tleSBtb3VudGFpbiBob2xpZGF5IGltIG5vdCB0byBzdXJlIGJ1dCBpdHMgY2xvc2UuKQAAAAAAAPA/Co8FCIQDEIQDIv0EeWVzIGJhcm5leSBpcyBub25zZW5zZSBub3cgYnV0IHdoZW4gaSB3YXMgYSBraWQgaXQgbWFkZSBwZXJmZWN0IHNlbnNlLjxiciAvPjxiciAvPmkgaGF2ZW4ndCBnb3R0ZW4gYW55IHNtYXJ0ZXIgYnV0IGkgZW5qb3llZCBpdC4gYXMgYSBjaGlsZCBpIHdhcyBtb2NrZWQgYmVjYXVzZSBubyBvbmUgY291bGQgc2F5IG15IG5hbWUgc28gaSBjaGFuZ2VkIGl0LiBldmVyIHNpbmNlIGkgd2FzIDQgSSd2ZSBnb25lIGJ5IHRoZSBuYW1lIFRpbmEgZnJvbSBiYXJuZXkgYmVjYXVzZSBpIGNvdWxkIHJlbGF0ZSB0byBoZXIgYmVpbmcgZnJvbSBhIGRpZmZlcmVudCBjdWx0dXJlLiBpJ20gMTcgbm93IGFuZCBiYXJuZXkgaXMgYSBodWdlIHBhcnQgb2YgbXkgbGlmZSAuIC4uLm15IG5hbWUgY2FtZSBmcm9tIGl0Li4uLiBpIGNhbnQgZGlzIHRoZSBzaG93IGkgZ3JldyB1cCB3aXRoIG5vIG1hdHRlciBob3cgc3R1cGlkIGl0IHNlZW1zIG5vdy48YnIgLz48YnIgLz5pIGRvbid0IGNhcmUgaWYgaSBnZXQgYmxvY2tlZCBpIGhhdmUgbm90aGluZyBtb3JlIHRvIHNheS4gdGhleSBzaG91bGRuJ3QgbWFrZSB0aGUgbWluaW11bSAxMCBsaW5lcyBiZWNhdXNlIHNvbWUgcGVvcGxlIGp1c3QgZG9uJ3QgaGF2ZSBtdWNoIHRvIHNheS4gT0sgZG9uZSkAAAAAAADwPwqTBQiFAxCFAyKBBXllZXNoLHRhbGsgYWJvdXQgY3JhcHRhc3RpYy50aGlzIHRoaW5nIGlzIGJydXRhbC5ob3JyaWJsZSB2b2ljZSBkdWJiaW5nLGV2ZW4gbW9yZSBob3JyaWJsZSBhY3RpbmcgYW5kIG5vIGRpc2Nlcm5pYmxlIHBsb3QuYXBwYXJlbnRseSB0aGVyZSBhcmUgc29tZSBncmVhdCBjaGFzZSBzY2VuZXMsYnV0IHRoZSBwcm9ibGVtIGlzLHlvdSBoYXZlIHRvIGdldCB0byB0aGF0IHBvaW50IGZpcnN0LGFuZCBpIGp1c3QgY291bGRuJ3QudGhlIDIwIG9yIHNvIG1pbnV0ZXMgaSBlbmR1cmVkIGZlbHQgbW9yZSBsaWtlIGEgcm9vdCBjYW5hbCB0aGFuIGEgbW92aWUuaSBzdXBwb3NlIGkgY291bGQgaGF2ZSBmYXN0IGZvcndhcmRlZCBpdCxhbmQgaSByZWNvbW1lbmQgeW91IGRvIHRoZSBzYW1lLHVubGVzcyB5b3UgaGF2ZSB2ZXJ5IGV4dHJlbWUgcGFpbiB0b2xlcmFuY2Ugb3IgeW91ciBhIG1hc29jaGlzdC5pIGRvbid0IGZhbGwgaW50byBlaXRoZXIgY2F0ZWdvcnkuaSBzdGlsbCBoYXZlIGEgbWlncmFpbmUgZnJvbSB0aGlzIHRoaW5nIHNvIGknbSBhYm91dCB0byBwZXJmb3JtIHNvbWUgZGVudGFsIHN1cmdlcnkgd2l0aG91dCBhbmVzdGhldGljIGp1c3QgcmVsaXZlIHRoZSBtaWdyYWluZS5ib3R0b20gbGluZSxob3JyZW5kb3VzLiAwLzEwKQAAAAAAAPA/CvAICIYDEIYDIt4IeWVhaC4udGhhdCdzIHdoYXQgdGhlIHN0YXRpb24gZGlzY2xhaW1lciBzdGF0ZXMgYWZ0ZXIgdGhlIGNvbW1lcmNpYWxzIGZvciB0aGlzIHNob3cgInNvbWUgc2NlbmVzIG1heSBiZSBkaXN0dXJiaW5nIHRvIHNvbWUgdmlld2VycyIgLjxiciAvPjxiciAvPkl0IGlzIGJleW9uZCBkaXN0dXJiaW5nLiBUaGUgdmFsaWRhdGlvbiBvZiB0aGlzIHdob2xlIGRpc3BsYXkgb2YgZWdvIGZyYW1pbmcgYW5kIGNoYXV2aW5pc20gaXMgaW4gdGhlIGZhY3QgaXQgaXMgb24gdGhlIENPTUVEWSBjaGFubmVsLiBZZXMuLmEgY29tZWR5IHRydWUgYW5kIHRydWUuIEEgSk9LRS4gVG8gc2VlIHRoZXNlICdwbGF5YXMnIGdvIHRocm91Z2ggdGhlaXIgcmlnaWQgY2hhcmFkZSByZWFsbHkgc3BlbGxzIG91dCB3aGF0IGlzIHdyb25nIHdpdGggc29jaWV0eS4gRXNwZWNpYWxseSB0aGUgbWVhdCBtYXJrZXQgYmFyIHNjZW5lLiBCb3RoIHNpZGVzLCB0aGUgbWFsZSBhbmQgZmVtYWxlLCBhcmUgZXF1YWxseSBhcyB3ZWFrIGFuZCBkZXNwZXJhdGUgdG8gYmUgbWluZ2xpbmcgYW1vbmcgdGhpcyBzdXBlcmZpY2lhbCBhdG1vc3BoZXJlLiBUaGUgY2x1YiBpcyBvYnZpb3VzbHkgb25lIG9mIHRob3NlIENpZ2FyZXR0ZSBjb3Jwb3JhdGlvbiBzcG9uc29yZWQgcGxhc3RpYyBjb2tlIHNjZW5lcy4gVGhlc2UgcGVvcGxlIGRvIGhhdmUgYSBjaG9pY2UsIGFuZCB0aGF0IGlzIHdoYXQgbWFrZXMgaXQgZXZlbiBtb3JlIG9mIGEgam9rZS4gPGJyIC8+PGJyIC8+VGhlc2Ugc2xpY2sgcmlja3MgdHJ5IHRvbyBoYXJkLiBUaGV5IGdsaXN0ZW4gd2l0aCB0aGVpciBvd24gZ3Jvb3ZlIGdyZWFzZS4gVGhhdCdzIE9LLiBJdCdzIGEgbGVzc29uIG9uIHZpZGVvIHRhcGUgZm9yIHRoZSBuZXcgZ2VuZXJhdGlvbiBvZiBob3cgTk9UIHRvIGZvY3VzIG9uIGEgcG90ZW50aWFsIGhlYXJ0IGludGVyZXN0LiBIb3BlZnVsbHkgdGhhdCBmYWNhZGUgd2lsbCBjcnVtYmxlIGFsb25nIHdpdGggdGhlIEJ1c2gvSGFycGVyIGFkbWluaXN0cmF0aW9ucy4gUHJvYmxlbSBpcywgd2hvJ3MgbGluZWQgdXAgYWZ0ZXIgdGhlc2UgY2hhcmFjdGVycyBmYWRlPyBUaGUgYmFzdGFyZCBjaGlsZHJlbiBvZiB0aGUgb25lIG5pZ2h0IHN0YW5kcz8pAAAAAAAA8D8K2gQIhwMQhwMiyAR5ZWFoLCBpdCdzIGEgYml0IG9mIGEgc2lsbHkgZmlsbSwgc28gaWYgeW91IGFyZSBsb29raW5nIGZvciBhbiBvc2NhciBwZXJmb3JtYW5jZSwgZm9yZ2V0IHRoaXMgb25lLi4uLi4uYnV0LCBpZiB5b3UgbG92ZSBKb2huIENhbmR5J3MgaHVtb3IsIHRoaXMgaXMgYSBtdXN0LXNlZS4gV2UgbG9zdCBKb2huIENhbmR5IGJlZm9yZSBoZSBtYWRlIGVub3VnaCBvZiBoaXMgZ3JlYXQgYnJhbmQgb2YgY29tZWR5LCBhbmQgaGUgaXMgb25seSBiZXR0ZXIgaW4gb25lIG1vdmllOiBQbGFuZXMsIFRyYWlucywgJiBBdXRvbW9iaWxlcyAod2l0aCBTdGV2ZSBNYXJ0aW4pLiBFeGNlbGxlbnQgc3VwcG9ydGluZyBwZXJmb3JtYW5jZSBieSBFdWdlbmUgTGV2eSwgcGVyaGFwcyBoaXMgYmVzdCB3b3JrIGV2ZXIgYXMgdGhlIGhvdC1oZWFkZWQgU2FsIERpUGFzcXVhbGUuIEFsc28gZ29vZCBhY3RpbmcgYnkgUmljaGFyZCBMaWJlcnRpbmksIEFsbGV5IE1pbGxzICYgUGF0IEhpbmdsZS4gWW91IG11c3Qgc2VlIHRoaXMgb2JzY3VyZSBhbmQgb3V0LW9mLXByaW50IGZpbG0gaWYgeW91IGFyZSBhIEpvaG4gQ2FuZHkgb3IgRXVnZW5lIExldnkgZmFuLikAAAAAAADwPwqgCgiIAxCIAyKOCnllYWggcmlnaHQuIFNhbW1vIEh1bmcgYWxyZWFkeSBhY3RlZCBpbiB0aGUgbWFpbiByb2xlIGluIDE5ODMncyAiWnUgV2FycmlvcyBmcm9tIHRoZSBNYWdpYyBNb3VudGFpbiIuIE5vdywgMjAwMSwgaGUgZG9lcyBpdCBhZ2FpbiB3aXRoICJadSBXYXJyaW9ycyIuIEJ1dCB0aGlzIHRpbWUsIGhlIGZpbmFsbHkgZG9lcyBpdCByaWdodC4gWW91IHNlbGRvbSBzZWUgaGltIGluIHd1eGlhLCBtb3JlIG9mdGVuIGluIGNsYXNzaWMgZWFzdGVybiBvciBjcmltZSBzbGFwc3RpY2suIEJ1dCB0aGlzIHJvbGUgc2ltcGx5IGRvZXMgZml0IGhpbSEgVGhlIGFuY2llbnQgQ2hpbmVzZSBsZWdlbmQgYWJvdXQgenUgbW91bnRhaW4gaXMgbm90IG9mdGVuIHJlcHJlc2VudGVkIGluIG1vdmllcyAoYXMgZmFyIGFzIEkga25vdyBhYm91dCBtb3ZpZXMgdHJhbnNsYXRlZCBmb3IgdGhlIHdlc3QpLiBBbHRob3VnaCwgdGhlIGxlZ2VuZCBjb250YWlucyBhIHZhc3Qgb2YgaW50ZXJlc3Rpbmcgc3RvcmllcyBhbmQgcG9zc2liaWxpdGllcy4gU3RyYWlnaHQgc2FpZDogeW91IGhhdmVuJ3Qgc2VlbiBhIHN0b3J5IGFsaWtlIHlldCBpbiBhIG1vZGVybiBtb3ZpZSEgQW5kIHRoYXQgbWFrZXMgaXQgc28gZ3JlYXQhIEFuZCB3b3c6IGFsbCB0aGUgY29sb3JzIHBsdXMgdGhlIGVub3Jtb3VzbHkgZGVlcCwgcmlnaHQtaW50by10aGUtaGVhcnQgZ29pbmcgc3RvcnkgbWFrZXMgeW91IGZhbGwgZm9yIHRoaXMgbW92aWUgaW4gYW4gaW5zdGFudC4gVGhlIGZpcnN0IHRpbWUgSSB3YXRjaGVkIGl0LCBJIGhhZCB0byB3YXRjaCBpdCBhZ2FpbiBpbnN0YW50bHksIGFuZCBJIGRpZC4gT0sgdHJ1ZSwgSSBkaWRuJ3QgdW5kZXJzdGFuZCBhbGwgb2YgaXQgdGhlIGZpcnN0IHRpbWUuIEJ1dCB0aGF0IG1ha2VzIGl0IG9ubHkgYmV0dGVyISBZb3Uga25vdywgeW91IGRpZG4ndCB1bmRlcnN0YW5kIGFsbCBvZiBpdCwgYmVjYXVzZSB0aGVyZSBpcyBzbyBtdWNoIHNwaWNlIGluIGl0ISBUaGVyZWZvciBpdCBpcyBhIHBsZWFzdXJlIGZvciBvbmUgc2VsZiB0byB3YXRjaCBpdCBvdmVyIGFuZCBvdmVyIGFnYWluLiBBbmQgeWVhaCwgaXQgZ3Jvd3MgZGVlcGVyIGluIHlvdXIgaGVhcnQsIHRoZSBtb3JlIG9mdGVuIHlvdSB3YXRjaCBpdC48YnIgLz48YnIgLz5TdW1tYXJ5OiBBIHN0b3J5IHRvIGxvdmUsIGNoYXJhY3RlcnMgeW91IGNyeSB3aXRoLCBhbmQgdHJ1bHk6IGEgbW92aWUgeW91IG5ldmVyIGZvcmdldCEgLS0gRWRpdG9ycyBub3RlOiB3ZWxsLCBJIHRoaW5rIEkgbXVzdCB3YXRjaCBpdCByaWdodCBub3cgYWdhaW4gOkQpAAAAAAAA8D8KgQkIiQMQiQMi7wh5ZWFoIGNoZWFwIHNob3QgaSBrbm93LCBidXQgdGhpcyBtb3ZpZSBpcyBhIGdyZWF0IGV4YW1wbGUgb2YgaG93IGEgY29sbGVjdGlvbiBvZiBzaWduaWZpZXJzIG9mICdkZWVwbmVzcycgKHBvbGl0aWNhbCB0dXJtb2lsLCBsb3ZlL2x1c3QpIGNhbiBiZSBjb21iaW5lZCBoYXBoYXphcmRseSB0byBncmVhdCBjcml0aWNhbCBhY2NsYWltIChzZWUgYWxzbyAnYW1lcmljYW4gYmVhdXR5JykuIGthdWZtYW4ncyBtb3ZpZSBwbG9kcyBhbG9uZyB3aXRoIGdyYXR1aXRvdXMgc2V4IHNjZW5lcyBpbnRlcnNwZXJzZWQgd2l0aCBvZnRlbiBwYWluZnVsIGRpYWxvZyBzZXF1ZW5jZXMgKGluIG9uZSBzY2VuZSBpIGNvdW50ZWQgdGhyZWUgZGlmZmVyZW50ICdnZW5lcmljIEV1cm9wZWFuJyBhY2NlbnRzIGFmZmVjdGVkIGJ5IHRoZSBhY3RvcnMpIGFuZCBkaXNwbGF5cyBvZiBzdGF0ZSBtaWdodCBydW4gYW1vaywgeWV0IGZhaWxzIHRvIHRpZSB0aGVtIHRvZ2V0aGVyIGludG8gdGhlIGNvaGVyZW50IG1lZGl0YXRpb24ga3VuZGVyYSBvZmZlcmVkLiBhbmQgaW4gaXRzIG92ZXItbG9uZyB0aHJlZSBob3VycyBpdCBtYW5hZ2VzIGFsbW9zdCBjb21wbGV0ZWx5IHRvIGdsb3NzIG92ZXIgZnJhbnosdGhlIG1pc3NpbmcgZm91cnRoIHBpZWNlIGluIHRoZSBsb3ZlIHRyaWFuZ2xlIHRoYXQgbGllcyBhdCB0aGUgaGVhcnQgb2YgdGhlIHBsb3QsIGFuZCBpbiB0aGlzIG1hbm5lciBzYWNyaWZpY2VzIHRoZSBub3ZlbCdzIGNlbnRyYWwgbWVjaGFuaXNtIG9mIGRpc3BsYXlpbmcgdGhlIHNwZWN0cnVtIG9mIGVtb3Rpb25zIGFuZCBvZiBwb3dlciByZWxhdGlvbnMgdGhhdCBvYnRhaW4gaW4gbG92ZSBhZmZhaXJzLiBpdCBhbHNvIGZhaWxzIHRvIGV2ZW4gaW5jbHVkZSB0b2tlbiBzY3JlZW4gdGltZSBmb3IgdG9tYXMnIHNvbiwgdXNlZCBpbiB0aGUgbm92ZWwgdG8gZXhlbXBsaWZ5IHNvbWUgb2YgdGhlIHBvbGl0aWNhbCBwb2ludHMga3VuZGVyYSB3YXMgbWFraW5nIGluIHRoZSBub3ZlbC4gY29tYmluZWQgd2l0aCB0aGUgb3ZlcndlZW5pbmcgc291bmR0cmFjaywgdGhlc2UgZmxhd3MgbWFrZSB0aGlzIG1vdmllJ3MgdGhyZWUgaG91cnMgdW5iZWFyYWJseSB3ZWlnaHR5IGluIHRvbmUgeWV0IGxpZ2h0IGluIGNvbnRlbnQuKQAAAAAAAPA/Cu8GCIoDEIoDIt0GeWEga25vdyB0aGUgY29uY2VwdCBvZiAiZ3VpbHR5IHBsZWFzdXJlcyI/IHllYWgsIHlvdSBoYXZlICdlbSwgbGlrZSBhZG1pdHRpbmcgeW91IHdhdGNoZWQgLSBhbmQgZW5qb3llZCAtIGdvb25pZXMsIGJhdHRsZXN0YXIgZ2FsYWN0aWNhIEFGVEVSIHRoZXkgcmVhY2hlZCBlYXJ0aCwgdiB0aGUgc2VyaWVzLCBjaGFybGllJ3MgYW5nZWxzLCBzdGFyc2t5ICYgaHV0Y2gsIHRoZSAxOTUwcyB2ZXJzaW9uIG9mIHN1cGVybWFuLCBvciBnb2R6aWxsYSBtb3ZpZXMuPGJyIC8+PGJyIC8+aGVyZSdzIHRoZSB1bHRpbWF0ZSBpbiBndWlsdHkgcGxlYXN1cmVzLiBjb3VwbGVkIHdpdGggamFjayBvZiBhbGwgdHJhZGVzIGluIGEgc2FtIHJhaW1pIGFjdGlvbiBwYWNrZWQgaG91ciwgdGhpcyBoYWxmIGhvdXIgc2xvdCBpcyBmYXN0IHBhY2VkLCBlYXN5IHRvIGZvbGxvdywgYW5kIGxvYWRlZCB3aXRoIGZ1bi10by13YXRjaCBzY2FubGl0eS1jbGFkIGJhYmVzLjxiciAvPjxiciAvPnRoZSBtYW4gdGhhdCBicm91Z2h0IHVzIGV2aWwgZGVhZCwgeGVuYSwgaGVyY3VsZXMsIGFuZCB0aGUgYWR2ZW50dXJlcyBvZiBicmlzY28gY291bnR5IGpyIGRvZXMgaXQgYWdhaW4gd2l0aCB0aGlzIDIwMDAgdXBkYXRlIG9mIGNoYXJsaWVzIGFuZ2Vscy4gd2UgZ290IGNoYXJsaWUgKHZvaWNlKSBhbiB1bmtub3duIGJlaW5nIHRoYXQgaGFzIHRoZSBrbm93bGVnZSBhbmQgdGhlIHRpbWUgdG8gZmluZCBwZW9wbGUgd2hvIG5lZWQgaGVscCwgYm9zbGV5IChtb3VzZXIpIHRoZSBnYWRnZXQgbWFuLCBhbmQgdGhyZWUgZ29yZ2VvdXMgYmFiZXMgdGhhdCBraWNrIGEqKiBmb3IgYSBsaXZpbmcuPGJyIC8+PGJyIC8+YW5kIG9oIHdoYXQgYSBsaXZpbmchKQAAAAAAAPA/CqgHCIsDEIsDIpYHeGljYSBkYSBTaWx2YSBpcyBvbmUgb2YgdGhlIGJlc3QgQnJhemlsaWFucyBvcGVyYSBzb2FwIGV2ZXIhIHRoZSBhIGJsYWNrIHNsYXZlJ3Mgc3RvcnkgdGhhdCBiZWNvbWVzIHF1ZWVuIG9mIGEgc21hbGwgdmlsbGEgd2hlbiBjb25xdWVyaW5nIHRoZSBtb3N0IHBvd2VyZnVsIG1hbidzIG9mIHRoZSBhcmVhIGxvdmUsIGluIHRoZSBjb2xvbmlhbCBwZXJpb2Qgb2YgdGhlIGJyYXppbCBkb21pbmF0ZWQgYnkgUG9ydHVnYWwsIHRoYXQgZXhwbG9yZWQgaXRzIGRpYW1vbmRzLiBUaGUgbGFyZ2VzdCB4aWNhIGVuZW15LCB2aW9sYW50ZSwgYnJpZGUgdGhhdCBpdCB3YXMgY2hhbmdlZCBieSB4aWNhLCBpcyBhIHdvbWFuIG9mIGJpZyBpdCBpbmZsdWVuY2VzIHRoZSBQb3J0dWdhbCBraW5nIGNsb3NlIHRvIGFuZCBkb2VzIHRvIHRha2UgcmV2ZW5nZSBvZiB0aGUgc2xhdmUgb2YgZXZlcnl0aGluZy4gVmVyeSByZWxpZ2lvdXMgcGVyc29uLCBzaGUgaXMgYSBwaWN0dXJlIG9mIHRoZSBoeXBvY3JpdGljYWwgc29jaWV0eSBhbmQgcmVsaWdpb3VzIG9mIHRoZSB0aW1lLCBzaGUgZGVkaWNhdGVzIGl0cyBsaWZlIHRoZSBtb3JhbGl0eSBvZiB0aGUgdmlsbGEgdGhhdCB3YXMgY29tbWl0dGVkIGJ5IHhpY2EsIHRoYXQgaXMgYSB3b21hbiBmdWxsIG9mIGx1c3RzIHRoYXQgaXQgZmFjZXMgdGhlIHNvY2lldHkgb2YgdGhlIHRpbWUgdG8gcHJlYWNoIGFuZCBpdCBoZWxwcyB0aGUgc2xhdmVzIG9mIHRoZSBhcmVhLiBUaGUgc3RvcnkgYWxzbyBiaWxsIHdpdGggZm9yYmlkZGVuIGxvdmVzLCBzb3JjZXJpZXMgYW5kIHZhbXBpcmVzIGFuZCByZWxpZ2lvdXMgZmVydm9yLiBYaWNhIGRhIFNpbHZhIGRvZXMgd2l0aCB0aGF0IHlvdSBkb24ndCB3YW50IHRvIGxvc2UgYSBJIG9ubHkgc3VycmVuZGVyLCBmcm9tIGJlZ2lubmluZyB0byBlbmQhKQAAAAAAAPA/CqEFCIwDEIwDIo8Fd3d3LnBldGl0aW9ub25saW5lLmNvbS8xOTc4NDQ0NC9wZXRpdGlvbi5odG1sIEFuIGV4Y2VsbGVudCBUViBzZXJpZXMgdGhhdCBzaG91bGQgYmUgY2FwdHVyZWQgb24gRFZELiBUaGlzIHdhcyBhIHNob3cgSSByYXJlbHkgbWlzc2VkLiBJIGZvdW5kIGEgcGV0aXRpb24gdG8gYnJpbmcgaXQgYmFjayBvbiBEVkQuIEkgcmVjYWxsIG9uZSBzaG93IHdoZXJlIHRoaXMgb2Jlc2UgbGFkeSB3b3JlIGEgcGFpciBvZiBnbGFzc2VzIHRoYXQgbGV0IGhlciBmb29kIHRhbGsgdG8gaGVyLiBOZWVkbGVzcyB0byBzYXkgc2hlIGNvdWxkIG5vdCBlYXQgaGVyIGZyaWVuZHMgc28gc2hlIHN0YXJ2ZWQgdG8gZGVhdGguIEFub3RoZXIgZXBpc29kZSBoYWQgYW4gYWNjb3VudGFudCB2aXNpdGluZyBhbiB1bmRlcmdyb3VuZCBzZXdlciAmIHN1YndheSBzZWN1cml0eSBicmFuY2guIFRoZSBhY2NvdW50YW50IHdhbnRlZCB0byBzaHV0IGRvd24gdGhlIGZ1bmRpbmcgZm9yIHRoZSBwcm9qZWN0LiBBcyBpdCB0dXJucyBvdXQgdGhlIHNlY3VyaXR5IGJyYW5jaCB3YXMgdW5kZXJmdW5kZWQgdG8gZmlnaHQgdGhlIGNhbm5pYmFsaXN0aWMgY3JlYXR1cmVzIHRoYXQgbGl2ZWQgaW4gdGhlIGRhcmsuIHd3dy5wZXRpdGlvbm9ubGluZS5jb20vMTk3ODQ0NDQvcGV0aXRpb24uaHRtbCkAAAAAAADwPwr6AQiNAxCNAyLoAXdvdy4uLnRoaXMgaGFzIGdvdCB0byBiZSB0aGUgRFVNQkVTVCBtb3ZpZSBJJ3ZlIGV2ZXIgc2Vlbi4gV2Ugd2F0Y2hlZCBpdCBpbiBlbmdsaXNoIGNsYXNzLi4uYW5kIHRoaXMgbW92aWUgbWFkZSBBQlNPTFVURUxZIG5vIHNlbnNlLiBJIHdvdWxkIG5ldmVyLCBFVkVSIHdhdGNoIHRoaXMgbW92aWUgYWdhaW4uLi5hbmQgbXkgc3ltcGF0aHkgdG8gdGhvc2Ugd2hvIGhhdmUgZXZlciBQQUlEIHRvIHNlZSBpdC4pAAAAAAAA8D8K0QcIjgMQjgMivwd3b3cuLi5JIGp1c3Qgd2F0Y2hlZCB0aGlzIG1vdmllLi4uQW1lcmljYW4gcGVvcGxlIGhhdmUgdGhpcyBzdGVyZW90eXBpY2FsIHZpZXcgdG93YXJkcyBIaW5kaSBmaWxtcyBzdWNoIGFzLCBBTEwgSW5kaWFuIGZpbG1zIGhhdmUgZGFuY2VzLCBzb25ncyBhbmQgYSBsb3ZlIHN0b3J5Li4uLkl0cyBwYXRoZXRpYyBob3cgZmFyIGF3YXkgZnJvbSB0aGUgdHJ1dGggdGhhdCBpcy4gVGhpcyBmaWxtIHNpbXBseSBleHBvc2VzIHRoZSBzdGVyZW90eXBpY2FsIHdlc3Rlcm4gdmlldyBvZiBIaW5kaSBmaWxtcy4gSG9ycmlibGUgYWN0aW5nLCBob3JyaWJsZSBkaXJlY3Rpb24sIGhvcnJpYmxlIGNpbmVtYXRvZ3JhcGh5LiBBbmQgYWxsIHRoaXMgYnkgYSBIb2xseXdvb2QgZGlyZWN0b3IuIE1vc3QgSW5kaWFuIGZpbG1zIHRvZGF5IGFyZSBtdWNoIG1vcmUgY29udGVudCBkcml2ZW4sIHJlYWxpc3RpYywgdG91Y2hpbmcgYW5kIG1lYW5pbmdmdWwgdGhhbiB0aGlzIHBpZWNlIG9mIGNyYXAuIEluZGlhbiBjaW5lbWEgKG5vdCBqdXN0IEhpbmRpKSBhbHNvIGNvdmVyIGEgdmFyaWV0eSBvZiBkaWZmZXJlbnQgc3ViamVjdHMuIEp1c3QgbGlrZSBtb3N0IG90aGVyIEhvbGx5d29vZCBmaWxtcyB0aGVzZSBkYXlzLCB0aGlzIHNob3dzIGEgdmVyeSBzdGVyZW90eXBpY2FsIHZpZXcgb2Ygb2YgYW5vdGhlciBjb3VudHJ5LCB3aGVyZSB0cnV0aCBpcyB0aHJvd24gb3V0IHRoZSB3aW5kb3cuIFRoaXMgaXMgYSBoaWdobHkgTk9UIHJlY29tbWVuZGVkIG1vdmllLiBJbnN0ZWFkIHdhdGNoIGdvb2QgSGluZGkgZmlsbXMgbGlrZSBibGFjayBGcmlkYXksIGVrbGF2eWEsIG9ta2FyYSwga2hha2VlLCBhd2FyYXBhbiwgZ2FuZ3N0ZXIsIGRvbiwgemFraG0sIGRvciwgc2hvbGF5LCBtb3RoZXIgSW5kaWEsIGxhZ2Fhbi4uLlRob3NlIGZpbG1zIGFyZSB3aGF0IHJlYWwgSW5kaWFuIGNpbmVtYSBhcmUgYWxsIGFib3V0LikAAAAAAADwPwrBBgiPAxCPAyKvBndvdywgdGhlIE5ha2VkIEJyb3RoZXJzIEJhbmQuIFdoYXQgc2hvdWxkIGkgc2F5LiBJIGd1ZXNzIGkgY2FuIHNheSB0aGlzIHNob3cganVzdCBzdWNrcy4gbnVtYmVyIG9uZTogdGhleSBoYXZlIG5vIHRhbGVudCwgdGhleSBwcm9iYWJseSBjYW4ndCBldmVuIHBsYXkgdGhlIGluc3RydW1lbnRzLiBudW1iZXIgMjogb24gdGhlIGNvbW1lcmNpYWwgaXQgc2FpZCB0aGV5IHdlcmUgZmFtb3VzIGJ1dCBub2JvZHkgZXZlbiBoZWFyZCBvZiB0aGVtIHRpbGwgdGhlcmUgY3JhcHB5IHNob3cgY2FtZSBvbi4gTG9vaywgaSByZWFsbHkgZG9uJ3QgaGF0ZSBpdCB0aGF0IGJhZCwgaSdkIGdpdmUgaXQgbGlrZSBhIDQgb3V0IG9mIDEwLCBidXQgd2hhdCBhbm5veXMgbWUgaXMgaG93IGV2ZXJ5b25lIHNheXMgdGhleSBoYXZlIHN1Y2ggZ3JlYXQgdGFsZW50IGFuZCBOYXQgaXMgU08gZGVlcCBhbmQgd3JpdGVzIGRlZXAgbHlyaWNzLiBEZWVwIG15IGFzcyEgaGUgdGFsa3MgYWJvdXQgaGFyZGNvcmUgd3Jlc3RsZXJzIHdpdGggaW5uZXIgZmVlbGluZ3MuIHdvdywgaSBjb3VsZCByZWFkIHdoYXQgaXQgc2F5cyBvbiB0aGUgd2FsbHMgb2YgYSBiYXRocm9vbSBhbmQgaXQgd291bGQgYmUgbW9yZSBkZWVwIHRoYW4gdGhhdC4gQW5kIHRoZXkgZGlkbid0IGdldCBmYW1vdXMgYnkgdGhlbXNlbHZlcywgdGhlaXIgcGFyZW50cyBhcmUgZmFtb3VzIGNlbGVicml0aWVzIGFuZCB3YW50ZWQgdGhlaXIga2lkcyB0byBiZSB0b28gc28gdGhleSBtYWRlIHVwIGEgYmFkIHNob3cuIGkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBpdCB3aWxsIGJlIGNhbmNlbGVkIHNvb24uKQAAAAAAAPA/CqIICJADEJADIpAId293LCBpIGp1c3QgZ290IG9uZSB3YXRjaGluZyB0aGlzLjxiciAvPjxiciAvPkhvdyBDUkFQUFkgcG9zdCBwcm9kdWN0aW9uIGlzIG9uIHRoaXMgbW92aWUuPGJyIC8+PGJyIC8+SSBraWQgeW91IG5vdCwgSSBsaXRlcmFsbHkgY291bGQndmUgZG9uZSBhIGJldHRlciBqb2IgbXlzZWxmLjxiciAvPjxiciAvPkFMTCBvZiBwb3N0IHByb2R1Y3Rpb24gaXMgZmxhd2VkLCBhbGwgb2YgaXQuIFdob2V2ZXIgY3V0IHRoaXMgZmlsbSBzaG91bGQgYmUgYmFubmVkIGZyb20gdGhlIGZpbG0gaW5kdXN0cnkuPGJyIC8+PGJyIC8+VGhhdCBhc2lkZSwgdGhlIHNjcmlwdCB3YXMgYSB0cmFpbndyZWNrLiBhYnNvbHV0ZSBydWJpc2guPGJyIC8+PGJyIC8+Tm90IHRvIG1lbnRpb24gSmFjayBCYXVlciBhbmQgaGlzIFBhdGNoeSB0aGUgUGlyYXRlIGluIFNwb25nZWJvYiBhY2NlbnQuIFdURiBpcyBoaXMgY2hhcmFjdGVyIGRvaW5nIHRoZXJlPyBCdXQgdG8gbWUsIHRoZSBiaWdnZXN0IGZsYXcgb2YgYWxsIHdhcyBjaGFyYWN0ZXIgZGV2ZWxvcG1lbnQsIGludGVyZWFjdGlvbiwgZHluYW1pY3MsIGRpYWxvZ3VlLiBXT1cuIEkgY2FudCBiZWxpZXZlIGhvdyBiYWQgaXQgd2FzLjxiciAvPjxiciAvPkkgZ2l2ZSB0aGlzIG1vdmllIGEgMiBvdXQgb2YgMTAuIDEgZm9yIFNhbWFudGhhLCB3aG8gaXMgYSBncmVhdCBhY3RyZXNzLCB0b28gYmFkIHRoZSBwcm9kdWN0aW9uIG1hZGUgZXZlcnlvbmUgbG9vayBsaWtlIGFtYXRldXJzIG91dCB0aGVyZS48YnIgLz48YnIgLz50aGUgb3RoZXIgMSBnb2VzIHRvIGNpbmVtYXRvZ3JhcGh5LCB3aGljaCB3YXMgaW5kZWVkIGdvb2QuPGJyIC8+PGJyIC8+T3RoZXIgdGhlbiB0aGF0IG15IGZyaWVuZCwgdGhpcyBpcyBvbmUgYmFkIG1vdmllLjxiciAvPjxiciAvPkkgZG9uJ3QgZXZlbiBmZWVsIGxpa2UgbWFraW5nIGFuIGVsYWJvcmF0ZSBwb3N0IG9uIHRoaXMsIGl0IHdhcyBqdXN0IGhvcnJpYmxlIHByb2R1Y3Rpb24uIFBvb3IgYWN0b3JzLCBkaWRuJ3Qga25vdyB3aGF0IHRoZXkgd2VyZSBnZXR0aW5nIGludG8uLi4pAAAAAAAA8D8KtQUIkQMQkQMiowV3b3csIGhvdyBjYW4gSSBldmVuIGRpc2N1c3MgdGhpcyBtb3ZpZSB3aXRob3V0IHRlYXJzIGNvbWluZyB0byBteSBleWVzPyBJdCB3YXMgc3VyZWx5IHRoZSBoaWdobGlnaHQgb2YgbXkgeWVhci0tbmF5LS1teSBsaWZlLiBBcyBpZiB0aGUgcmFwdG9yIGdyYXBoaWNzIHdlcmVuJ3QgYW1hemluZyBlbm91Z2gsIHRoZSBhd2FyZC13aW5uaW5nIGVkaXRvcnMgY29udGludWVkIHRvIHVzZSB0aGUgZXhhY3Qgc2FtZSBzaG90IHRocm91Z2hvdXQgdGhlIGVudGlyZSBtb3ZpZSwgZXZlbiB3aGVuIHRoZSBiYWNrZ3JvdW5kIGRpZG4ndCBhY3R1YWxseSBtYXRjaCB1cCB3aXRoIHRoZSBzZXR0aW5nIG9mIHRoZSBzY2VuZS4gV293LCB3aGF0IGdlbml1cy4gQW5kIHdoaWxlIHRoZSBtb3ZpZSBpcyBmdWxsIG9mIHBsb3QtaG9sZXMgKGZvciBpbnN0YW5jZSwgYSBmZXcgY2xpcHMgb2YgYSB0LVJleCB0eXBlIGFuaW1hbCB3aGVyZSBhIHJhcHRvciBzaG91bGQgYmUgYW5kIG9uZSBrZXkgbW9tZW50IHdoZXJlIFBhcHB5IGZpbmRzIGEgdG9ydHVyZSBjaGFtYmVyLCBzY3JlYW1zICJDb2xpbidzIGEgZ2lybCEiIGFuZCBydW5zIG91dCkgSSB3aWxsIG5ldmVyIGZvcmdldCB0aGUgYnJpbGxpYW5jZSB0aGF0IGlzIFJhcHRvciBQbGFuZXQuIFRoYW5rIHlvdSBTY2ktRmkgZm9yIGFub3RoZXIgY2xhc3NpYy4pAAAAAAAA8D8K3AIIkgMQkgMiygJ3b3chIHRoaXMgd2FzIGEgZ3JlYXQgbW92aWUhIGkganVzdCBnb3QgaXQgZnJvbSB0aGUgdS5zLiBhbmQgaXQgd2FzIHdvcnRoIGFsbCB0aGUgbW9uZXkgaSBnYXZlIGZvciBpdCEgdGhpcyBtb3ZpZSBpcyBvbmUgb2YgdGhlIGJlc3QgbW92aWVzIGZvciBjaGlsZHJlbiBpIGhhdmUgZXZlciBzZWVuLCBtYXliZSB0aGUgYmVzdCEhISBhbGwgeW91IHdobyBsaWtlIHJhaW5ib3cgYnJpdGUsIG11c3Qgc2VlIHRoaXMgMSAhIHRoZSBmaXJzdCA3IG1pbnV0ZXMsIHlvdSBjYW4gbm90IGJlbGlldmUgd2hhdCB5b3Ugc2VlISBpdCdzIHNvIGdyZWF0ISEhPGJyIC8+PGJyIC8+c2Nvb3Rlci4pAAAAAAAA8D8K2ggIkwMQkwMiyAh3b3chIHRoaXMgaXMgYSBnb29kIG1vdmllISBUaGUgYWN0aW5nIHdhc24ndCBnb29kIGF0IGFsbCwgYnV0IGlmIHlvdSBsb29rIGF0IHNvbWUgbW9tZW50cyBpbiB0aGUgZmlsbSwgcmV3aW5kLCBhbmQgd2F0Y2ggaXQgYWdhaW4sIGl0IGlzIGdlbml1cyEgVGhlIG1hbiBpbiB0aGUgYmVnaW4gb2YgdGhlIGZpbG0gd2Fsa3Mgd2l0aCBoaXMgc3VpdGNhc2UgYWdhaW5zdCBhIHRocmVlLiBXT1chSSBuZXZlciBleHBlY3RlZCB0aGF0LiBUaGVuIGhlIHB1dHMgdGhlIGNva2UgaW4gYSBzdWl0Y2FzZSBhbmQgcnVucyBhd2F5LiBJIGJldCB0aGF0IHNtb2tpbmcgZ3V5IGFnYWluc3QgdGhhdCB0aHJlZSB3YXMgb25lIG9mIGhpcyBtYXRlcyB3aG8gc29sZCB0aGUgZHJ1Z3MgbGF0ZXIuIEFuZCB0aGUgZ2VuaXVzIHF1b3RlczogJyduaWNlIHNoYWRlcywgaSBuZWVkIGEgcGFpcicnICcndGhlaXIgeW91cnMuLiBpZiB5b3UgdGhpbmsgeW91IGNhbiB0YWtlIHRoZW0uLicnLi4ganVzdCBCcmlsbGlhbnQhIEFuZCB0aGUgZmlnaHRpbmcgaXMgdGhlIGJlc3QgaSd2ZSBzZWVuIGluIGEgd2hpbGUuIExvb2sgYXQgdGhlIHNlY29uZCBndXkgaGUgdGFrZXMgZG93biBhZnRlciBoZSBoaXQgdGhlIGhlYWQgb2YgdGhlIGZpcnN0IGd1eSBhZ2FpbnN0IHRoZSB0YWJsZS4gV0hBVCBBIEhJVCEgQW5kIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZpbG0sIG9uZSBndXkgaW4gYSBjYXIgc2hvdCBvbmUgdGltZSwgdGhlbiAzIGd1eXMgZmFsbCwgaGUgaXMgcmVhbGx5IGdvb2QgYXQgYWltaW5nLiBJdCBjb3N0cyBhIGxvdCBvZiBtb25leSB0byBoaXJlIHRoZXNlIGd1eXMgbGlrZSBoaW0uIFRoZSBlbmQgd2FzIGJyaWxsaWFudCwgaXQgd2FzIHNvIGV4Y2l0aW5nIHRoYXQgamFtZXMgY2FoaWxsIHdhbGtzIDUgbWludXRlcyB1cCBhbmQgZG93biB0aGUgc3RhaXJzIGFuZCBzaG9vdCBqYXNvbiBwZXRlcnMgYWZ0ZXIgaGlzIGRpc3RyYWN0aW9uIG1vdmVzLiBKYXNvbiBQZXRlcnMgZmFsbHMgZG93biwgYW5kIHJvbGwgb3ZlciBhZ2FpbiB3aGlsZSBoZSBpcyBkZWFkISBJIGNhbid0IHNheSB3aXRoIG1vcmUgd29yZHMgaG93IGdyZWF0IHRoaXMgbW92aWUgaXMhKQAAAAAAAPA/CqUFCJQDEJQDIpMFd293ISBpdCdzIGV2ZW4gYmV0dGVyIHRoYW4gSSBleHBlY3RlZCEgdGhlIGJlc3QgYW5pbWF0ZWQgQXN0w6lyaXggbW92aWUgZXZlciEgYW5kIGl0IGZlZWxzIHNvIGdvb2QgdG8gaGVhciBSb2dlciBDYXJlbCBkb2luZyB0aGUgdm9pY2Ugb2YgQXN0w6lyaXggYWdhaW4hIEkgc3VyZWx5IHJlY29tbWVuZCBpdCB0byBldmVyeW9uZSB3aG8gbGlrZXMgdGhlIGNvbWljIGJvb2tzIG9mIEFzdMOpcml4ISBidXQgSSBzdWdnZXN0IHRoYXQgeW91IGdvIHRvIHNlZSB0aGUgZnJlbmNoIHZlcnNpb24sIGNhdXNlIGl0IHN1cmVseSBpcyB0aGUgYmVzdCBhbmQgeW91IGhlYXIgdGhlIG9yaWdpbmFsIGNhc3QhIGRpZCB5b3Uga25vdyB0aGF0IFJvZ2VyIENhcmVsIGhhcyBwbGF5ZWQgQXN0w6lyaXggZm9yIG5lYXJseSBmb3J0eSB5ZWFycz8gaSB0aGluayBoZSBkaWQgYSBtYXJ2ZWxvdXMgam9iISBhbmQgdGhlIHNvbmcgZnJvbSBDw6lsaW5lIERpb24gYXQgdGhlIGVuZCBmaXRzIHJhbGx5IGdvb2QgdG8gdGhlIGVuZCBjcmVkaXRzISB0aGUgbXVzaWMgaXMgZ29vZCwgdGhlIGRyYXdpbmdzIGFyZSBnb29kLCB0aGUgYWN0b3JzIGFyZSB3b25kZXJmdWwuLi4gaW4gYSB3b3JkOiBhIG1hc3RlcnBpZWNlISBnbyB0byBzZWUgaXQhIHlvdSB3aWxsIG5vdCByZWdyZXQgdGhpcyEpAAAAAAAA8D8KoQgIlQMQlQMijwh3b3chIGkgd2F0Y2hlZCB0aGUgdHJhaWxlciBmb3IgdGhpcyBvbmUgYW5kIHRob3VnaCAnbmFoLCB0aGlzIG9uZSBpcyBub3QgZm9yIG1lJy4gaSB3YXRjaGVkIG15IGh1c2JhbmQgYW5kIG91ciBmcmllbmQncyBmYWNlcyBkdXJpbmcgdGhlIHRyYWlsZXIsIGFuZCBrbmV3IHRoaXMgd2FzIGEgJ2JveSBtb3ZpZScuIGkgbWVhbiwgaGFsbG8hIGEgYnVuY2ggb2YgY2hpY2sgYmFybWFpZHMgdGhhdCBkYW5jZSAtIGFub3RoZXIgc3RyaXB0ZWFzZT88YnIgLz48YnIgLz50aGVuLCBpIHN0YXJ0ZWQgd2F0Y2hpbmcgaXQsIGl0IGRpZG4ndCBsb29rIGFsbCB0aGF0IGJhZC4gc28gaSBjYXJyaWVkIG9uIHdhdGNoaW5nLiBpIHdhdGNoZWQgaXQgcmlnaHQgdG8gdGhlIGVuZC4gd2hhdCBhbiBhd2Vzb21lIG1vdmllLiBpZiBhbnl0aGluZywgdGhpcyBpcyBhIGNoaWNrLWZsaWNrLiB0aGVzZSBnaXJscyBoYXZlIGF0dGl0dWRlLiBpdCBpcyByZWFsbHkgYSBmZWVsLWdvb2QgbW92aWUsIGFuZCBhIGJpdCBvZiBhIGxvdmUgc3RvcnkuIHJlYWxseSBsZWF2ZXMgeW91IHdpdGggYSBuaWNlIGZlZWxpbmcuPGJyIC8+PGJyIC8+YmFzaWNhbGx5LCB0aGUgc3Rvcnkgb2YgYSBzbWFsbC10b3duIGdpcmwgbWFraW5nIGl0IGJpZyBpbiB0aGUgY2l0eSwgYWZ0ZXIgZ29pbmcgdGhyb3VnaCB0aGUgdXN1YWwgYmlnLWNpdHkgYyoqcC4gdGhlcmUgaGF2ZSBiZWVuIGEgY291cGxlIG9mIHRoZXNlLCBpdCBpcyBhbG1vc3QgYSBuZXcgdXJiYW4gbGVnZW5kLiBidXQgaXQgYWxzbyBtYWtlcyB5b3UgdGhpbmsgb2YgeW91ciBsaWZlLCBhbmQgd2hhdCB5b3UgaGF2ZSBhY2hpZXZlZC4gd2VsbCwgbWUgYW55d2F5LiBpIHRoaW5rIGl0IGlzIGJlY2F1c2UgdGhlIHdob2xlIHdvcmtpbmcgaW4gYSBiYXIgc2NlbmFyaW8gaXMgdmVyeSBmYW1pbGlhciwgbm90IGp1c3QgZm9yIG1lLCBidXQgZm9yIG1hbnkgcGVvcGxlIGkga25vdy4gRG9uJ3QgdHJ1c3QgdGhlIHRyYWlsZXJzIGZvciB0aGlzIG9uZSAtIGl0IGlzIGFpbWVkIGF0IGJyaW5naW5nIHRoZSBtZW4gaW4uKQAAAAAAAPA/CpQFCJYDEJYDIoIFd293ISBpIGp1c3QgaGF2ZSB0byBzYXkgdGhpcyBzaG93IGlzIHN1cGVyIGNvb2whIGkgZmVsbCBpbiBsb3ZlIHdpdGggdGhlIHNob3cgZnJvbSB0aGUgYmVnaW5uaW5nISB0aGUgaWRlYSBvZiB0aGUgc2hvdyBpcyB2ZXJ5IG9yaWdpbmFsIGFuZCB2ZXJ5IHNvb3RoaW5nISBpdCdzIGFsc28gYSBwbGVhc3VyZSB0byB3YXRjaCB0aGUgcGVyZm9ybWFuY2UgdGhlIHR3byBsb3ZlbHkgbGVhZGluZyBsYWRpZXMgZ2l2ZSwgTGF1cmVuIEdyYWhhbSBhbmQgQWxleGlzIEJsZWRlbCEgdGhleSdyZSBzaW1wbHkgd29uZGVyZnVsISBpJ20gZXNwZWNpYWxseSBhIGJpZyBhZG1pcmVyIG9mIExhdXJlbiBHcmFoYW0hIHNoZSdzIG5vdCBqdXN0IGEgcHJldHR5IGZhY2UsIHNoZSdzIGEgIm1vbnN0ZXIiIG9mIGFuIGFjdHJlc3MgYXMgd2VsbCEgaSdtIG5vdCBzYXlpbmcgdGhhdCBBbGV4aXMgaXNuJ3QgYSB3b25kZXJmdWwgYWN0cmVzcyBhcyB3ZWxsLi4uIGkganVzdCBoYXBwZW4gdG8gbGlrZSBMYXVyZW4gYmV0dGVyISBhbnl3YXkgaXQncyBhIHJlYWwgZGVsaWdodCBzZWVpbmcgdGhlbSBvbiBzY3JlZW4sICJzcGFyaW5nIiB3aXRoIHdvcmRzISBpbiB0aGUgd29yZHMgb2YgdGhlIGltbW9ydGFsIEppbSBDYXJyZXkgIkItRS1BLVVUSUZVTCEiKQAAAAAAAPA/Cr0GCJcDEJcDIqsGd293IGlzIGFsbCBpIGNvdWxkIHNheSBpIHJlYWxseSBsb3ZlZCB0aGUgbW92aWUgYW5kIG9uZSB0aGluZyBpIGNvdWxkIHNheSB0byBBYXJvbiBjYXJ0ZXIgaXMgdGhhdCBpIHJlYWxseSB0aGluayB0aGF0IHlvdSBzaG91bGQgYmUgaW4gYSBsb3QgbW9yZSBtb3ZpZXMgY2F1c2UgeW91IHJvY2suaSBsb3ZlIEFhcm9uIGNhcnRlciBzbyBtdWNoIGhlcyBob3QgYW5kIHNvIGkgc2F5IHRoYW5rIHlvdSBhIGxvdCBmb3IgbWFraW5nIHRoaXMgbW92aWUgZ3JlYXQuaSByZWFsbHkgZG8gc28gd2lzaCBoZSB3b3VsZCBiZSBhYmxlIHRvIG1ha2UgYSBsb3QgbW9yZSBtb3ZpZXMgYmVjYXVzZSBoZSBoaXMgYSBncmVhdCBkYW5jZXIsIGFjdG9yLCBhbmQgc2luZ2VyLiBpIHNvIHdpc2ggaSBjb3VsZCBzaW5nIGFzIGdvb2QgYXMgaGUgY291bGQuIGFuZCBJJ3ZlIGJlZW4gYSBmYW4gb2YgaGlzIGZvciBsaWtlIGV2ZXIgYW5kIGkgd2lsbCBuZXZlciBldmVyIHN0b3AgbG92aW5nIGhpbS4gaSByZW50ZWQgdGhlIG1vdmllIGFuZCBJJ3ZlIGhhZCBpdCBmb3IgdHdvIGRheXMgYW5kIGl2J2UgbGl0ZXJhbGx5IHdhdGNoZWQgaXQgb3ZlciBsaWtlIDEwIHRpbWVzLiBsYXVnaCBvdXQgbG91ZCB5b3UgY291bGQgY2FsbCBtZSBjcmF6eSBidXQgdGhhdCBqdXN0IHByb3ZlcyB0aGF0IGkgbGlrZWQgaXQgYSBsb3QuIGlmIHUgd2FubmEgdGFsayB5b3UgY2FuIGhpdCBtZSB1cCBhdCBkdmxiYWIzMDBAYW9sLmNvbSBzbyBlLW1haWwgbWUgaWYgeW91IHdhbm5hLiBJIExPVkUgWU9VIEFBUk9OIENBUlRFUiEhISEhISEhISEhISEhISEhISEhISEhISEhISkAAAAAAADwPwrYBQiYAxCYAyLGBXdvdyBpIHBheWVkIMKjMy41MCB0byBnbyBzZWUgdGhpcyBtb3ZpZSBhdCB0aGUgY2luZW1hLiBDYW50IGJlbGlldmUgaSB3YXN0ZWQgbXkgdGltZS4gVGhlIGFjdGluZyBpcyBjcmluZ2Ugd29ydGh5IGF0IGJlc3QgYW5kIHRoZSBzcGVjaWFsIGVmZmVjdHMgYXJlIGNydWRlLiBQcm9iYXJseSB0aGUgd29yc3Qgc2NyaXB0IGluIGhpc3Rvcnkgc29tZSBleHRyZW1lbHkgZW1iYXJyYXNzaW5nIHF1b3RlcyBpIGhhdmUgZXZlciBoZWFyZCBpbiBteSBsaWZlLiBJIHN3ZWFyIHRvIGdvZCAnc3dlcHQgYXdheScgaXMgYmV0dGVyIHRoYW4gdGhpcy4gTWFkb25uYSBzaG91bGQgb2Ygd29uIGFuZCBPc2NhciBjb21wYXJlZCB0byB0aGVzZSBndXlzLiBBbiBob3VyIGFuZCBhIGhhbGYgb2YgbXkgbGlmZSBpIHdhbnQgYmFjay4gSG9uZXN0bHkgcGVvcGxlIGRvbid0IHNlZSB0aGlzLCBldmVuIHRvZGRsZXIgd291bGQgZmluZCB0aGlzIG1vdmllIGFuIGluc3VsdCB0byB0aGVpciBpbnRlbGxpZ2VuY2UuIGkgZm91bmQgdGhpcyBtb3ZpZSB2ZXJ5IHN0cmFuZ2UgaW4gdGhlIGZhY3QgdGhhdCBpdCB3YXMgaGFyZCB0byB0ZWxsIHdobyBpcyBtb3JlIHdvb2RlbiwgdGhlc2VzIGd1eXMgaGVyZSBvZiB0aGUgYWN0dWFsIHB1cHBldHMuIHBsZWFzIGd1eXMgZG9uJ3Qgd2FzdGUgeW91ciB0aW1lIG9uIHRoaXMgbW92aWUgeW91IHdpbGwgbGl2ZSB0byByZWdyZXQgaXQuKQAAAAAAAPA/CvIGCJkDEJkDIuAGd29yc3QuIG1vdmllLiBldmVyIG1hZGUuIEVWRVIuIEkgaGF2ZSBubyB3b3JkcyB0byBzYXkgYWJvdXQgaXQuLiBvdGhlciB0aGVuIGl0IHRydWx5IGhhZCBubyBwb2ludCwgbm8gcGxvdCwgbm8uLi4gYW55dGhpbmcuIHNoZWVyIGNyYXAhISEgSSBkb24ndCBrbm93IGhvdyBldmVyeW9uZSBpbiB0aGUgbW92aWUgZGlkbid0IHNob290IHRoZW0gc2hlbHZlcyBhZnRlciB3YXRjaGluZyBpdC4uLi4gLi4uLiAuLi4uIC4uLiAuLiBJIGxvdmUgdmFtcGlyZSBmbGlja3MgYW5kIG15c3RlcmllcywgYW5kIGFsdGVybmF0ZSBhYnN0cmFjdCBvdXRzaWRlIHRoZSBib3ggZmlsbXMsIGFuZC4uLi4gdGhpcyB3YXMgbm9uIG9mIHRob3NlLiBJIG1lYW4gd2hhdCB0aGUgY3JhcCEhISBJIGNhbnQgZXZlbiB0ZWxsIHlvdSB3aGF0IHRoZSBmaWxtIHdhcyBhYm91dCBjdXogSSBzdGlsbCBkb24ndCBrbm93LCBhbmQgSSBqdXN0IHdhc3RlZCBhbiBob3VyIGFuZCBhaGFsZiBvZiBteSBsaWZlIHdhdGNoaW5nIGl0Li4uIGJvdHRvbSBsaW5lLi4gSSB0aGluayB0aGUgbWFrZXIgb2YgdGhpcyBmaWxtIGp1c3Qgd2FudHMgZXZlcnlvbmUgdG8gZG8gZHJ1Z3MuIHRoYXRzIHRoZSBvbmx5IHRoaW5nIEkgZ290IGZyb20gdGhpcyBmaWxtLiBwbGVhc2UgZG9uJ3Qgd2F0Y2ggdGhpcy4uLiBJIG1lYW4gZm9yIGEgIiBzdWx0cnkgc2Vuc3VhbCB2YW1waXJlIGZsaWNrIiB0aGVyZSB3YXNuJ3QgZXZlbiB0aGUgdG8gYmUgZXhwZWN0ZWQgbnVkaXR5IHlvdSdkIGdldCBmcm9tIGEgdmFtcCBmbGljay4gYW55d2F5IGJhY2sgdG8gbXkgcG9pbnQuLi4uIHRoaXMgbW92aWUgYmxvd3MuIGdvIHNldCB5b3Vyc2VsZiBvbiBmaXJlIGluc3RlYWQuLi4uIC4uIC4uKQAAAAAAAPA/CtMBCJoDEJoDIsEBd29uZGVyZnVsIG1vdmllIHdpdGggZ29vZCBzdG9yeSBncmVhdCBodW1vdXIgKHNvbWUgZ3JlYXQgb25lLWxpbmVycykgYW5kIGEgc291bmR0cmFjayB0byBkaWUgZm9yLjxiciAvPjxiciAvPmkndmUgc2VlbiBpdCAzIHRpbWVzIHNvIGZhci48YnIgLz48YnIgLz50aGUgYW1lcmljYW4gYXVkaWVuY2VzIGFyZSBnb2luZyB0byBsb3ZlIGl0LikAAAAAAADwPwqPBQibAxCbAyL9BHdpdHR5LiBmdW5ueS4gaW50ZWxsaWdlbnQuIGF3ZXNvbWUuIGkgd2FzIGZsaXBwaW5nIGNoYW5uZWxzIGxhdGUgb25lIG5pZ2h0IHllYXJzIGFnby4gY2FtZSBhY3Jvc3MgdGhpcyBhbmQgYSB3aWxkZmlyZSBzdGFydGVkLiBpIHdhcyBzdGF5aW5nIHVwIGxhdGUgZXZlcnkgbmlnaHQgYW5kIHRhcGluZyBpdCBmb3IgZXZlcnlvbmUgaSBrbm93LiBhIGZldy4gbGlrZSAzIHBlb3BsZSBvdXQgb2YgdGhlIGFsbW9zdCAxMDAgcGVvcGxlIGkgbWFkZSB3YXRjaCB0aGlzIGRpZG4ndCB0aGluayBpdCB3YXMgYXMgYXdlc29tZSBhcyBpIGRpZC4gdGhlIG90aGVycyB3ZXJlIGxhdWdoaW5nIG91dCBsb3VkIHNvIGhhcmQgdGhleSB3ZXJlIGNyeWluZyBhbmQgdGhhbmtpbmcgbWUgYXQgdGhlIHNhbWUgdGltZS4gcGxlYXNlIGRvIHlvdXJzZWxmIGEgZmF2b3IuIHJ1biBkb24ndCB3YWxrLiB3YXRjaCB0aGlzIGFuZCBlbmpveS4gaW50ZWxsaWdlbmNlIGFuZCBodW1vci4gaXQncyBhIHdpbi13aW4gc2l0dWF0aW9uLiBpIHdpc2ggaSBjb3VsZCBoYXZlIGFmdGVybm9vbiB0ZWEgd2l0aCBoaW0gYW5kIG1lZXQgdGhlIHRydWx5IHJhcmUgY29tZWRpYW4gdGhhdCB3ZSBhcyBhIHNvY2lldHkgbmVlZCBtb3JlIG9mLi4uLnNhbmVjaGFvcy4pAAAAAAAA8D8KmQgInAMQnAMihwh3aXRob3V0IGEgZG91YnQsIG9uZSBvZiB0aGUgbW9zdCByYWNpYWxseSBwcmVqdWRpY2VkIGZpbG1zIGkndmUgZXZlciBzZWVuLCB3aXRoIHRoZSBwcmVqdWRpY2UgYmVpbmcgbGV2ZWxsZWQgYWdhaW5zdCBIYXlkZW4gUGFuZXR0aWVyZSBhcyBzaGUgaGFzIHRvIG1vdmUgaW50byBhIHRvdWdoIGlubmVyIGNpdHkgc2Nob29sLiBTaGUgaXMgY29uc3RhbnRseSBjYWxsZWQgIndoaXRlIGdpcmwiIGFuZCBvdGhlciBzbHVycyBiYXNlZCBvbiBoZXIgY29sb3VyLiBGaXJzdGx5IHdvdWxkIHRoaXMgYmUgYWxsb3dlZCB0aGUgb3RoZXIgd2F5IGFyb3VuZCBpZiBhIGJsYWNrIGdpcmwgd2FzIHRoZSBidXR0IG9mIGFsbCB0aGUgYWJ1c2U/IGFuZCBzZWNvbmRseSB0aGUgc3RlcmVvdHlwaW5nIG9mIHRoZSBldGhuaWMga2lkcyBmcm9tIHRoZSBpbm5lciBjaXR5IHNjaG9vbCBpcyBhbHNvIGEgZGlzZ3JhY2UuIFRoZSB3cml0ZXJzIGFwcGFyZW50IGRlc2lyZSB0byBzaG93IHRoZXkgd2VyZSAiaGlwIiBhbHNvIGV4dGVuZGVkIHRvIG1pc3NpbmcgdGhlIHBvaW50IHRoYXQgdGhlIGlubmVyIGNpdHkgc2Nob29sIHdpbiB0aGUgY2hlZXJsZWFkaW5nIGNvbXBldGl0aW9uLCBub3QgdGhyb3VnaCB0YWxlbnQgYnV0IGJ5IGludGltaWRhdGluZyB0aGVpciB3aGl0ZSBvcHBvbmVudHMhISB0aGVzZSBvdmVydG9uZXMgdG8gdGhlIGZpbG0gdG9vayBpdCBhd2F5IGZyb20gaXQncyBleHBlY3RlZCBkaXJlY3Rpb24gb2YgYSBoYXJtbGVzcyBsaWdodGhlYXJ0ZWQgY29tZWR5IHN1aXRhYmxlIGZvciBhIGZhbWlseSBhdWRpZW5jZSBpbnRvIGEgdmVoaWNsZSB0aGF0IGRvZXMgbm9uZSBvZiB0aGUgcGFydGljaXBhbnRzIGFueSBjcmVkaXQuIEhheWRlbiBQYW5ldHRpZXJlIGhhcyBzdGFyIHF1YWxpdHkgYnV0IEkgd291bGQgYmUgc3VycHJpc2VkIGlmIGFueSBvZiB0aGUgcmVzdCBvZiB0aGUgY2xhc3MgZXZlciBnZXQgbXVjaCBmdXJ0aGVyLiBBbGwgaW4gYWxsIGEgY2hhcm1sZXNzIGZpbG0gdGhhdCB3YXMgYSB3YXN0ZSBvZiB0aW1lLikAAAAAAADwPwqsDQidAxCdAyKaDXdpdGhpbiBhYm91dCA1IG1pbnV0ZXMgaW4gdG8gdGhlIGZpbG0gdGhlIGZpcnN0IGZpZ2h0IHNjZW5lIGkgd2FzIHdhdGNoaW5nIGkganVzdCBjb3VsZCBoZWxwIGJ1dCBwb2ludG91dCB0aGUgbGFjayBvZiB0ZW5zaW9uIGluIHRoZSBzY2VuZSB0aGUgY2FtZXJhcyBjcm9zc2luZyBiYWNrIGFuZCBmb3J0aCByZWFsbHkgc2hvd3MgaGUgaGFkIG5vIGlkZWEgd2hhdCBoZSB3YXMgZG9pbmcsIHdlbGwgYWN0dWFsbHkgdGhlIHNvdW5kdHJhY2sgc2hvd3MgdGhhdCB0aGUgYmVzdC4gaSBubyBpdHMgYSBsb3cgYnVkZ2V0IGZpbG0gYW5kIHlvdXIgbm90IGdvaW5nIHRvIGdldCB0b3AgNDAgc29uZ3MgYnV0IGF0IGxlYXN0IGdldCBtdXNpYyB0aGF0IGdvZXMgd2l0aCB0aGUgc2NlbmUgdGhhdCBpc24ndCBhY3R1YWxseSB0aGF0IGhhcmQgYWN0aW5nLCB3ZWxsIGlmIGkgc2F3IGFueSBpIHdvdWxkIGdsYWRseSBsZXQgeW91IGtub3cuIHRoZSBzY3JpcHQgd2FzIHNvIGJhZGx5IHdyaXR0ZW4gd291bGQgbm93IHN1cnByaXNlIG1lIG9uZSBiaXQgb2YgdGhlIGd1eSBkaXJlY3Rpbmcgd3JvdGUgdGhpcyBwaWVjZSBvZiBiZWVwLCBpIHdpbGwgZ2l2ZSB0aGUgcGVyc29uIG9uZSAxMC8xMCBhbmQgdGhhdCB3YXMgZm9yIHRoZSBEVkQgY292ZXIgYmVjYXVzZSBpZiBpIGFjdHVhbGx5IHNhdyAiYmVmb3JlIHdhdGNoaW5nIHRoaXMiIGluIGEgc2hvcCBhbmQgaXQgd2FzIGxpa2UgMTAgMTUgYnVja3MgaSB3b3VsZCBoYXZlIGJvdWdodCBpdCwgd2h5IHdlbGwgaWYgeW91IGxvb2sgYXQgdGhlIGZyb250IGNvdmVyIHRoaXMgYWN0dWFsbHkgd2VsbCBkb25lIHlvdSBmbGlwIG92ZXIgdG8gdGhlIGJhY2sgYW5kIHlvdSBzZWUgdGhhdCBpdCBoYXMgYWN0dWFsbHkgd29uIGF3YXJkcy4gbm93IHRoYXQgaXMgYSB2ZXJ5IG1pc2xlYWRpbmcgdGhpbmcgYmVjYXVzZSBldmVuIGluIGEgc21hbGwgZmlsbSBmZXN0aXZhbCBpIHdvdWxkbid0IGV2ZXIgYmVsaWV2ZSBpbiBteSBsaWZlIHRoYXQgdGhpcyB3b3VsZCB3aW4gYW55dGhpbmcgYWxsIGkgY2FuIHNheSBpcyAid293IGlmIHRoaXMgd2FzIHRoZSBiZXN0IGkgd291bGRuJ3Qgd2FudCB0byBrbm93IHdoYXQgdGhlIGNyYXAgaW4gdGhlIGZpbG0gZmVzdGl2YWwgd2FzIGxpa2UiPGJyIC8+PGJyIC8+ZmlsbXMgdGhhdCBhcmUgdGhpcyBiYWQgb25seSBoYXZlIG9uZSBnb29kIHVzZSBhbmQgdGhhdCBpcyBmb3IgYSBhc3BpcmluZyBmaWxtIG1ha2VyIHRvIHVzZSBhcyBpbnNwaXJhdGlvbiBmaWxtcyBsaWtlIHRoaXMgYXJlIGJldHRlciB0b29scyB0aGVuIGdvb2QgZmlsbXMsIGJlY2F1c2Ugd2l0aCBnb29kIGZpbG0geW91IGFsbW9zdCBrbm93IG9mZiB0aGUgYmF0IHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgeW91IHdvbnQgbWFrZSBhIGZpbG0gdGhhdCBnb29kLCBidXQgaWYgeW91IHVzZSBhIGZpbG0gbGlrZSB0aGlzIHlvdSBjYW4gbG9vayBhdCBhbGwgdGhlIHRoaW5ncyB0aGV5IGRpcmVjdG9yIG9yIHdyaXRlciBkaWQgd3Jvbmcgc28geW91IHdvbnQgbWFrZSB0aGUgc2FtZSBtaXN0YWtlcywgYW5kIHlvdSBoYXZlIHRoZSBhZGRlZCBwbHVzIG9mIGxvb2tpbmcgYXQgdGhpcyBmaWxtIGFuZCBzYXlpbmcgaWYgYSBwaWVjZSBvZiBiZWVwIGxpa2UgdGhpcyBjYW4gZ2V0IG1hZGUgdGhlbiB0aGVyZSBpcyBob3BlIG9mIGFueW9uZSBvdXQgdGhlcmUpAAAAAAAA8D8K/wIIngMQngMi7QJ3aXRoIHdoYXQgdGhleSBoYWQuIEpvaG4gYW5kIENhcm9seW4gd2VyZSB2ZXJ5IHByaXZhdGUgc28gdGhlIHdyaXRlcnMgaGFkIHRvIHB1dCB0b2dldGhlciB3aGF0IHRoZXkgY291bGQuIEkgcmVhbGx5IGxpa2VkIFBvcnRpYSBkZSBSb3NzaSBhcyBDYXJvbHluLCBidXQgSmFjcXVlbGluZSBCaXNzZXQncyB2b2ljZSBncmF0ZWQgb24gbXkgbmVydmVzLiBTaGUgc2hvdWxkIGhhdmUgdXNlZCBoZXIgcmVndWxhciB2b2ljZS4gSSB3b3VsZCBoYXZlIHByZWZlcnJlZCB0aGF0IHRoZSB3aG9sZSBtb3ZpZSBmb2N1cyBvbiBKb2huIGFuZCBDYXJvbHluIGluc3RlYWQgb2YgcmVoYXNoaW5nIHN0dWZmIHdlIGFscmVhZHkga25vdyBhYm91dCBKb2huLikAAAAAAADwPwrIAQifAxCfAyK2AXdpdGggdmVyeSBsaXR0bGUgc2NyZWVuIHRpbWUgYW5kIG1vbmV5LCBEYW4gS2F0emlyIG1hbmFnZXMgdG8gZG8gc28gbXVjaC4gVGhpcyBtb3ZpZSwgaW4gaXRzIGhlYXJ0LXdhcm1pbmcgc2ltcGxpY2l0eSwgdG91Y2hlcyB0aGUgYmVhdXR5IG9mIGxvdmUgZnJvbSBhIGZyZXNoIGFuZ2xlLiByZWp1dmluYXRlZCBsdXN0KQAAAAAAAPA/CuAECKADEKADIs4Ed2l0aCB0d28gb2xkIGZyaWVuZHMuPGJyIC8+PGJyIC8+SSd2ZSBhbHdheXMgZW5qb3llZCBib3RoIExlbW1vbidzIGFuZCBNYXRoYWV1J3MgZmlsbXMsIGFuZCBvZiBjb3Vyc2UgdGhlaXIgdGVhbSBlZmZvcnRzIGFyZSBhbHdheXMgd29ydGggd2F0Y2hpbmcsIGFuZCBvZnRlbiBoaWxhcmlvdXMuPGJyIC8+PGJyIC8+QWx0aG91Z2ggSSBkaWRuJ3QgcGVyc29uYWxseSByZWdhcmQgdGhpcyBmaWxtIGFzIGluIHRoZSBoaWxhcmlvdXMgY2F0ZWdvcnksIGl0IGlzIGNlcnRhaW5seSBhIGNvbXBldGVudCBhbmQgZW50ZXJ0YWluaW5nIHZlaGljbGUgZm9yIGZhbnMgb2YgdGhlIHR3byBwcmluY2lwbGUgYWN0b3JzIGFuZCBvZiA2MHMgc3R5bGUgcm9tYW50aWMgY29tZWR5IHBsb3RzLjxiciAvPjxiciAvPkJyZW50IFNwaW5lciBtYXkgYWN0dWFsbHkgc3RlYWwgdGhlIHNob3cgaW4gdGVybXMgb2YgbGF1Z2hzIGFzIHRoZSBhcnJvZ2FudCBhbmQgdHlyYW5uaWNhbCBDcnVpc2UgRGlyZWN0b3IuPGJyIC8+PGJyIC8+R2xvcmlhIERlSGF2ZW4gcHJvdmVzIHRoYXQgc2VuaW9yIGxhZGllcyBjYW4gcmVtYWluIGVub3Jtb3VzbHkgYXR0cmFjdGl2ZS4pAAAAAAAA8D8K9wUIoQMQoQMi5QV3aXRoIHRoaXMgZmlsbSBiZWluZyBkaXJlY3RlZCBieSBSb2dlciBBdmVyeSBhbmQgUXVlbnRpbiBUYXJhbnRpbm8gZG9pbmcgdGhlIHNjcmVlbnBsYXkgaSB3YXMgc3VyZSB0aGlzIHdhcyBnb2luZyB0byBiZSBhIGdlbS4gaSB3YXMgd3JvbmcuIGkgZG9uJ3QgaGF0ZSB0aGlzIGZpbG0gYnV0IGluIG5vIHdheXMgZG8gaSBsaWtlIGl0LjxiciAvPjxiciAvPmkgbG92ZSBSb2dlciBBdmVyeSBiZWNhdXNlIG9mIGhpcyBhbWF6aW5nIGRpcmVjdGlvbiBpbiBydWxlcyBvZiBhdHRyYWN0aW9uIGFuZCBoaXMgc2NyZWVucGxheXMgdG8gcHVscCBmaWN0aW9uIGFuZCBzaWxlbnQgaGlsbCBidXQgaGUgbWFkZSBhIG1pc3Rha2UgbWFraW5nIHRoaXMuIGRvIGkgcmVhbGx5IG5lZWQgdG8gY29tbWVudCBvbiBUYXJhbnRpbm8sIHdlIGFsbCBrbm93IGhlcyBhIGdlbml1cy48YnIgLz48YnIgLz50aGlzIG1vdmllIGlzIGp1c3Qgc2V0IGFyb3VuZCBhIGdhbmcgcm9iYmluZyBhIGJhbmsgYnV0IGZhaWxzIGR1ZSB0byBzaWxseSBwZW9wbGUgcGFydGljaXBhdGluZyBpbiB0aGUgcm9iYmVyeTxiciAvPjxiciAvPmknbSBkaXNhcHBvaW50ZWQgaW4gVGFyYW50aW5vIGFuZCBBdmVyeSBmb3IgZG9pbmcgdGhpcyBmaWxtIGJ1dCBkb2Vzbid0IGNoYW5nZSBteSBtaW5kIG9uIGhvdyBhbWF6aW5nIHRoZXkgYm90aCBhcmUuIGV2ZXJ5b25lIG1ha2VzIG1pc3Rha2VzLi4uLi4uLi4uIDMvMTAuLi4uLi4uLi4uLmouZCBTZWF0b24pAAAAAAAA8D8KlQUIogMQogMigwV3aXRoIHRoaXMgQUJDIGZhbWlseSBhdHRlbXB0IG9mIHRoZSBoaXQgYmxvY2tidXN0ZXIgImNoZWFwZXIgYnkgdGhlIGRvemVuIiBjb21lcyBhbiBvYm5veGlvdXMgYW1vdW50IG9mIGNvcm55IGRpYWxvZ3VlLCBzaGFsbG93IHBsb3QgbGluZXMsIGFuZCBjaGVlc3kgY29tZWJhY2tzLiBXaXRoIGFib3V0IHR3byBnb29kIGFjdG9ycyBhbW9uZyBtYW55IHdhbm5hLWJlJ3MsIHRoaXMgbW92aWUgd2FzIGEgbWFqb3IgZGlzYXBwb2ludG1lbnQuIEl0cyBhIEhvbGx5d29vZC13YW5uYWJlIGRpdHRvIG9mIGFuIGFscmVhZHkgYmFkIHBsb3QuIFRoZW4sIGJlY2F1c2UgdGhleSBuZWVkZWQgYSBsb3Qgb2YgYWN0b3JzLCB0aGF0IG1lYW50IHRoYXQgdGhleSdkIHByb2JhYmx5IGJlIG1vcmUgbGVuaWVudC4gU28gdGhlIGFjdGluZyB3YXNuJ3QgZml2ZS1zdGFyLiBUaGUgcGxvdCBtb3ZlZCBmYWlybHkgZmFzdCwgYW5kIHRoZSB0d2lzdHMgd2VyZSBiYWQgYW5kIGhhZCBob3JyaWJsZSB0aW1pbmcuIFRoZSBqdW5jdGlvbiBvZiBjaGFyYWN0ZXJzIGFuZCB0aGUgImVuZCByZWxhdGlvbnNoaXBzIiB3ZXJlIGFsc28gdG9vIG11c2h5IGFuZCBjbGljaMOpZCBmb3IgbWUuIFNwYXJlIHlvdXJzZWxmIGFuZCByZW50IHNvbWV0aGluZyBiZXR0ZXIuKQAAAAAAAPA/CocKCKMDEKMDIvUJd2l0aCB0aGF0LCBjYXJyeSB0aGUgc2FtZSBkYXJrIHdlYWtuZXNzZXMgd2UgYWxsIHVuZm9ydHVuYXRlbHkgcG9zc2VzczogbHlpbmcsIGRlY2VwdGlvbiwgbGF6aW5lc3MsIHRoZSBsaXN0IGdvZXMgb24uPGJyIC8+PGJyIC8+SG93ZXZlciwgYXMgYW4gQW1lcmljYW4sIEkgd2FzIHNob2NrZWQgdG8gc2VlIHRoYXQgY29ycnVwdGlvbiBhbmQgcmFjaXNtIGV4aXN0IGluIHRvZGF5J3MgcG9saWNlIGZvcmNlIGFzIGlzIHJlZmxlY3RlZCB3aXRoIHRoZSBEdXZhbCBDb3VudHkgU2hlcmlmZiBEZXBhcnRtZW50J3MgaG9ycmlibGUgZGV0ZWN0aXZlIGFuZCBwb2xpY2Ugd29yayB3aXRoIHRoZSBtdXJkZXIgb2YgYSB3aGl0ZSBmZW1hbGUgdG91cmlzdCBhbmQgYSAxNS15ZWFyIG9sZCBhY2N1c2VkIGJsYWNrIHlvdXRoLiBJIHNob29rIG15IGhlYWQgaW4gc2hhbWUgdGhhdCBkZXRlY3RpdmVzIHdlcmUgcHJvdGVjdGVkIGZyb20gdGhlaXIgYWJ1c2l2ZSB3b3JrIHdoaWxlIGEgeW91bmcgbWFuJ3MgTElGRSBodW5nIGluIHRoZSBjcm9va2VkIGJhbGFuY2Ugb2YganVzdGljZS48YnIgLz48YnIgLz5Ib3dldmVyLCB0aGVyZSBpcyBhbHNvIGEgc3Rvcnkgb2YgaG9wZSB3aXRoIG91ciBqdWRpY2lhbCBzeXN0ZW0gYW5kIGhvdyBwb29ybHktcGFpZCBwdWJsaWMgZGVmZW5kZXJzIHN0dWNrIGJ5IHRoZWlyIGd1bnMgKGlyb255IGludGVuZGVkKSBhbmQgZm9yY2VkIHRoZSB0cnV0aCBmcm9tIHRoZSBkZXRlY3RpdmVzLiBJIHdhbnRlZCB0byBmbHkgZG93biB0byBGbG9yaWRhIGFuZCB0ZWxsIGFueWJvZHkgd2l0aCBpbmZsdWVuY2Ugd2hhdCBhIGdyZWF0IHB1YmxpYyBkZWZlbmRlciB0ZWFtIHRoZXkgaGF2ZSBpbiBEdXZhbCBDb3VudHk7IHRob3NlIGxhd3llcnMgY2FyZSBhYm91dCB0aGUgImxpdHRsZSIgbWFuIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgZm9yIGp1c3RpY2UuPGJyIC8+PGJyIC8+VGhlIG90aGVyIHN0b3J5IGxpbmUgaXMgYWJvdXQgZmFpdGggYW5kIGZhbWlseS4gUHJhaXNlcyB0byB0aGUgYWNjdXNlZCdzIGZhbWlseSBhbmQgdGhlaXIgc3Ryb25nIENocmlzdGlhbiAoc3VibWl0IGFueSBkZWRpY2F0ZWQgcmVsaWdpb24pIGJlbGllZnMgYW5kIHdvbmRlcmZ1bCBmYW1pbHkgdmFsdWVzLiBJIGhvcGUgdGhleSB3aW4gdGhlaXIgbGF3c3VpdCBhZ2FpbnN0IHRoZSBEdXZhbCBDb3VudHkgU2hlcmlmZidzIERlcGFydG1lbnQuPGJyIC8+PGJyIC8+QnJhdm8gZm9yIGp1c3RpY2UhISEgQnJhdm8gZm9yIHRoZSBsaXR0bGUgZ3V5ISEhKQAAAAAAAPA/Cp4HCKQDEKQDIowHd2l0aCBhbGwgdGhlIEV1cm9wZWFuIHN0dWRpb3MgaW52b2x2ZWQgaW4gdGhpcyBvbmUsIHlvdSB3b3VsZCB0aGluayB5b3UnZCBhdCBsZWFzdCBnZXQgc29tZSBwcmV0dHkgcGhvdG9ncmFwaHk7IGJ1dCB0aGUgbG9jYWwgY29sb3IgaXMga2VwdCB0byBhIG1pbmltdW0uPGJyIC8+PGJyIC8+SXJyaXRhdGlvbiAjMSBpcyBNaXJhIFNvcnZpbm8gdXNpbmcgYSBSdXNzaWFuIGFjY2VudCBpbiBvcmRlciB0byBwbGF5IGEgU3BhbmlzaCBjb3AgLSBXVEY/IFRoZSBzdG9yeSBpcyBob3BlbGVzc2x5IGNvbmZ1c2VkLiBUaGVyZSdzIGEgc3VwcG9zZWQgcm9tYW50aWMgYmFjayBzdG9yeSB0aGF0IGlzIGludGVudGlvbmFsbHkgY29uZnVzZWQgLSBpcyBzaGUgb3IgaXNuJ3Qgc2hlIGEgbGVzYmlhbj8gLSBzZXJ2aW5nIG5vIHB1cnBvc2Ugd2hhdHNvZXZlci4gVGhlIGNvcHMgaW4gdGhlIG1vdmllIGFyZSB0aGUgbW9zdCBzdHVwaWQgdG8gaGF2ZSBncmFjZWQgYSBzZXJpYWwga2lsbGVyIGZpbG0gaW4gYSBsb25nIHRpbWUuIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgbWVzc2FnZSBhYm91dCB0aGUgbWlkLSczMHMgU3BhbmlzaCBDaXZpbCBXYXIgQnV0IHNpbmNlIHByZXR0eSBtdWNoIGV2ZXJ5Ym9keSBpbnZvbHZlZCBpbiB0aGF0IGlzIGRlYWQsIG9uZSBkb2Vzbid0IHNlZSB0aGUgcG9pbnQgaW4gaXQuPGJyIC8+PGJyIC8+RGVzcGl0ZSB0aGUgYnVsbC1maWdodGluZyBiYWNrZHJvcCBvZiBwYXJ0IG9mIHRoZSBuYXJyYXRpdmUgKHdoaWNoIHBhcnQ/IHdobyBjYW4gdGVsbCksIHlvdSBuZXZlciBldmVuIGdldCBhIGdvb2QgbG9vayBhdCBhIGJ1bGwgZmlnaHQuIEVhcm5lc3QgSGVtaW5nd2F5IHdvdWxkIGhhdmUgcHVuY2hlZCB0aGUgZGlyZWN0b3IgaW4gdGhlIG5vc2UgLSB3aXRoIG15IGJsZXNzaW5ncy4pAAAAAAAA8D8KyAcIpQMQpQMitgd3aXRoIGEgdGl0bGUgbGlrZSB0aGlzLCB5b3Uga25vdyBub3QgdG8gZXhwZWN0IGEgZ3JlYXQgaG9ycm9yIG1vdmllLiBCdXQgdGhpcyB3YXMgcmVhbGx5IGJhZCwgZXZlbiB3aXRoIGxvdyBleHBlY3RhdGlvbnMuIFRoZSBwbG90IGlzIHJlYWxseSBpbnN1bHRpbmcgYW5kIHN0dXBpZDogYW4gZXNjYXBlZCBjcmltaW5hbCB3ZWFycyBhIEhhbGxvd2VlbiBtYXNrLCBzbyBldmVyeW9uZSBhcm91bmQgaGltIHRoaW5rcyBoZSdzIHNvbWVvbmUgZWxzZS4gdGhpcyBqb2tlIG1pZ2h0IGFjdHVhbGx5IHdvcmsgZm9yIDUgb3IgMTAgbWludXRlcywgYnV0IG5vdCBkdXJpbmcgdGhlIGVudGlyZSBtb3ZpZSAhIHRoZSBhY3RvcnMgYXJlIG5vdCB0aGF0IGJhZCwgYnV0IHRoZWlyIGNoYXJhY3RlcnMgYXJlIHJhdGhlciBkdW1iIGFuZCB0aGUgc3RvcnkgaXMgYm9yaW5nIGFuZCBkb3ducmlnaHQgc3R1cGlkLiBObyBzdXNwZW5zZSwgbm8gZXhjaXRlbWVudCBhbmQgbGl0dGxlIGdvcmUgKHZlcnkgY2hlYXApLiBTYXRhbidzIExpdHRsZSBIZWxwZXIgdHJpZXMgdG8gY29tYmluZSBob3Jyb3IgKC4uLikgd2l0aCBjb21lZHkgYW5kIGZhaWxzIGRyYW1hdGljYWxseSBhdCB0aGF0LiBJdCBiZWNhbWUgc28gYm9yaW5nIHRvd2FyZHMgdGhlIGVuZCwgdGhhdCBJIGFjdHVhbGx5IHN0b3BwZWQgd2F0Y2hpbmcgMTAgbWludXRlcyBiZWZvcmUgdGhlIGVuZC4gSSBjb3VsZG4ndCBjYXJlIHdoYXRldmVyIGhhcHBlbmVkLiBBbWFuZGEgUGx1bW1lciB3YXMgZ3JlYXQgaW4gUHVscCBGaWN0aW9uLCBidXQgY29tZSBvbi4uIHRoYXQgd2FzIDEzIHllYXJzIGFnbywgYW5kIHNoZSBoYXNuJ3QgZG9uZSBhbnl0aGluZyBkZWNlbnQgYWZ0ZXIgdGhhdC4gU28gbm8gd29uZGVyIHRoYXQgc2hlIGhhZCB0byBzaW5rIGFzIGxvdyBhcyB0aGlzIHBpZWNlIG9mIGNyYXAuLiBBdm9pZCBvciBiZSB3YXJuZWQuLikAAAAAAADwPwrPCQimAxCmAyK9CXdob21ldmVyIHRob3VnaHQgb2YgaGF2aW5nIHNlcXVlbHMgdG8gSXJvbiBFYWdsZSBtdXN0IGJlIHNob3QuIEluIHRoaXMgY2FzZSBvbmNlIHdhcyBlbm91Z2guIElyb24gRWFnbGUgd2FzIGEgZ29vZCBtb3ZpZSB0byB3YXRjaC4gRXZlbiB0aG91Z2ggaXQgaXMgdW5yZWFsaXN0aWMsIGl0IGlzIHN0aWxsIGVudGVydGFpbmluZy4gSXJvbiBFYWdsZSBJSSBoYXMgYSBzZW5zZWxlc3MgcGxvdCBhbmQgY2FuIGJlIHVzZWQgdG8gYXMgYSBjdXJlIHRvIGluc29tbmlhLiBJIGRpZG4ndCBldmVuIGJvdGhlciB0byB3YXRjaCBJcm9uIEVhZ2xlIElJSSwgYnV0IGZyb20gbG9va2luZyBhdCB0aGUgUiByYXRpbmcsIEkgYXNzdW1lIGl0J3MgbW9yZSB2aW9sZW50IHRoYW4gdGhlIHBhc3QgMiBtb3ZpZXMuIFdlbGwsIElyb24gRWFnbGUgSVYgaXMgcHJvYmFibHkgdGhlIG1vc3QgaW5hbmUgc2VxdWVsLiBMb3UgR29zc2V0dCBKci4gcmV0dXJucyBhcyB0aGUgYWx3YXlzIGRlbGlnaHRmdWwgIkNoYXBweSIgU2luY2xhaXIuIEFub3RoZXIgSmFzb24gcmV0dXJucyB0byBmaWxsIHRoZSByb2xlIG9mIERvdWcgTWFzdGVycyAoQ2FuYWRpYW4gSmFzb24gQ2FkaWV1eCwgd2hvIGxvb2tzIGp1c3QgbGlrZSBKYXNvbiBHZWRyaWNrIGZyb20gdGhlIGZpcnN0IElyb24gRWFnbGUpLiBCdXQgd2FpdChIZXJlIGNvbWVzIGEgcG9zc2libGUgc3BvaWxlcikuLi4uLldhc24ndCBEb3VnIGtpbGxlZCBpbiBJcm9uIEVhZ2xlIElJPyBUaGUgd3JpdGVycyBtdXN0J3ZlIGJlZW4gZGVzcHJhdGUgZm9yIGEgc3Rvcnkgc28gdGhleSByZXZpdmVkIERvdWcgTWFzdGVycyBieSBzYXlpbmcgaGUgd2FzIGEgcHJpc29uZXIgb2YgdGhlIFJ1c3NpYW5zLiBUaGlzIG1vdmllIHdhcyB0aGUgY2hlYXBlc3QgZG9uZSBvZiBhbGwgdGhlIElyb24gRWFnbGUgZmlsbXMuIFdoeSBkbyBtb3ZpZSBtYWtlcnMgZmluZCBpdCBuZWNjZXNzYXJ5IHRvIG1ha2Ugc2VxdWVscyB0byB1bmFwcGVhbGluZyBtb3ZpZXM/IChleC4gUG9saWNlIEFjYWRlbXkgbW92aWVzKS4gSSBoYXZlIGFsd2F5cyBsaWtlZCBHb3NzZXR0IEpyLidzIHdvcmsgaW4gdGhlc2UgZmlsbXMuIEhlIHdhcyB0aGUgb25seSBvbmUgaG9sZGluZyB0aGlzIHR1cmtleSB0b2dldGhlci4gTGV0J3MgaG9wZSB0aGlzIHdhcyB0aGUgbGFzdCBvZiB0aGUgSXJvbiBFYWdsZSBzZXF1ZWxzLiBsZXQgaXQgcmVzdCBpbiBwZWFjZS4pAAAAAAAA8D8K0QUIpwMQpwMivwV3aG8ncyByZXNwb25zaWJsZSBmb3IgdGhlc2UgImJlaGluZCB0aGUgc2NlbmVzIiB0aGluZ3M/IHdobyBhcmUgdGhlc2UgYWN0b3JzPyBkaWQgdGhleSBjcmF3bCBvdXQgZnJvbSBiZW5lYXRoIHJvY2tzPyAneXVrcywgbG90cyBvZiB5dWtzIScgbm8uIG5vIHl1a3MgZm9yIG1lLiBvbmx5IGxvYXRoaW5nIGFuZCBzaGFtZSB0aGF0IGkgYW0gYSBodW1hbiBiZWluZy4gaSBoYXZlIHRvIGF2ZXJ0IG15IGV5ZXMgZnJvbSB0aGUgc2V0LCBpdCdzIHNvIGVtYmFycmFzc2luZy4gaW4gZmFjdCwgaSBjaGFuZ2VkIHRoZSBjaGFubmVsLjxiciAvPjxiciAvPmkndmUgYWx3YXlzIGhhZCBhIHByb2JsZW0gd2l0aCByb2JpbiB3aWxsaWFtcycgbm9uLXN0b3AgJ2kgZm9yZ290IG15IGxpdGhpdW0gdG9kYXknIHJhbnRpbmdzLCBidXQgYXQgbGVhc3QgaGUncyBmdW5ueSBvbmNlIGluIGEgYmx1ZSBtb29uLiB3YXRjaGluZyBzb21lb25lIHdobyBpc24ndCBmdW5ueSBhdCBhbGwgaW1wZXJzb25hdGluZyByb2JpbiB3aWxsaWFtcyBpcyBsaWtlIGhhdmluZyBlYWNoIHRvb3RoIGluIHlvdXIgaGVhZCBwdWxsZWQgc2xvd2x5IGFuZCBzYWRpc3RpY2FsbHksIHdpdGhvdXQgbm92b2NhaW5lLCBmb3IgYWxsIGV0ZXJuaXR5LjxiciAvPjxiciAvPnBsZWFzZSBzdG9wIG1ha2luZyB0aGVzZSBhYnNvbHV0ZWx5IGhvcnJpZnlpbmcgVFYgbW92aWVzLiBwbGVhc2UuKQAAAAAAAPA/CqcHCKgDEKgDIpUHd2hvIHJlYWRzIHRoZXNlIGNvbW1lbnRzIG1heSB0aGluayB3ZSBtYXkgaGF2ZSBpbiBoYW5kIGEgZ3JlYXQgbW92aWUuIEkgYW0gUG9ydHVndWVzZSBhbmQgSSdtIGFzaGFtZWQgdGhhdCB0aGlzIGZpbG0gYmVjYW1lIGEgYmxvY2tidXN0ZXIgaW4gUG9ydHVnYWwuIEl0IGNhbid0IHJlYWxseSBjYWxsIHRoaXMgY2luZW1hLiBUaGUgZGlyZWN0aW9uIGFuZCAibWlzZS1lbi1zY2VuZSIgaXMgYmFzaWMgKGV2ZW4gUm9uIEhvd2FyZCBkb2VzIGJldHRlciEpOyB0aGUgc2NyaXB0IGlzIGJhZCBhbmQgcHJldGVudGlvdXMgKGEgcmVhbGx5IGJhZCBUYXJhbnRpbm8pOyB0aGUgY2FzdCBpcyBjb3ZlcmVkIGluIFRWIHN0YXJzLCBtb2RlbHMgYW5kIHJlYWxpdHkgc2hvdyBzdGFycyB0aGF0IGRvbid0IG5vIG5vdGhpbmcgYWJvdXQgYWN0aW5nLiBXaGVuIHlvdSBwdXQgaW4gYSBtb3ZpZSB0aGlzIGluZ3JlZGllbnRzIG9mIGNvdXJzZSB0aGF0IHRoZSBmYW5zIG9mIHRoaXMga2luZCBvZiBUViBzaG93cyB3aWxsIGFsbCBnbyBzZWUuIGkgYW0gYWxzbyBzdXJwcmlzZWQgdGhhdCBwZW9wbGUgd2hvIG1ha2UgY29tbWVudHMgaGVyZSBpbiBJTURiIHNheSB0aGF0IHRoaXMgbW92aWUgaXMgYSBtYXN0ZXJwaWVjZS4gSSB0aG91Z2h0IHRoYXQgdGhpcyBzaXRlIHdhcyBvbmx5IGZvciBwZW9wbGUgd2hvIHRydWx5IGxpa2UgY2luZW1hIGFuZCB1bmRlcnN0YW5kIGEgbGl0dGxlIGJpdCBvZiBpdC4gQWxsIHRoZSBtb3ZpZXMgbWFkZSB0byBiZSBibG9ja2J1c3RlcnMgaW4gUG9ydGdhbCBhbHdheXMgdXNlIHRoZSBzYW1lIGluZ3JlZGllbnRzIGFuZCBhcmUgYWx3YXlzIGF3ZnVsLiBpZiB5b3UgdGhpbmsgdGhpcyBtb3ZpZSBpcyByZWFzb25hYmxlLCBwbGVhc2UgZG9uJ3Qgc2F5IHlvdXIgbG92ZSBtb3ZpZXMgYW5kIGNpbmVtYS4pAAAAAAAA8D8KqwIIqQMQqQMimQJ3aGlsZSB3YXRjaGluZyB0aGlzIHBpZWNlIG9mIGNyYXAhIFRoZSBEYXkgYWZ0ZXIsIEkgc2F3IGEgMW1pbiBUcmFpbGVyIC0gdGhhdCBvbmUgbWludXRlIGluY2x1ZGVkIGFsbCwgQUxMIHdoYXQgd2FzIGF0IGxlYXN0IG5vdCBib3JpbmcgdG8gd2F0Y2guLi48YnIgLz48YnIgLz5zbyBkb24ndCB3YXN0ZSBtb25leSBvciB0aW1lIG9uIHRoaXMgb25lLCBnZXQgdGhlIG9yaWdpbmFsLCBpdCdzIG11Y2ggYmV0dGVyIHRob3VnaCB0aGUgZWZmZWN0cyBtaWdodCBub3QgYmUgdXAgdG8gZGF0ZS4uLikAAAAAAADwPwrdBwiqAxCqAyLLB3doaWxlIHdhdGNoaW5nIHRoaXMgbW92aWUgSSBnb3Qgc2ljay4gSSBoYXZlIGJlZW4gZ3Jld2luZyB1cCB3aXRoIFBpcHBpIGFuZCBldmVyeSB0aW1lIHdhcyBhIHJlYWwgcGxlYXN1cmUuIHdoZW4gbXkgd2lmZSBjYW1lIHRvIFN3ZWRlbiBzaGUgd2FzIGxvb2tpbmcgYXQgdGhlIG9sZGllcyBhbmQgaGFkIGEgcmVhbCBnb29kIGxhdWdoLiBidXQgdGhpcyBBbWVyaWNhbiB2ZXJzaW9uIHNob3VsZCBiZSByZW5hbWVkIGFuZCBuZXZlciBiZSBzaG93biBhZ2Fpbi4gaXQgaXMgdGVycmlibGUgZnJvbSBiZWdpbm5pbmcgdG8gaXQncyBlbmQuIGhvdyBjYW4gdGhleSBtYW5hZ2UgdG8gbWFrZSBpdCBzb28gYmFkLiB3ZWxsIEkgZ3Vlc3Mgc29tZW9uZSBibGFtZXMgdGhlIHRyYW5zbGF0aW9uIGhhIGhhIGhhLi4gYnV0IHRoZXkgYXJlIG5ldmVyIGNsb3NlIHRvIFBpcHBpLiBtYXkgdGhpcyBtb3ZpZSBuZXZlciBiZWVuIHNlZW4gYWdhaW4gYW5kIG5ldmVyIHNlbnQgb3V0IG9uIGEgYnJvYWRjYXN0LiBidXJuIHRoZSBtb3ZpZSBhbmQgc2F2ZSB0aGUga2lkcy4gaWYgeW91IHdhbnQgdG8gbG9vayBhdCBQaXBwaSB0aGVuIGxvb2sgYXQgdGhlIG9yaWdpbmFsIG1vdmllIGFuZCBoYXZlIGEgZ29vZCBsYXVnaC4gV0UgTE9WRSBQSVBQSSBJTkdFUiBOSUxTU09OLCBzb3JyeSBUYW1pIEVyaW4geW91IHdpbGwgbmV2ZXIgc3RhbmQgdXAgdG8gYmUgUGlwcGkuLiBPaCB5ZXMuLiB3aGVuIHJlYWQgdGhlICJzcG9pbGVycyIgZXhwbGFuYXRpb24sICInc3BvaWxpbmcnIGEgc3VycHJpc2UgYW5kIHJvYmJpbmcgdGhlIHZpZXdlciBvZiB0aGUgc3VzcGVuc2UgYW5kIGVuam95bWVudCBvZiB0aGUgZmlsbS4iIHdlbGwgSSBndWVzcyB0aGUgZGlyZWN0b3Igc3RhbmRzIGZvciB0aGlzLi4uIHlvdSBhcmUgbG9va2luZyBhdCB0aGlzIG1vdmllIGF0IHlvdXIgb3duIHJpc2suLiBpdCBpcyByZWFsbHkgYSB3YXN0ZSBvZiB0aW1lLi4uKQAAAAAAAPA/CoMHCKsDEKsDIvEGd2hpbGUgbWluZCBvZiBtZW5jaWEgY291bGQgYmUgc3VtbWVkIHVwIGFzIG5vdGhpbmcgbW9yZSB0aGFuIGEgY2xvbmUgb2YgY2hhcHBlbGxlJ3Mgc2hvdywgaXQgaXMgcmVhbGx5IHdvcnNlIHRoYW4gdGhhdC4gZmlyc3Qgb2YgYWxsLCBDYXJsb3MgbWVuY2lhIGlzIGEgamFja2EqKiB0aGF0IGlzIGFzIGZ1bm55IGFzIGhlIGlzIG9yaWdpbmFsLCB3aGljaCBpc24ndCBzYXlpbmcgbXVjaC4gdGhlIHNob3cgY29udGFpbnMgbGFtZSBzcG9vZnMgb2YgQW1lcmljYW4gdGVsZXZpc2lvbiBhZHMgYW5kIHBvbGl0aWNhbCBpc3N1ZXMsIGFuZCBtZW5jaWEncyAiY29tZWRpYyIgaW5zaWdodCBvbiBwb2xpdGljcyBhZGRzIHRvIHRoZSBsb3cgcXVhbGl0eSBvZiB0aGlzIHNob3cuIG9uIHRvcCBvZiBpdCBhbGwsIG1lbmNpYSB0b3NzZXMgaW4gbW9yZSBsYW1lIGV0aG5pYyBqb2tlcyBhbmQgc3RvbGVuIEplZmYgZm94d29ydGh5IGxpbmVzIHRoYW4gaSBjYW4gY291bnQgb24gb25lIGhhbmQuIHdoaWxlIGV2ZXJ5IG9uY2UgaW4gYSB3aGlsZSBDYXJsb3MgZ2V0cyBhIGNoZWFwIGxhdWdoLCB0aGUgcmVzdCBvZiB0aGUgdGltZSBoZSBzcGVuZHMgaW5zdWx0aW5nIGV2ZXJ5b25lIGluIHNpZ2h0LCB3aGljaCBkb2VzIGluY2x1ZGUgZXhwbG9pdGluZyBoaXMgb3duIGF1ZGllbmNlIG1lbWJlcnMuIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBzb3V0aCBwYXJrLCBkcmF3biB0b2dldGhlciwgYW5kIEZyaWRheSBuaWdodCBzdGFuZC11cCwgdGhpcyBzaG93IG1hcmtzIHRoZSBlbmQgb2YgdGhlIGNoYXBwZWxsZSdzIHNob3cgZ2xvcnkgZGF5cywgd2hpY2ggZm9yIHRob3NlIG9mIHlvdSB3aG8gaGF2ZW4ndCBoZWFyZCwgd2FzIGJlZm9yZSBoZSB3ZW50IHRvIEFmcmljYS4pAAAAAAAA8D8KhggIrAMQrAMi9Ad3aGlsZSBiZWluZyBvbmUgb2YgdGhlICJzdGFycyIgb2YgdGhpcyBmaWxtIGRvZXNuJ3QgbmVjZXNzYXJpbHkgZ2l2ZSBtZSBzYWdlIGluc2lnaHQsIGkgZG8ga25vdyBxdWl0ZSBhIGJpdCBvZiB3aGF0IHdhcyBmaXJzdCB0aGVyZS4uLmFuZCB3aGF0IGVuZGVkIHVwIG9uIHRoZSBzY3JlZW4uIGkgcmVtZW1iZXIgc2VlaW5nIHRoZSBvcmlnaW5hbCBjdXQgb2YgImluY29taW5nIGZyZXNobWFuIiBhbmQgYmVpbmcgdmVyeSBwbGVhc2VkLiBpdCB3YXMgZnVubnksIHNleHksIHJhdW5jaHksIGFsbCB0aGUgbWFpbiByZXF1aXJlbWVudHMgb2YgYSBkcml2ZS1pbiBmaWxtLiB5b3UgaGF2ZSB0byByZW1lbWJlciB0aGlzIHdhcyBzaG90IGFuZCByZWxlYXNlZCBiZWZvcmUgYWxsIHRoZSByZXN0Li4uYW5pbWFsIGhvdXNlLCBwb3JreSdzLCBldGMuLi5zbyBpbiBpdHMgb3duIHdheSwgdGhpcyBmbGljayB3YXMgdHJ1bHkgYWhlYWQgb2YgaXRzIHRpbWUuIGZvciB3aGF0ZXZlciByZWFzb25zLCB0aGUgZmlsbSB3YXMgZ2l2ZW4gdG8gdGhlIG1haW4gZGlzdHJpYnV0b3JzIHdobyBlZGl0aW5nIG91dCBoYWxmIHRoZSBvcmlnaW5hbCBmaWxtLCBhbmQgdGhlbiBlZGl0ZWQgaW4gKHNob3VsZCBpIHNheSAic2h1ZmZsZWQ/IikgVEhFIG1vc3QgcmFuZG9tIHNjZW5lcyBldmVyLiB0aGUgZmF0IGd1eSwgdGhlIHBlb3BsZSB3aXRoIGdvYXQgaGVhZHMuLi4ud2hhdCB0aGUgaGVjayB3YXMgYWxsIHRoYXQ/ISBpJ20gc3VyZSBpdCB3YXMgcHV0IGluIGZvciBhZGRpdGlvbmFsIFQmQSwgYnV0IGl0IHdhcyBzbyBzbG93bHkgcGFjZWQsIGl0IGNhdXNlZCBhbnl0aGluZyBnb2luZyBvbiBwcmlvciB0byBpdCB0byBncmluZCB0byBhIHNjcmVlY2hpbmcgYW5kIHBhaW5mdWwgaGFsdC4gYnV0IGFsbCBpbiBhbGwsIGl0J3MgYSBmdW4gbWVtb3J5IGZvciBtZS4uLmVzcGVjaWFsbHkgaW4gdGhhdCBpJ20gYWJsZSB0byBzYXkgdGhhdCB0aGUgd29yc3QgbW92aWUgaSd2ZSBldmVyIHNlZW4uLi5pJ20gaW4hKQAAAAAAAPA/CrImCK0DEK0DIqAmd2hlcmVhcyB0aGUgaGFyZC1ib2lsZWQgZGV0ZWN0aXZlIHN0b3JpZXMgb2YgRGFzaGllbGwgSGFtbWV0dCBhbmQgUmF5bW9uZCBDaGFuZGxlciBoYXZlIGZpdHRlZCB0byBjaW5lbWEgbGlrZSBhIGZveCBpbiBhIGNoaWNrZW4gY29vcCAtIGluZGVlZCBjcmVhdGluZyB0aGUgZGVmaW5pdGl2ZWx5IG1vZGVybiBBbWVyaWNhbiBnZW5yZSBhbmQgc3R5bGUgaW4gdGhlIHByb2Nlc3MgLSB0aG9zZSBvZiB3aGF0IG1pZ2h0IGJlIGNhbGxlZCBHb2xkZW4gQWdlIGZpY3Rpb24gaGF2ZSBtYWRlIGJhcmVseSBhbnkgaW1wcmVzc2lvbiB3aGF0c29ldmVyLiBUaGUgcHJvYmxlbSB3aXRoIGJvb2tzIGxpa2UgdGhvc2Ugb2YgQWdhdGhhIENocmlzdGllLCBEb3JvdGh5IEwuIFNheWVycyBvciBTLlMuIFZhbiBEaW5lIChvbiB3aG9zZSB3b3JrIHRoaXMgZmlsbSBpcyBiYXNlZCksIGlzIHRoYXQgdGhleSBhcmUgbG93IG9uIGFjdGlvbiBvciB2YXJpZXR5IC0gd2hlcmVhcyBTYW0gU3BhZGUgb3IgUGhpbGlwIE1hcmxvd2UgdHJhdmVyc2UgdGhlIG1lYW4gc3RyZWV0cyBvZiBMQSwgd29ya2luZyBjbGFzcyB0ZW5lbWVudHMsIGJhcnMsIG9mZmljZXMsIHdlYWx0aHkgbWFuc2lvbnMsIGFuZCBtZWV0IGFsbCBzb3J0cyBvZiBleGNpdGluZyBkYW5nZXJzIGFuZCB2aW9sZW5jZSwgR29sZGVuIEFnZSBmaWN0aW9uIGlzIGdlbmVyYWxseSBmaXhlZCBpbiBsb2NhdGlvbiwgdGhlIHNjZW5lIG9mIHRoZSBtdXJkZXIsIHVzdWFsbHkgYSBsYXZpc2ggY291bnRyeSBob3VzZSwgYW5kIHRoZSBhY3Rpb24gaXMgbGltaXRlZCB0byBpbnZlc3RpZ2F0aW5nIGNsdWVzIGFuZCBpbnRlcnZpZXdpbmcgc3VzcGVjdHMuIFRoaXMgaXMgYSB2ZXJ5IHN0YXRpYyBwcm9jZWR1cmUsIHBsb3QgcmVkdWNlZCB0byBwdXp6bGUuPGJyIC8+PGJyIC8+VGhpcywgb2YgY291cnNlLCBpcyBhcyBtdWNoIGlkZW9sb2dpY2FsIGFzIGFueXRoaW5nIGVsc2UsIHRoZSBHb2xkZW4gQWdlIHN0b3JpZXMgZGVhbGluZyB3aXRoIGEgc29jaWV0eSBob3N0aWxlIHRvIGNoYW5nZSBhbmQgbW92ZW1lbnQ7IHRoZSBoYXJkLWJvaWxlZCBub3ZlbHMgcmVjb3JkaW5nIGFuIHVyYmFuIHJlYWxpdHkgaW5jcmVhc2luZ2x5IG1vdmluZyBhd2F5IGZyb20gYSBjZW50cmUgKGJvdGggb2YgYXV0aG9yaXR5LCBhbmQgb2YgYSBjaXR5KSwgZGl2aWRpbmcgaXRzZWxmIHVwIGludG8gaG9zdGlsZSwgZXZlciB1bmNvbnRyb2xsYWJsZSBhbmQgbGF3bGVzcyBjYW1wcy4gQW5vdGhlciBtYWpvciBwcm9ibGVtIHdpdGggR29sZGVuIGFnZSBmaWN0aW9uIGlzIGNoYXJhY3RlciAtIGJlY2F1c2Ugd2UgY2Fubm90IGtub3cgdGhlIGFuc3dlciB0byB0aGUgY3JpbWUgdW50aWwgdGhlIGVuZCwgd2UgY2Fubm90IGdhaW4gYWNjZXNzIHRvIGNoYXJhY3RlcnMnIG1vdGl2YXRpb25zIG9yIGVtb3Rpb25zLCBiZWluZyBkZWZpbmVkIHNvbGVseSBieSB0aGVpciBwb3RlbnRpYWwgbmVlZCB0byBtdXJkZXIuIFRoZSBkZXRlY3RpdmUsIHVubGlrZSB0aGUgYW54aW91cywgcHJlanVkaWNlLXJpZGRlbiBwcml2YXRlIGV5ZXMsIGFyZSBzaW1wbHkgdGhlcmUgdG8gYmUgYnJpbGxpYW50LCBhbmQgbWF5YmUgYSBsaXR0bGUgZWNjZW50cmljLjxiciAvPjxiciAvPlRoZSBwcm9ibGVtIHdpdGggbW9zdCBmaWxtcyBmcm9tIEdvbGRlbiBBZ2UgYm9va3MgaXMgdGhhdCB0aGV5IHRyeSB0byBiZSBwZXJpb2QgcmVjcmVhdGlvbnMgb2YgdGhlIE1lcmNoYW50IEl2b3J5L0phbmUgQXVzdGVuIHNjaG9vbCwgYW5kIGVuZCB1cCBsb29raW5nIHNpbGx5LiBUaGVyZSBoYXZlIGJlZW4gc3VjY2Vzc2VzLCBmb3IgZXhhbXBsZSB0aGUgcmFkaWNhbCByZXdvcmtpbmdzIG9mIEVsbGVyeSBRdWVlbiBhbmQgb3RoZXJzIGJ5IENsYXVkZSBDaGFicm9sLiBJbiB0aGUgRW5nbGlzaC1zcGVha2luZyB3b3JsZCwgdGhlcmUgaGF2ZSByZWFsbHkgb25seSBiZWVuIHR3by4gVGhlIEFsaXN0YWlyIFNpbSBjbGFzc2ljLCAnR3JlZW4gRm9yIERhbmdlcicsIHdvcmtzIGJlY2F1c2UgaXQgcHVzaGVzIHRoZSBmb3JtIGFsbW9zdCBpbnRvIHBhcm9keSwgd2hpbGUgbmV2ZXIgYmV0cmF5aW5nIHRoZSBpbnRlZ3JpdHkgb3IgaW50ZXJlc3Qgb2YgdGhlIG15c3RlcnkuPGJyIC8+PGJyIC8+QmVmb3JlIHRoYXQgY2FtZSBNaWNoYWVsIEN1cnRpeidzIGJyaWxsaWFudCAnVGhlIEtlbm5lbCBNdXJkZXIgQ2FzZScuIFRoZSBuYXJyYXRpdmUgaXMgcHVyZSBHb2xkZW4gQWdlLiBBIHJlcHVsc2l2ZSBjaGFyYWN0ZXIgaXMgaW50cm9kdWNlZCB3aG8gZ2l2ZXMgYSBudW1iZXIgb2YgcG90ZW50aWFsIHN1c3BlY3RzIHJlYXNvbiB0byBraWxsIGhpbS4gSGUgaXMgZHVseSBtdXJkZXJlZCBpbiBhIHNlZW1pbmdseSBmb29scHJvb2YgbWFubmVyLCBpbmRpY2F0aW5nIHN1aWNpZGUsIHNsdW1wZWQgaW4gYSBsb2NrZWQgcm9vbS4gVGhlIGNhcmljYXR1cmVkIHBvbGljZW1lbiBmYWxsIGhvcGVsZXNzbHkgZm9yIHRoZSBiYWl0LiBJdCBpcyB1cCB0byBQaGlsbyBWYW5jZSwgZ2VudGxlbWFuIGFuZCBhbWF0ZXVyIGRldGVjdGl2ZSwgbmVpdGhlciBvbGQgbm9yIGZhdCwgdG8gcmVhZCB0aGUgY2x1ZXMgbW9yZSBpbnNpZ2h0ZnVsbHksIG9wZW4gdGhlIGNhc2Ugb3V0IG9mIHRoZSBjb25maW5lcyBvZiB0aGUgcm9vbSwgYW5kIGV2ZW50dWFsbHkgc29sdmUgdGhlIGNhc2UsIHRoZSBjb3Jwc2UgYmVpbmcgbGl0dGxlIG1vcmUgdGhhbiB0aGUgcHJldGV4dCBmb3IgaW50ZWxsZWN0dWFsIHN0aW11bGF0aW9uLjxiciAvPjxiciAvPldoYXQgaXMgaW50ZXJlc3RpbmcgaXMgbm90IHRoaXMgZGV0ZWN0aXZlIHBsb3QgLSB3aGljaCBjYW4gb25seSBldmVyIGJlIHVuc2F0aXNmeWluZyBhcyBhbGwgc29sdXRpb25zIGFyZSAtIGFsdGhvdWdoIGl0IGlzIHJhcmVseSBsZXNzIHRoYW4gZW50ZXJ0YWluaW5nLCBhbmQgZnVsbCBvZiBjb21pY2FsIGJpdHMgb2YgYnVzaW5lc3MuIFRoZXJlIGlzbid0IGV2ZW4gcmVhbGx5IGFuIGF0dGVtcHQgdG8gJ3N1YnZlcnQnIHRoZSBpbWFnZSBvZiB0aGUgcGVyZmVjdCBkZXRlY3RpdmUgLSB0aGVyZSBpcyBvbmUgYWxhcm1pbmcgc2NlbmUgd2hlcmUgYSBicnV0YWwgc2VyZ2VhbnQgdGhyZWF0ZW5zIHRvIHJvdWdoIHVwIGEgc3VzcGVjdCwgd2l0aCBubyBwcm90ZXN0IGZyb20gVmFuY2UsIGJ1dCB0aGF0J3MgYWJvdXQgaXQuPGJyIC8+PGJyIC8+V2hhdCBtYXJrcyAnS2VubmVsJyBhcyBhIGNsYXNzaWMgaXMgaXRzIG1vZGVybml0eS4gQ3VydGl6IGlzIG5vdCBnZW5lcmFsbHkgY29uc2lkZXJlZCBhIGdyZWF0IGF1dGV1ciwgYmVjYXVzZSBoZSBoYXMgbm8gY29uc2lzdGVudCB0aGVtZXMgb3IgZXZpZGVuY2Ugb2YgYXJ0aXN0aWMgZGV2ZWxvcG1lbnQuIEJ1dCBoZSB3YXMgSG9sbHl3b29kJ3MgZ3JlYXRlc3QgY3JhZnRzbWFuLCBhbmQgaGUgaXMgb24gc2Vuc2F0aW9uYWwgZm9ybSBoZXJlLiBpZiB0aGUgR29sZGVuIEFnZSBkZXRlY3RpdmUgc3RvcnkgaXMgbWVyZSBwdXp6bGUsIEN1cnRpeiB0YWtlcyB0aGlzIGlkZWEgdG8gaXMgbG9naWNhbCBleHRyZW1lLCBjcmVhdGluZyBhbiBhYnN0cmFjdCB2YXJpYXRpb24gb24gaGlzIHNvdXJjZSwgcmVkdWNpbmcgbmFycmF0aXZlLCBjaGFyYWN0ZXIgYW5kIGxvY2F0aW9uIHRvIGdlb21ldHJ5LCBhIHNlcmllcyBvZiBsaW5lcywgZnJvbSB0aGUgYmVhdXRpZnVsIGFydC1kZWNvIHNldHMgdG8gdGhlIGdsb3Jpb3VzIGNhbWVyYSBtb3ZlbWVudHMgd2hpY2ggc3VkZGVubHkgYnJlYWsgZnJvbSBhIHN0YXRpYyBjb21wb3NpdGlvbiAsIGFuZCwgYXMgdGhleSBnbGlkZSBmdXJpb3VzbHkgYXQgYW4gYW5nbGUsIGpvbHQgdGhlIGRlYWQgZGVjb3IgdG8gbGlmZS48YnIgLz48YnIgLz5UaGlzIHRyZWF0bWVudCBpcyBhcHByb3ByaWF0ZSB0byBhIHN0b3J5IHRoYXQgcmVzb2x1dGVseSByZWZ1c2VzIHJlYWxpc20sIGl0IGlzIGEgcGF0dGVybiB0aGF0IHR1cm5zIHRoZSBkZXRlY3RpdmUgcGxvdCBpbnRvIGEgaGFsbCBvZiBtaXJyb3JzLCBsaWtlIHRoZSB0d28gY2VudHJhbCBicm90aGVycywgb3IgdGhlIG9yaWdpbmFsIGNyaW1lIGl0c2VsZiwgYm9ycm93ZWQgZnJvbSBhbiAnVW5zb2x2ZWQgTXlzdGVyaWVzJyBib29rLiBUaGlzIGZhbnRhc3kgd29ybGQgb2YgbmFzdHkgcmljaCBtZW4gd2hvIGNvbGxlY3QgT3JpZW50YWwgcmVsaWNzIChzaGFkZXMgb2YgJ1RoZSBNb29uc3RvbmUnPyksIGluc2NydXRhYmxlIENoaW5lc2Ugc2VydmFudHMsIGV4LWNvbnMgdHVybmVkIGJ1dGxlcnMsIGRvZy1sb3ZpbmcgZm9wcywgUnVueW9uZXNxdWUgY29wcywgaXMgdGhlIHBlcmZlY3QgaGFiaXRhdCBmb3IgVmFuY2UsIGEgbWFuIHdobyB3aWxsIGRyb3AgYSBjcnVpc2UgdG8gRXVyb3BlIG9uIGEgZmFuY2lmdWwgaHVuY2gsIHdobyBrbm93cyB0aGUgc29jaWFsIHdvcmxkIG9mIHRoZXNlIHBlb3BsZSwgYW5kIHlldCBpcyB0YWludGVkIGJ5IGhpcyBpbnRlcmVzdCBpbiBjcmltZSBhbmQgYXNzb2NpYXRpb24gd2l0aCB0aGUgcG9saWNlLCBvciB3b3VsZCBiZSBpZiBoZSB3YXNuJ3QgYW55dGhpbmcgbW9yZSB0aGFuIGEgdGhpbmtpbmcgbWFjaGluZSwgV2lsbGlhbSBQb3dlbGwsIHRoZSBncmVhdGVzdCBBbWVyaWNhbiBjb21lZGlhbiBvZiB0aGUgZGVjYWRlLCBicmF2ZWx5IHN1YnN1bWluZyBoaXMgaWRpb3N5bmNyYXRpYyBodW1hbml0eS48YnIgLz48YnIgLz5CdXQgaWYgdGhlIHRyZWF0bWVudCBpcyByYXJlZmllZCwgdGhlIGNsaW1heCBpcyBzcGVjdGFjdWxhcmx5IGJydXRhbCwgaW52b2x2aW5nIHZpY2lvdXMgZG9ncyBhbmQgYXR0ZW1wdGVkIG11cmRlci4gVGhlIHBvbGljZSBhbmQgdGhlIGRldGVjdGl2ZSwgc3VwcG9zZWQgdG8gYmUgcHJldmVudGluZyBjcmltZSwgYXJlIGd1aWx0eSBvZiBpbmNpdGluZyBvbmUuKQAAAAAAAPA/CrwRCK4DEK4DIqoRd2hlcmUgd291bGQgb25lIHN0YXJ0IGEgcmV2aWV3IG9mIHRoZSBmaWxtIFNuaXRjaCdkPyBKYW1lcyBDYWhpbGwsIGdvZCByZXN0IGhpcyBzb3VsLCBtYWRlIG9uZSBvZiB0aGUgbW9zdCBkYXJpbmcgaW5zaWdodHMgaW50byB0aGUgaHVtYW4gcHN5Y2hlIHNpbmNlIEVuY2lubyBNYW4uIGhpcyBiZWF1dGlmdWwgc3RvcnkgdW5yYXZlbHMgYXJvdW5kIGEgZHJ1ZyBzcXVhZCBjb3AgTWNDbHVyZSwgd2hpY2ggaXMgYSBuYW1lIHN5bm9ueW1vdXMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIHRoZSBzaW1wc29ucyB3aG8gYWxzbyBoYXBwZW5zIHRvIGJlIGFuIGFjdG9yISBzYWlkIGNvcCBkZWx2ZXMgZGVlcCBpbnRvIHRoZSB1bmRlcndvcmxkIHRoYXQgaXMgaGlnaCBzY2hvb2wgZHJ1ZyB0YWtpbmcsIGFuZCBkaXNjb3ZlcnMgYSBnYW5nIHdhciB0byByaXZhbCB0aGF0IG9mIFBvbGljZSBBY2FkZW15IDEsIGFuZCBpIG1lYW4gdGhlIG9uZSB3aGVyZSBKb25lcyBpcyByYWNpYWxseSB2aWxpZmllZCBieSBoaXMgbmV3IHBhcnRuZXIsIGJ1dCBtYW5hZ2VzIHRvIGNvbWUgb3V0IHdpdGggc29tZSBvZiB0aGUgZnVubmllc3Qgc291bmRzIHlvdSB3aWxsIEVWRVIgSEVBUi48YnIgLz48YnIgLz5DYWhpbGwncyBncmFzcCBvZiBlZmZlY3RzLCBib3RoIHZpc3VhbCBhbmQgYXVyYWwgaXMgZWxlY3RyaWZ5aW5nLCB0aGUgc2xpZ2h0IHBhdXNlIGJldHdlZW4gYWN0aW9uIG9uIHNjcmVlbiBhbmQgZnJvbSB0aGUgc3BlYWtlcnMgYWRkcyB0byB0aGUgZHJhbWEgdGhhdCBpcyBzbml0Y2gnZCwgYSByZWFsIGdyaXR0eSBsaWtlIHVuZGVyZ3JvdW5kIHRocmlsbGVyLiBhbHNvLCBrdWRvcyB0byBoaXMgYnJpbGxpYW50IHVzZSBvZiBtYWtldXAsIHN1Y2ggYXMgdGhlIHN1cHJlbWVseSBjb252aW5jaW5nIGJ1cm4gbWFya3MgYSBnYW5nIG1lbWJlciBzdWZmZXJzIGluIGhpcyBzaG93ZG93biB3aXRoIGFuIGluZG9vciBiYXJiZWN1ZSEgWVVDSyEgaSBmZWVsIHRoZSB3b3JsZCBvZiBmaWxtIGlzIG11Y2ggbGVzcyBmcm9tIEphbWVzJyBwYXNzaW5nLCBoaXMgbWVtb3J5IHdpbGwgbGluZ2VyIG9uIGFuZCBvbiBhbmQgb24sIHJlYm9ybiB3aXRoIGV2ZXJ5IHBhc3NpbmcgbWVudGlvbiBvZiBoaXMgZmxhZ3NoaXAgcHJvZHVjdGlvbiwgU25pdGNoJ2QuIGhpcyBpbnNpZ2h0ZnVsIGRpcmVjdG9yJ3MgY29tbWVudGFyeSByZWxlYXNlZCBhIGNva2UtaGl0IHVwIHRoZSBub3NlIG9mIGFueSBkaXNjZXJuaW5nIGZpbG0gZ29lciwgdHJ1bHkgYXBwcm9wcmlhdGUgd2l0aCB0aGUgaGFyc2ggcmVhbGl0eSB0aGF0IGlzIGxpZmUgb24gdGhlIHN0cmVldHMsIGNhcHR1cmVkIGluIGFsbCB0aGUgYmVhdXR5IG9mIGEgcm91Z2huZWNrIHB1bmsga25vY2tpbmcgb3ZlciBhIHJ1YmJpc2ggYmluIGluIGEgYnJhd2wuPGJyIC8+PGJyIC8+YnV0IGkgYXNrIHlvdSwgd2h5IGRpZCB0aGUgYmlnIGJvc3NlcyBzd2ltbWluZyBwb29sIGxvb2sgc28gY2hlYXA/IGknbGwgdGVsbCB5b3Ugd2h5LCBiZWNhdXNlIHRoYXRzIGxpZmUgaW4gU2FudGEgQW5hIGJhYnksIGl0cyBub3QgYWxsIGRyaXZlIGJ5cyBhbmQgaGFzdGlseSBjb25zdHJ1Y3RlZCBwcmluY2lwbGUncyBvZmZpY2VzLCBvaCBuby4gdGhlcmUgYXJlIHNvbWUgZm9sayB3aG8gbXVzdCBpbmZpbHRyYXRlIHRoZSBzb2Z0LCB0YXR0b29lZCB1bmRlcmJlbGx5IG9mIHN0cmVldCBsaWZlIGluIExBIHRvIGtpY2sgdGhlaXIgd2F5IHRocm91Z2ggaW4gbW92ZXMgdGhhdCB3b3VsZCBub3Qgc2VlbSBvdXQgb2YgcGxhY2UgYXQgYSBTY2hvb2wgRm9yIFNwZWNpYWwgQ2hpbGRyZW4ncyBwcm9kdWN0aW9uIG9mIERvdWJsZSBEcmFnb246IFRoZSBQbGF5LjxiciAvPjxiciAvPnRoZSBvbmx5IHF1YWxtIGkgaGF2ZSB3aXRoIHRoaXMgZmlsbSwgaXMgdGhhdCB0aGVyZSB3YXMgbmV2ZXIgYSBzZXF1ZWwgbWFkZS4gY29tZSBvbiBTdGV2ZW4gU3BpZWxiZXJnLCBjb21lIG9uIEdlb3JnZSBMdWNhcywgY29tZSBvbiBndXkgdGhhdCBtYWRlIHJldmVuZ2Ugb2YgdGhlIG5lcmRzIDEgdGhyb3VnaCAyMywgaG93IGhhcmQgY291bGQgaXQgYmUgdG8gc3RlcCBpdCB1cCBhIG5vdGNoIGFuZCBwYXkgdHJpYnV0ZSB0byB0aGlzIGdyZWF0IG1hbiwgSmFtZXMgQ2FoaWxsLjxiciAvPjxiciAvPmhlIGRpc2NvdmVyZWQgRXZhIExvbmdvcmlhIHlvdSBrbm93LiBvaCB5ZWFoLCB0aGF0IGhlIGRpZC48YnIgLz48YnIgLz5Kb25haCkAAAAAAADwPwr8HgivAxCvAyLqHndoZXJlIGRvIHdlIGdvIGZyb20gaGVyZT8gdGhhdCBpcyB0aGUgb3ZlcnJpZGluZyBxdWVzdGlvbiBvZiB0aGlzIGZpbG0uIEFuZCBtYWtlIG5vIG1pc3Rha2UsICdtYWlubHkgRVRDLicsIHRoZSAyMDAzIGVmZm9ydCBmcm9tIGRpcmVjdG9yIGpvaG4gamFuc2VuLCBhc2tzIGZhciBtb3JlIHF1ZXN0aW9ucyB0aGFuIGl0IGFuc3dlcnMsIGJ1dCBub25lIHNvIHBvaWduYW50bHkgb3Igc28gcG93ZXJmdWxseSBhcyB0aGlzIG9uZS48YnIgLz48YnIgLz5tdWNoIG9mIHRoZSB0aGUgZmlsbSBwbGF5cyBsaWtlIGEgcnVubmluZyBjb252ZXJzYXRpb24gYmV0d2VlbiB5b3UgYW5kIHlvdXIgY29sbGVnZSBkcmlua2luZyBidWRkaWVzLCBhbmQgSSdtIHN1cmUgbWFueSBvZiB0aGUgcXVlc3Rpb25zIHJhaXNlZCBieSB0aGUgbWFpbiBjaGFyYWN0ZXJzIHlvdSdsbCByZWNvZ25pemUgZnJvbSB5b3VyIG93biBldmVuaW5ncyBvZiBkcnVua2VuIGRlYmF1Y2hlcnkuIGhvd2V2ZXIsIG9uZSBvZiB0aGUgbWFueSBiZWF1dGllcyBvZiB0aGlzIGZpbG0gaXMgdGhhdCB3ZSBhcmUgcmFyZWx5IGdpdmVuIGFuIGFuc3dlci4gUXVlc3Rpb25zIGFyZSByYWlzZWQgwpYgZXZlcnl0aGluZyBmcm9tIHRoZSBtdW5kYW5lIHRvIHRoZSBwcm9mb3VuZCDCliBidXQgamFuc2VuIHNraWxsZnVsbHkgZm9yY2VzIGhpcyBhdWRpZW5jZSB0byBleGFtaW5lIGFuZCBhbnN3ZXIgdGhlc2UgcXVlc3Rpb25zIG91cnNlbHZlcywgd2l0aCBsaXR0bGUgdG8gbm8gaGVscCBmcm9tIHRoZSBjaGFyYWN0ZXJzLjxiciAvPjxiciAvPnNpZGUgMSBvcGVucyB3aXRoIGFuIGluY3JlYXNpbmdseSBjb21wbGV4IGFuZCBiZWF1dGlmdWxseSBvcmNoZXN0cmF0ZWQgYXJyYW5nZW1lbnQgb2Ygbm9uLWxpbmVhciBzZWdtZW50cyB0byBpbnRyb2R1Y2UgdXMgdG8gdGhlIG1haW4gY2hhcmFjdGVycy4gV2UgbWVldCB0aGVtIG9uIHRoZSBtb3JuaW5nIG9mIGFwcmlsIDgsIDE5OTQgwpYgdGhlIGRheSBrdXJ0IGNvYmFpbiBjb21taXR0ZWQgc3VpY2lkZS4gQW5kIGl0IGlzIHRoZSBkZWF0aCBvZiBjb2JhaW4sIGFuZCB0aGUgam91cm5leSB0byBoaXMgd2FrZSB0d28gZGF5cyBsYXRlciBpbiBzZWF0dGxlLCB0aGF0IHNlcnZlIGFzIHRoZSBiYWNrZHJvcCBmb3IgdGhlIGZpbG0uIEluIGV4cGxvcmluZyBjb2JhaW4ncyBsaWZlLCBtdXNpYywgYW5kIGRlYXRoLCB0aGUgY2hhcmFjdGVycyBhdHRlbXB0IC0gd2l0aCB2YXJ5aW5nIGRlZ3JlZXMgb2Ygc3VjY2VzcyAtIHRvIHVuZGVyc3RhbmQgYW5kIGNvbWUgdG8gdGVybXMgd2l0aCB0aGVpciBvd24gbGl2ZXMuPGJyIC8+PGJyIC8+dGhlcmUgYXJlIHNvbWUgYXNwZWN0cyBvZiB0aGUgZmlsbSB0aGF0IGFyZSB3aGF0IHlvdSBtaWdodCBleHBlY3QgZnJvbSBhIGxvdy1idWRnZXQgaW5kaWUgZmlsbTogdGhlIHBlcmZvcm1hbmNlcyByYW5nZSBmcm9tIGRlY2lkZWRseSBtZWRpb2NyZSB0byBvdXRzdGFuZGluZywgd2l0aCB0aGUgc3Ryb25nZXN0IHBlcmZvcm1hbmNlcyBjb21pbmcgZnJvbSBqZXNzaWNhIHNjb3R0IChob2xseSkgYW5kIG5vZWwgd29vZCAoZGFuaWVsKTsgc29tZSBvZiB0aGUgZGlhbG9ndWUgaXMgYWRtaXR0ZWRseSBhIGJpdCBzdGlmZiwgYnV0IG5ldmVyIGNvbXBsZXRlbHkgc3RyYXlzIGludG8gdGhlIHVucmVhbDsgYW5kIHRoZXJlIGFyZSBzb21lIG1pbm9yIHNvdW5kIHByb2JsZW1zLCBwYXJ0aWN1bGFybHkgb25jZSB3ZSBnZXQgb24gdGhlIHJvYWQsIHRoYXQgbWFrZSBpdCBkaWZmaWN1bHQgYXQgdGltZXMgdG8gZm9sbG93IHRoZSBhY3Rpb24gb24gc2NyZWVuLjxiciAvPjxiciAvPmJ1dCBkZXNwaXRlIGl0cyBzaG9ydGNvbWluZ3MsICdtYWlubHkgRVRDLicgaXMgYSBzb2xpZCwgZGVlcGx5IGFmZmVjdGluZyBwaWVjZSBvZiBjaW5lbWEuIGFtaWQgbW9tZW50cyBvZiBoYXVudGluZyBwb2lnbmFuY3ksIGxhdWdoLW91dC1sb3VkIGh1bW9yLCBhbmQgaW50aW1hdGUgdHVybW9pbCwgamFuc2VuIGRlZnRseSB3ZWF2ZXMgYWxsIG9mIHRoZSBjaGFyYWN0ZXIgdGhyZWFkcyB0b2dldGhlciBhbmQgaWxsdW1pbmF0ZXMgdGhlaXIgb3duIHN0cnVnZ2xlcyB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIG1ha2luZyB0aGVtIGFjY2Vzc2libGUgYW5kIGVuZ2FnaW5nIGZvciB1cy4gYW5kIGJlY2F1c2Ugd2UgY2FuIHNlZSByZWZsZWN0aW9ucyBvZiBvdXJzZWx2ZXMgaW4gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2hhcmFjdGVycywgd2UgY2FuIGlkZW50aWZ5IHdpdGggdGhlIHF1ZXN0aW9ucyBhbmQgaXNzdWVzIHRoZXkncmUgc3RydWdnbGluZyB3aXRoLCBhbmQgd2UncmUgYWJsZSB0byBsb29rIGJhY2sgYW5kIHJlbWVtYmVyIHdoZXJlIHdlIHdlcmUgb24gdGhhdCBkYXkgaW4gMTk5NCB3aGVuIGZvciBtYW55IHBlb3BsZSB0aGUgd29ybGQgY2hhbmdlZC48YnIgLz48YnIgLz53aGlsZSBqYW5zZW4gdGFrZXMgY3JlZGl0IGZvciB0aGUgd3JpdGluZywgZWRpdGluZywgYW5kIGRpcmVjdGlvbiBvZiB0aGUgZmlsbSwga3Vkb3MgbXVzdCBiZSBnaXZlbiB0byBoaXMgcGhvdG9ncmFwaHkgYXMgd2VsbC4gV2l0aCBhbiB1bmNhbm55IGV5ZSBhbmQgYW1hemluZyBhYmlsaXR5IHRvIGNhcHR1cmUgYW5kIGRyYXcgdXMgaW50byBlYWNoIG9mIHRoZSBjaGFyYWN0ZXJzJyB3b3JsZHMsIGphbnNlbiBtYW5hZ2VkIHRvIHByb2R1Y2Ugc2hvdCBhZnRlciBzaG90IGFmdGVyIHNob3QgdGhhdCBzdHVjayB3aXRoIG1lIGxvbmcgYWZ0ZXIgdGhlIGNyZWRpdHMgcm9sbGVkLjxiciAvPjxiciAvPkFuZCBubyByZXZpZXcgb2YgdGhpcyBmaWxtIHdvdWxkIGJlIGNvbXBsZXRlIHdpdGhvdXQgYSBub2QgdG8gdGhlIGFtYXppbmcgc291bmR0cmFjay4gdGhlIG11c2ljIGluIHRoaXMgZmlsbSBpcyB1c2VkIHRvIGFtYXppbmcgZWZmZWN0OyBhdCB0aW1lcyBzdWJ0bHkgdW5kZXJzY29yaW5nIHRoZSBhY3Rpb24sIGF0IG90aGVyIHRpbWVzIHRha2luZyBjZW50ZXIgc3RhZ2UsIGJ1dCBuZXZlciBnZXR0aW5nIGluIHRoZSB3YXkgb3IgZGV0ZXJpb3JhdGluZyBpbnRvIGtpdHNjaHkgbXVzaWMgdmlkZW8uIHRoZSBzb3VuZHRyYWNrIHBsYXlzIGxpa2UgdGhlIHVsdGltYXRlIGdyZWF0ZXN0IGhpdHMsIHRob3VnaCBpIHN1c3BlY3QgdGhhdCBsYWJlbCB3b3VsZCBwcm9iYWJseSBub3Qgc2l0IHZlcnkgd2VsbCB3aXRoIHRoZSBkaXJlY3Rvci48YnIgLz48YnIgLz50aGUgbmV3IGRvdWJsZSBEVkQgYXJjaGl2ZSBlZGl0aW9uIG9mZmVycyBzb21lIGRlbGV0ZWQgc2NlbmVzLCB0cmFpbGVycywgbXVzaWMgdmlkZW9zLCBhbmQgYSBjb2JhaW4gZG9jdW1lbnRhcnkuIHRoZSBkZWxldGVkIHNjZW5lcyBvZmZlciBzb21lIGluc2lnaHQgaW50byB0aGUgbWFraW5nIG9mIHRoZSBmaWxtIHRocm91Z2ggYWx0ZXJuYXRlIG9wZW5pbmcgYW5kIGNsb3Npbmcgc2VxdWVuY2VzLCBhbmQgaXQncyBjZXJ0YWlubHkgYSB0cmVhdCB0byBoYXZlIHRoZSByYXJlIGFuZCBiZWF1dGlmdWwgUmFpbmluZyBLaW5kIHZpZGVvLiB0aGUgY29iYWluIGRvY3VtZW50YXJ5IGlzIGZpbmUsIGlmIGEgYml0IHdvcnNlIGZvciB3ZWFyLCBhbmQgY2VydGFpbmx5IG1vcmUgZXh0ZW5zaXZlIGRvY3VtZW50YXJpZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGhhcmRjb3JlIGZhbnMuIGNvbnNwaWN1b3VzbHkgYWJzZW50IGlzIGEgZGlyZWN0b3IgY29tbWVudGFyeSwgYW5kIGkgY2FuJ3QgaGVscCBidXQgd29uZGVyIGlmIGphbnNlbiBoYXMgcGxhbnMgdG8gcmUtcmVsZWFzZSB0aGlzIGF0IHNvbWUgcG9pbnQgd2l0aCB0aGF0IHRhc3R5IHRpZGJpdCBhdHRhY2hlZC48YnIgLz48YnIgLz5zdWZmaWNlIHRvIHNheSB0aGF0IHRoZSBuZXh0IHRpbWUgeW91J3JlIGxvb2tpbmcgZm9yIGEgc3Ryb25nIHBpZWNlIG9mIHdvcmsgZnJvbSBhIHRhbGVudGVkIGZpbG1tYWtlciwgSSByZWNvbW1lbmQgeW91IGdldCBvbiBib2FyZC4pAAAAAAAA8D8KyhAIsAMQsAMiuBB3aGVuIHlvdSBnZXQgdG8gdGhlIHNjZW5lcyB0aGF0IGludm9sdmUgQWxiZXJ0IEJyb29rcyB3aXRob3V0IGhpcyBzaGlydC4uLiB0cnkgbm90IHRvIGdhZyBvbiBhIGZ1ciBiYWxsLjxiciAvPjxiciAvPkkgbGlrZSBBbGJlcnQgQnJvb2tzLiBJJ3ZlIHNlZW4gbW9zdCwgaWYgbm90IGFsbCBvZiBoaXMgbW92aWVzIGJ1dCBpdCB3YXMgdGhlIGZpcnN0IHRpbWUgc2VlaW5nIHRoaXMgb25lLiBNb2Rlcm4gUm9tYW5jZSBpcyBhbiBpbnRlcmVzdGluZyB0YWtlIG9uIHRoZSBzdWJqZWN0IG9mIGxvdmUuIFRoZXJlIGFyZSBmZXcgbW92aWVzIHRoYXQgaGFuZGxlIHRoZSBkZXNwZXJhdGlvbiBvZiBsb3ZlIGFzIHdlbGwgb3IgYXMgb3ZlcnRseSBhcyBNb2Rlcm4gUm9tYW5jZSwgYWx0aG91Z2ggMTk3OSdzIENoaWxseSBTY2VuZXMgb2YgV2ludGVyIGNvbWVzIHZlcnkgY2xvc2UuIFRoZXkgYm90aCBlc3NlbnRpYWxseSBkZWFsIHdpdGggb2JzZXNzZWQgbWVuIHRoYXQgYXJlIHRvbyBwc3ljaG9sb2dpY2FsbHkgYXR0cmFjdGVkL29ic2Vzc2VkIHRvIHRoZWlyIHJlc3BlY3RpdmUgd29tZW4uPGJyIC8+PGJyIC8+V2hlcmUtYXMgQ2hpbGx5IFNjZW5lcyBvZiBXaW50ZXIgYm9yZGVycyBvbiB0aGUgc3ViamVjdCBzdGFsa2luZywgdGhpcyBtb3ZpZSBoYXMgYSBtb3JlIGdyb3VuZGVkIGZvdW5kYXRpb24gd2l0aCB0aGUgc3ViamVjdCBvZiBsb3ZlIGJlY2F1c2UgYm90aCBwZW9wbGUgYXJlIGFscmVhZHkgaW4gYSByZWxhdGlvbnNoaXAuLiBhbmQgb3V0IG9mIHRoZSByZWxhdGlvbnNoaXAuLiBhbmQgYmFjayBpbiBpdCBhZ2Fpbi48YnIgLz48YnIgLz5BbmQgYmVjYXVzZSBpdCdzIGEgbW92aWUgdGhhdCB3YXMgcmVsZWFzZWQgaW4gMTk4MSwgaXQgaXMgb2YgaXRzIHRpbWUgaW4gdGVybXMgb2Ygc3R5bGVzIGFuZCBzdWNoLiBUaGF0J3MgdGhlIG1haW4gcmVhc29uIEkgbGlrZSB0aGlzIG1vdmllLiBNeSBiYXNpYyBydWxlIHdoZW4gaXQgY29tZXMgdG8gbW92aWVzIGlzICJJZiBpdCBzdWNrcyBhdCBsZWFzdCBpdCBtYXkgaGF2ZSBzb21lIGhpc3RvcmljIHJlbGV2YW5jZSIsIHlvdSBrbm93IHRpbWUgY2Fwc3VsZSBzdHVmZi48YnIgLz48YnIgLz5XaGljaCBsZWFkcyBtZSB0byB0aGUgaG9ycmlmaWMgc2NlbmVzIG9mIEFsYmVydCBCcm9va3Mgc2FucyBzaGlydC48YnIgLz48YnIgLz5UaGUgbWFuIGlzIGhhaXIuIFZlcnkgaGFpci4gTGlrZSBoZSdzIHdlYXJpbmcgYSBibGFjayBjdXJseSBmdXIgc3dlYXRlci1oYWlyeS4gQW5kIHdoYXQncyB3b3JzZSBpcyBoZSBhbG1vc3QgbG9va3MgYnVybiB2aWN0aW0taGFpcnkuIEl0J3Mgbm90IGEgcGxlYXNhbnQgc2lnaHQgYW5kIHRoZSBzY2VuZXMgd2l0aCBoaW0gd2l0aG91dCBhIHNoaXJ0IGdvIG9uIGFuZCBvbi4gQmFjayBpbiB0aGUgZWFybHkgODAncyBoYWlyeSBtZW4gd2VyZSBzZWVuIGFzIG5vcm1hbCBhbmQgbm90aGluZyBzaG9ja2luZy4gQnV0IGluIDIwMDkgdGhlIHNpZ2h0IG9mIHNvbWV0aGluZyBsaWtlIHRoaXMgaXMganVzdCBwbGFpbiByZXZvbHRpbmcuIFNvcnJ5LCBBbGJlcnQhIEkgd2lzaCBhdCBzb21lIHBvaW50IHNvbWVvbmUgc2FpZCAiaGV5IGxldCdzIHRyeSB0aGlzIHNjZW5lIGJ1dCB3aXRoIHlvdSB3ZWFyaW5nIGEgc2ltcGxlIHQtc2hpcnQsIEkgbWVhbiB5b3UgbWlnaHQgc2NhcmUgcGVvcGxlIi4gSXQncyBqdXN0IHJlYWxseSBiYWQgYW5kIEkgZmVlbCBzb3JyeSBmb3IgdGhlIHBvb3IgcHJldHR5IGFjdHJlc3MgdGhhdCBoYWQgdG8gZGVhbCB3aXRoIEFsYmVydCBCcm9va3MgbmFrZWQgYm9keSBvbiB0b3Agb2YgaGVycy4gU2hlIHdhcyBwcm9iYWJseSBwdWxsaW5nIG91dCBoaXMgaGFpcnMgZnJvbSBoZXIgdGVldGggZm9yIGRheXMgYWZ0ZXIgdGhhdC48YnIgLz48YnIgLz5Bbnl3YXksIGl0J3MgYW4gT0sgbW92aWUuIEl0IGNvdWxkIGhhdmUgYmVlbiBiZXR0ZXIgaWYgSSBoYWRuJ3Qgc2VlIEFsYmVydCBCcm9va3Mgd2l0aG91dCBoaXMgc2hpcnQgZm9yIHdoYXQgc2VlbWVkIGxpa2UgMTAgbG9uZyBjb250aW51b3VzIG1pbnV0ZXMgYmVjYXVzZSB0aGF0IHdpbGwgZm9yZXZlciB0YWludCBteSB2aWV3aW5nIG9mIHRoaXMgbW92aWUuKQAAAAAAAPA/CukHCLEDELEDItcHd2hlbiB5b3UgYWRkIHVwIGFsbCB0aGUgYXNwZWN0cyBmcm9tIHRoZSBtb3ZpZS0tLXRoZSBkYW5jaW5nLCBzaW5naW5nLCBhY3RpbmctLS10aGUgb25seSBvbmUgd2hvIHN0YW5kcyBvdXQgYXMgdGhlIGJlc3QgaW4gdGhlIGNhc3QgaXMgVmFuZXNzYSBXaWxsaWFtcy4uLmhlciBkZWRpY2F0aW9uLCBlbmVyZ3kgYW5kIHRpbWVsZXNzIGJlYXV0eSBtYWtlIFJvc2llIHRoZSBwZXJmZWN0IHJvbGUgZm9yIGhlci4gTmV2ZXIgaGF2ZSBpIGV2ZXIgc2VlbiBzb21lb25lIHBvcnRyYXkgUm9zZSB3aXRoIHN1Y2ggdmlicmFuY3khIFZhbmVzc2EncyBzaW5naW5nIHRhbGVudCBzaG93cyBiZWF1dGlmdWxseSB3aXRoIGFsbCB0aGUgc29uZ3Mgc2hlIHBlcmZvcm1zIGFzIFJvc2UgYW5kIGhlciBhY3Rpbmcgc2tpbGxzIG5ldmVyIGNlYXNlIHRvIGFtYXplIG1lISBIZXIgZGFuY2luZyBpcyBzbyBpbmNyZWRpYmxlLCBldmVuIGlmIGFzIHNvbWUgcGVvcGxlIHNheSB0aGUgY2hvcmVvZ3JhcGh5IHdhcyBiYWQtLS1oZXIgZGFuY2luZyBza2lsbHMgd2VyZSBkaXNwbGF5ZWQgYmV0dGVyIHRoYW4gZXZlciBiZWZvcmUhIEknZCByZWNvbW1lbmQgdGhpcyB2ZXJzaW9uIG92ZXIgdGhlICc2MyBqdXN0IGJlY2F1c2UgaSBmaW5kIHRoYXQgYWx0aG91Z2ggbGVuZ3RoeSB0aGUgYWN0aW5nIGJ5IFZhbmVzc2EgaXMgc3VwZXJiLS0tLS1ub3QgdG8gbWVudGlvbiB0aGUgZmFjdCB0aGF0IEphc29uIEFsZXhhbmRlciBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNhc3QgYXJlIHZlcnkgaW1wcmVzc2l2ZSBhcyB3ZWxsICh3aXRoIHRoZSBleGNlcHRpb24gb2YgQ2h5bm5hIFBoaWxpcHMuLi53aGF0IGluIGhlbGwgd2VyZSB0aGV5IHRoaW5raW5nIHdoZW4gdGhleSBjYXN0IGhlcj8pPGJyIC8+PGJyIC8+QWxsIGluIGFsbCBJJ2Qgc2F5IHRoaXMgdmVyc2lvbiBpcyB3b25kZXJmdWwgYW5kIEkgcmVjb21tZW5kIHRoYXQgZXZlcnlvbmUgc2VlIHRoaXMgdmVyc2lvbiEpAAAAAAAA8D8KmwUIsgMQsgMiiQV3aGVuIHRoaXMgc2hvdyBmaXJzdCBjYW1lIHRvIERpc25leSwgaSBsb3ZlIGl0IHN0YXJ0ZWQgd2F0Y2hpbmcgYWxsIHRoZSB0aW1lLiBJdCBxdWlja2x5IGJlY2FtZSBvbmUgb2YgbXkgZmF2b3JpdGUgRGlzbmV5IHNob3dzIGV2ZXIgYnV0IHRoaXMgc2hvdyBzb21laG93IHRyYW5zZm9ybWVkIGludG8gc29tZXRoaW5nIHRoYXQgaXMgZGlzdHVyYmluZyBhbmQgZGlzYXBwb2ludGluZy48YnIgLz48YnIgLz5JIGRvIG5vdyBmaW5kIGFueSBvZiB0aGUgc2Vjb25kIGFuZCB0aGlyZCBzZWFzb24gZnVuLCB0aGV5IHNlZW0gbGlrZSBhIHJlLXdhdGNoIG9mIHNvbWUgdGVlbnMgc2hvd3MuIEkgaGF0IHRoYXQgZ2FyYmFnZS4gVGhlIGZpcnN0IHNlYXNvbiB3YXMgdmVyeSB1bmlxdWUgYmVjYXVzZSBpdCBzaG93ZWQgU2FkaWUgd2hvIGxvdmVkIHNjaWVuY2UgYW5kIGFuaW1hbHMgYW5kIGNyZWF0dXJlcy4gVGhlIGZpcnN0IHNlYXNvbiB3YXMgdmVyeSBlbnRlcnRhaW5pbmcuIEkgbW9zdGx5IGRvbid0IGxpa2UgdGhlIHNlY29uZCBzZWFzb24gYmVjYXVzZSBvZiBCZW4uIEhlIGFubm95cyBtZSBhbmQgcGlzc2VzIHRoZSBjcmFwIG91dHRhIG1lLiBUaGUgcGxvdCBpbiB0aGUgc2Vjb25kIHNlYXNvbiBhbHNvIHN1Y2tzIGFuZCBpcyBqdXN0IGF3ZnVsKQAAAAAAAPA/CuMGCLMDELMDItEGd2hlbiB0aGUgZ2lsbW9yZSBnaXJscyBzdGFydGVkIGluIEdlcm1hbnkgaSBkaWQgbm90IHdhbnQgdG8gd2F0Y2ggdGhlbSBiZWNhdXNlIGZvciBtZSBpdCB3YXMganVzdCBzb21ldGhpbmcgd2hpY2ggd2FzIG5vdCB1bmlxdWUuIGl0IHdhcyBhIHNlcmllcyBhbmQgaSBldmVuIGRpZCBub3Qga25vdyBzb21lb25lIGluIGl0LiBsYXRlciBvbiwgaSByZWFsaXplZCB0aGF0IGVkd2FyZCBoZXJtYW5uIGlzIHBhcnQgb2YgdGhlIGNhc3Qgb2Ygb3ZlcmJvYXJkIChhIG1vdmllLCBpIGFic29sdXRlbHkgYWRvcmUpLiBpIGhhZCB0byB3YXRjaCBpdCBvbmNlIHdpdGggYSBmcmllbmQgYW5kIG5ldmVyIHN0b3BwZWQgc2luY2UuIGl0J3MganVzdCBmdW4uIHlvdSBoYXZlIHRoZSBmZWVsaW5nIHRoYXQgaXQgaXMgb2theSB0byBoYXZlIHNleCBiZWZvcmUgYmVpbmcgbWFycmllZCBhbmQgaXQncyBva2F5IHRvIGJlIGEgY29mZmVlIGp1bmtpZSBhbmQgdG8gZWF0IHVuaGVhbHRoeSBzdHVmZiBhbGwgdGhlIHRpbWUuIGkgZG8gbm90IGRvIHRoZXNlIHRoaW5ncyBhbGwgdGhlIHRpbWUgYnV0IHdoZW4gaSBkbyB0aGVzZSB0aGluZ3MgaSBmZWVsIGEgbGl0dGxlIGJpdCBsaWtlIGEgZ2lsbW9yZSBnaXJsLiBldmVuIG15IGJveWZyaWVuZCBzdGFydGVkIHRvIHdhdGNoIHRoZW0gYW5kIHRoYXQgdGVsbHMgc29tZXRoaW5nLiBmcm9tIHNlYXNvbiB0byBzZWFzb24gaXQgZ290IGJldHRlciB3aXRoIHRoZSBzY3JpcHRzIGFuZCB0aGUgc3Rvcmllcy4gdGhleSBoYXZlIGEgb3BlbiBtaW5kIGFuZCBieSBiZWluZyBkaWZmZXJlbnQgZnJvbSBldmVyeSBvdGhlciBzaG93LCB5b3Ugd2FudCB0byBiZSBsaWtlIHRoZW0uKQAAAAAAAPA/CuwGCLQDELQDItoGd2hlbiBteSBzaXN0ZXIgc2FpZCB0aGlzIG1vdmllIHdhcyBnb25uYSBiZSBnb29kIGkgaGFkIHNlY29uZCB0aG91Z2h0cyBidXQgaSB3YXRjaGVkIGl0IGFuZCBpdCB3YXMgYWN0dWFsbHkgZnVubnkuIGJhc2ljYWxseSB0aGUgbW92aWUgaXMgbWFkZSBvZiBhIHdlaXJkIGdpcmwgd2hvIGdvZXMgdG8gYSBzbWFsbCB0b3duIHdoZXJlIG5vIG9uZSBsaWtlcyBoZXIgYW5kIHNoZSBqdXN0IHdhbnRzIHRvIGdvIHRoZXJlIGFuZCBnZXQgdGhlIHJlYWRpbmcgb2YgaGVyIGF1bnRzIHdpbGwgZG9uIHNvIHNoZSBjYW4gZ28uIGJ1dCBpdHMgbm90IGFsbCB0aGF0IGVhc3kuIEluIHRoaXMgbW92aWUgeW91IHdpbGwgY29tZSBhY3Jvc3MgaGlsYXJpb3VzIGh1bW9yLCBhIHdpdGNoLCBhIGJvb2sgb2Ygc3BlbGxzL3JlY29waWVzLCBhIG1lbnRhbGx5IGNoYWxsZW5nZWQgdW5jbGUgYW5kIGEgZG9nLiBZb3Ugd2lsbCB1bmRlcnN0YW5kIHRoZSBtZWFuaW5nIG9mIHRoZSB3b3JkIGZyZWFrIGEgYWZ0ZXIgYW55d2F5cyBpIGhvcGUgeW91IHJ1biByaWdodCBvdXQgYW5kIHRyeSB0byBmaW5kIHRoaXMgcmVhbGx5IG9sZCBtb3ZpZS4gaG9wZSB5b3UgbGlrZSBpdCBpbiB0b3RhbCBpIHdpbGwgaGF2ZSB0byBnaXZlIGl0IGEgMC4uLi4gbm8gSSdtIHRvdGFsbHkgam9raW5nIGlsbCBnaXZlIGl0IGEgOSBob3BlIHlvdSB1bmRlcnN0YW5kIHRoYXQgeW91IHdpbGwgbGF1Z2gsIHlvdSB3aWxsIHNjcmVhbSBhbmQgeW91IG1heSBqdXN0IGJlIG9mZmVuZGVkLjxiciAvPjxiciAvPmxvdmUgeW91cnMgdHJ1bHk6IERha290YSB5b3UgY2FuIGVtYWlsIG1lIGF0IGRha290YV9sb3Zlc19pdEBob3QgbWFpbC5jb20gaWYgeW91IHdhbm5hKQAAAAAAAPA/Cv8ECLUDELUDIu0Ed2hlbiBpIHdhdGNoZWQgdGhpcyBjcmFwLCBpdCByZW1pbmRlZCBtZSBvZiB0aGUgdGhlIHRpdGxlIG9mIHRoZSBtb3ZpZSBGSVJFLCBXaGljaCBpcyB3aGVyZSB0aGlzIGdhcmJhZ2UgYmVsb25ncywgaW4gYSBmaXJlLiBJIGRvbid0IGV2ZW4ga25vdyB3aGF0IHRvIHNheSB0aGUgYWN0aW5nIGJsZXcsIHRoZSBmaXJlIGxvb2tlZCByZWFsbHkgZmFrZSwgQW5keSB0aGUgY2hpY2tzIGFyZSdudCBleGFjdGx5IHN1cGVybW9kZWxzLiBBbmQgbGFzdGx5IGkgZG9uJ3Qga25vdyB3aGF0IHlvdSBwZW9wbGUgYXJlIGNvbXBsYWluaW5nIGkgb3duIHRoaXMgZGFtbiBtb3ZpZSwgeWVhaCBoYXBweSBiaXJ0aGRheSB0byBtZSBXZWxsIGkgZ3Vlc3MgaXQgY291bGQgYmUgd29yc2UgaSBjb3VsZCBiZSB3YXRjaGluZyBsZWZ0IGJlaGluZCAyLiBBbmQgdG8gbWFrZSB0aGluZ3Mgd29yc2UgaSBoYXZlIHRoZSB3aG9sZSBzZXQgb24gRFZEIGZpcmUsdm9sY2FubyxlYXJ0aHF1YWtlLGF2YWxhbmNoZS4gQWxsIGknbSBtaXNzaW5nIGlzIHRoZSBhd2Vzb21lIHRvcm5hZG8gbW92aWUgd2hpY2ggaSBoZWFyIHN1Y2tzIGJhbGxzLjxiciAvPjxiciAvPldlbGwgdW50aWwgbXkgbmV4dCBjcmFwIG1vdmllIHBlYWNlKQAAAAAAAPA/CrsDCLYDELYDIqkDd2hlbiBpIHdhcyBhIGNoaWxkIHRoaXMgd2FzIHRoZSBtb3ZpZSBpIHdhdGNoZWQuIGkgdGhpbmsgaXQgaXMgYSBncmVhdCBtb3ZpZSBmb3IgdGhlIGtpZHMgdG8gd2F0Y2ggYW5kIHBhcmVudHMgZG9uJ3QgaGF2ZSB0byBiZSBhZnJhaWQgb2YgYW55IHZpb2xlbmNlIG9yIG9ic2NlbmUgaW1hZ2VzLiByYWluYm93IGJyaXRlIGlzIGEgY2hlZXJmdWwgeW91bmcgZ2lybCBhbmQgc2hlIGlzIHRyeWluZyB0byBtYWtlIHRoZSB3aW50ZXIgZ28gYXdheS4gc2hlIGZpbmRzIHRoYXQgc29tZXRoaW5nIG9yIHNvbWVvbmUgaXMgdHJ5aW5nIHRvIHN0ZWFsIHRoZSBzb3VyY2Ugb2YgbGlmZSBhbmQga2VlcCBpdCBmb3IgdGhlbXNlbHZlcy4gaSBsb3ZlIHRoaXMgbW92aWUgYW5kIGkgdGhpbmsgdGhhdCBldmVuIGFkdWx0cyBjYW4gZW5qb3kgdGhpcyBtb3ZpZS4pAAAAAAAA8D8KzgUItwMQtwMivAV3aGVuIGkgc2F3IGNvbW1lcmNpYWxzIGZvciB0aGlzIGkgd2FzIHRoaW5raW5nICJOTyBXSEFUIEhBUyBOSUNLIEFUIE5JVEUgRE9ORSEiIGJlY2F1c2UgaXQgd2FzIHRha2luZyB1cCAiZnJlc2ggcHJpbmNlIiBzbG90cy4gd2VsbCwgaSBzdGlsbCBsb3ZlIHRoZSBmcmVzaCBwcmluY2UuIGJ1dCBnZW9yZ2UgbG9wZXogaXMgYSBzdXJwcmlzaW5nbHkgZ29vZCBzaG93LiBpIGxvdmUgaG93IG5vdC1zdGVyZW90eXBpY2FsIGJlbm55IGlzLiBjYXJtZW4gaXMgYSBwcmV0dHkgZ29vZCBjaGFyYWN0ZXIsIGl0cyByZWFsbHkgZnVubnkgdG8gc2VlIGhvdyBzdHVwaWQgYW5kIG92ZXJlbW90aW9uYWwgc2hlIGNhbiBiZSBzb21ldGltZXMuIGkgZmVlbCBiYWQgZm9yIHRoZSBndXkgd2hvIHBsYXlzIG1heCwgaGUgbG9va3MgbXVjaCB5b3VuZ2VyIHRoZW4gaGUgYWN0dWFsbHkgaXMhIGJ1dCBtYXggaXMgYSBmdW4gY2hhcmFjdGVyLCBhbmQgYWN0ZWQgd2VsbC4gYW5kIHllYWgsIGFuZ2llIGlzIGEgbGl0dGxlIHN0ZXJlb3R5cGljYWwsIGJ1dCBzaGUgaGFzIGhlciBmdW5ueSBtb21lbnRzLiBoYSBoYSBnZW9yZ2UgZG9lcyBoYXZlIGEgYmlnIGhlYWQhIG5haCBidXQgaGUgY2FuIGJlIHJlYWxseSBnb29kIHRvby4gZnVubnkgc2hvdyEgaXQgZGVmaW5pdGVseSBzaG91bGQgYmUgb24gbW9yZSBvZnRlbiB0aGVuIGhvbWUgaW1wcm92ZW1lbnQuKQAAAAAAAPA/CpIFCLgDELgDIoAFd2hlbiBpIHNhdCBkb3duIHRvIHdhdGNoIHRoaXMgbW92aWUgaSB0aG91Z2h0IHRoYXQgaXQgbWlnaHQgYmUgc2xpZ2h0bHkgZ29vZC4gYnV0IG5vLiBpdCB3YXMgYSBPSyBmaWxtLCBub3QgZ29vZCwgYnV0IG5vdCBiYWQgZm9yIG1vc3Qgb2YgaXQgYnV0IHRoZW4geW91IGdldCB0byB0aGUgZW5kaW5nIGFuZCBpdCBsb3NzZXMgYWxsIGNyZWRpYmlsaXR5LiB0aGV5IHNob3VsZCBoYXZlIGp1c3QgbGVmdCB0aGVuIGRlYWQuIHRoZXkgZGlkIG5vdCBsZWF2ZSB0aGUgbGFzdCBiaXQgaXQgZGlkIG5vdCBtYWtlIGFueSBzZW5zZS4gaWYgdGhleSBoYWQgc29tZXRoaW5nIGF0IHRoZXkgYmVnaW5uaW5nIGFib3V0IGEgcGxhbmUgY3Jhc2ggeWVhaCBidXQgd2UgZGlkbid0IHNvIGl0IGRpZG4ndCB3b3JrLiB0aGUgZmlyc3QgYml0IGlzIE9LIGFuZCBpIGdpdmUgdGhlbSBjcmVkaXQgZm9yIHRoYXQgYnV0IHRoZSByZXN0IGlzIGp1c3QgcGxhbmUgYmFkIGFuZCB1bm5lY2Vzc2FyeSBpZiB5b3UgYXJlIHRoaW5raW5nIGFib3V0IGdvaW5nIGFuZCB3YXRjaGluZyB0aGlzIG1vdmllIERPTiJUIGl0IGlzIGF3ZnVsIGdvIGFuZCByZW50IHNvbWV0aGluZyB0aGF0IGlzIGFjdHVhbGx5IHdvcnRoIHdhdGNoaW5nLiBpIGdpdmUgaXQgMi8xMCkAAAAAAADwPwr3BAi5AxC5AyLlBHdoZW4gaSByZWFkIG90aGVyIGNvbW1lbnQsaSBkZWNpZGVkIHRvIHdhdGNoIHRoaXMgbW92aWUuLi48YnIgLz48YnIgLz5GaXJzdCwgY2FzdCBzcGVjaWFsbHkgTWljaGFlbCBNYWRzZW4gYW5kIFRhbWVyIEthcmFkYWdsaTsgZ29vZCBlbm91Z2guLi48YnIgLz48YnIgLz5GaWxtLHZlcnkgaW50ZWxsaWdlbmNlIGFuZCBpbnRlcmVzdGluZyBiZWNhdXNlICxjYXN0IGhhdmUgYSBsb3Qgb2YgaW50ZXJuYXRpb25hbCBzcGVjaWFsbHkgRXVyb3BlYW4gYWN0b3IgYW5kIGFjdHJlc3MgbGlrZSBmcm9tIFR1cmtleSBhbmQgUnVzc3NpYS4uLjxiciAvPjxiciAvPlNlY29uZCxTdG9yeSBpcyBiYXNpYyBhbmQgeW91IGNhbiBndWVzcyBidXQgaWYgeW91IGludGVyZXN0aW5nIGFjdGlvbiBnb29kIHBsYXkgeW91J2xsIGxpa2UgaW4gbXkgb3Bpbmlvbi4uLjxiciAvPjxiciAvPlRoaXJkLEZpbmFsIGNoYXB0ZXIgaXMgbm90IHNwZWNpYWwgb3IgaW50ZXJlc3RpbmcsaXQncyByZWd1bGFyIGxpa2Ugb3RoZXIgYWN0aW9uIG1vdmllcy4uLjxiciAvPjxiciAvPkZpbmFsbHksaSByZWNvbW1lbmQgdG8gd2F0Y2ggdGhpcyBtb3ZpZS4uLkFuZCBpIGhvcGUgWW91J2xsIGxvdmUgaXQgZW5qb3kgOkQpAAAAAAAA8D8KqRAIugMQugMilxB3aGVuIGkgZmlyc3Qgc3RhcnRlZCB3YXRjaGluZyB0aGVzZSBpdCBiZWNhbWUgb25lIG9mIG15IGZhdm91cml0ZSBzaG93cy4gTWVsaXNzYSBKb2FuIGhhcnQgaXMgdmVyeSBmdW5ueSBhbmQgdGFsZW50ZWQgc28gd2VyZSB0aGUgYXVudHMgYW5kIHRoZSBvdGhlciBjaGFyYWN0ZXJzIGFuZCB0aGUgc3RhciBvZiBvZiB0aGUgc2hvdyBTYWxlbSB0aGUgY2F0LCBoZSB3YXMgaW1tZW5zZWx5IGZ1bm55LiB0aGUgZmlyc3QgZmV3IHNlYXNvbiBpbiBteSBvcGluaW9uIHdlcmUgdGhlIGJlc3Qgd2hlcmUgU2FicmluYSB3YXMgYSB0ZWVuYWdlciBpbiBoaWdoIHNjaG9vbCBhZGFwdGluZyB0byB3aXRjaCBsaWZlLiB0aGV5IHdlcmUgbW9zdCBmdW5uaWVzdCwgbW9zdCBlbnRlcnRhaW5pbmcgYW5kIG1vc3QgdW0uLi4gZ29vZC4gaSdtIG5vdCBhIGZhbiBvZiB3aGVuIHRoZXkgc3RhcnRlZCBpbnRyb2R1Y2luZyBCcmFkIGFuZCBEcmVhbWVyIGNhdXNlIGkgcXVpdGUgbGlrZWQgVmFsZXJpZSwgYnV0IHRoZXkgd2VyZSBva2F5IHRoZSBwcm9ibGVtIHdhcyB0aGV5IHdlcmUgb25seSBpbiBpdCBmb3Igb25lIHNlYXNvbi4gaWYgeW91J3JlIGdvbm5hIGhhdmUgbmV3IHBlb3BsZSBhdCBsZWFzdCBrZWVwIHRoZW0uIGkgZGlkbid0IGxpa2UgSm9zaCBoZSB3YXMgYSB0dyp0LCBpIHByZWZlcnJlZCBIYXJ2ZXkgYnV0IHRoZW4gaGUgZGlzYXBwZWFyZWQuIGFuZCB0aGV5IGdvdCByaWQgb2YgTGliYnkhIGl0IHdvdWxkIGhhdmUgYmVlbiBhd2Vzb21lIGlmIHRoeSBoYWQgYmVlbiBiaWNrZXJpbmcgaW4gdGhlc2VzIHNldmVuIHllYXJzLiBhbmQgTXIuIGNyYWZ0IGFzIHdlbGwsIGlmIGhpbSBhbmQgWmVsZGEgZ290IG1hcnJpZWQgdGhhdCB3b3VsZCBoYXZlIGJlZW4gZ29sZCEgdGhlbiBTYWJyaW5hIG1vdmVzIG91dCBvZiBoZXIgYXVudHMgaG91c2UgYW5kIGludG8gUm94aWUvTWlsZXMvTW9yZ2FuJ3MgaG91c2UuIGkgZGlkbid0IGxpa2UgdGhlc2VzIHBlb3BsZSBlaXRoZXIsIGl0IGRpZG4ndCByZWFsbHkgc2VlbSB0aGV5IGxpa2VkIFNhYnJpbmEuIFNhYnJpbmEgc2VlbWVkIHRvIGxvc2UgaGVyIGNoYXJtIGFuZCBzdHVmZiBhbmQgdGhlIGF1bnRzIHNlZW0gdG8gYmUgc2h1bm5lZCBvdXQgb2YgaGVyIGxpZmUgYW5kIGludG8gdGhleSdyZSBvd24gc3R1cGlkIHN0b3J5IGxpbmVzLiBpIGtpbmQgb2Ygc3RvcHBlZCB3YXRjaGluZyBpdCBmb3IgYSB3aGlsZSBhbmQgdGhlIG9sZCByZS1ydW5zIHdlcmUgYmFjayBhbmQgaSB3YXMgbGlrZSB3aG9vLWhvbyEgTE9MLiBpIG11c3Qgc2F5IHRoZSBsYXN0IGZldyBzZWFzb25zIHdlcmUgYWJzb2x1dGVseSB0ZXJyaWJsZS50aGV5IGdvdCByaWQgb2YgdGhlIGF1bnRzIHdoaWNoIHN1Y2tlZCBjYXVzZSB0aGV5IHdlcmUgYSBiaWcgcGFydCBvZiB0aGUgc2hvdy4gdGhlbiBzdWRkZW5seSBzaGUgbGV0cyB0aG9zZSB0d28gZnJlZWxvYWRlcnMgbW92ZSBpbiB0byB0aGUgbmljZSBob3VzZSB3aGVuIHRoZXkgdHJlYXRlZCBoZSBsaWtlIGRpcnQuIGFuZCBub3cgc2hlJ3Mgd29ya2luZyBhdCBzb21lIG1hZ2F6aW5lIHNob3Agc28gdGhleSdyZSBwdXR0aW5nIGxvYWRzIGNlbGVicml0eSBndWVzdCBzdGFycyBpbnRvIHRoZSBzaG93LCBpZiB0aGV5J3JlIGluIGV2ZXJ5IGVwaXNvZGUgaXQga2luZCBvZiBydWlucyBpdC4gdGhlIHByb2dyYW1tZSBqdXN0IHJlYWxseSB3ZW50IGRvd25oaWxsIGFuZCBsb3N0IGl0cyBsdXN0ZXIuIGkgc2F3IHRoZSBsYXN0IGVwaXNvZGUuIGl0IGhhZCB0aGUgYXVudHMgaW4gaXQgKFplbGRhIHdhcyByZWR1Y2VkIHRvIGEgY2FuZGxlKSBhbmQgc2hlJ3MgYWJvdXQgdG8gZ2V0IG1hcnJpZWQgYnV0IHNoZSBydW5zIG9mZiB3aXRoIEhhcnZleSB0aGUgZW5kLiBpIHdvdWxkIGhhdmUgbGlrZWQgdG8ga25vdyB3aGF0IGhhcHBlbmVkIGFmdGVyLiB3ZWxsIHRoYXRzIG15IHJldmlldyBhbmQgdGhlIG9ubHkgdGhpbmcgaSBjYW4gc2F5IGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgc3RheWVkIGl0J3MgYXBwZWFsaW5nIHNlbGYgdGhyb3VnaCB0aGUgc2V2ZW4geWVhcnMgd2FzIFNhbGVtIHRoZSBjYXQuKQAAAAAAAPA/CuIGCLsDELsDItAGd2hlbiBpIGZpcnN0IHNhdyB0aGlzIG1vdmllIGkgd2FzIGxpdGVyYWxseSByb2xsaW5nIGFyb3VuZCBvbiB0aGUgZmxvb3IgbGF1Z2hpbmcgKGVzcGVjaWFsbHkgd2hlbiB0aGV5IHdlcmUgZ2V0dGluZyBjaGFzZWQgYnkgdGhlIHdhdGVyLCBhbmQgd2hlbiB0aGUgZ3V5IGRyb3ZlIHRocm91Z2ggcGVvcGxlcyBnYXJkZW5zLCBpIG1lYW4gd291bGQgaXQgaHVydCB0byBkcml2ZSBhcm91bmQgdGhlIHdhc2hpbmcgbGluZT8pIHRoZSBzcGVjaWFsIGVmZmVjdHMhIHRoaXMgbW92aWUgY2xlYXJseSBkaWRuJ3QgaGF2ZSBhIGJpZyBidWRnZXQuIGVpdGhlciB0aGF0IG9yIHRoZSBndXkgbGVmdCBoaXMgdG9kZGxlciBpbiBjaGFyZ2Ugb2YgdGhlIGNvbnRyb2xzLiB0aGUgd2F0ZXIgY29taW5nIG91dCBvZiB0aGUgZGFtbiBsb29rZWQgbGlrZSBhIGNsb3NlIHVwIG9mIGEgY2FuIG9mIGJlZXIgdGhhdCBoYWQgZml6emVkIHVwLiB3aGF0IHdlcmUgdGhlIGFjdG9ycyB0aGlua2luZz8gZGlkIHRoZXkgYWN0dWFsbHkgYmVsaWV2ZSB0aGF0IGl0IHdhcyBhIGdvb2QgbW92aWU/IG9yIGRpZCB0aGV5IGp1c3QgcmVhbGx5IG5lZWQgdGhlIG1vbmV5PyBub3QgdGhhdCB0aGV5IHdvdWxkJ3ZlIGVhcm5lZCBhIGxvdC4gd2hlbiBpIGZpcnN0IHNhdyB0aGlzLCBpIHdhcyBsaWtlICdnb2QsIGhvdyBvbGQgaXMgdGhpcz8nIHdoZW4gaSBsb29rZWQgb24gdGhlIGluZm8gYWJvdXQgaXQgYW5kIHNhdyB0aGF0IGl0IHdhcyBtYWRlIGluIDIwMDMsIGkgdGhvdWdodCBteSBUViB3YXMgYnJva2VuLjxiciAvPjxiciAvPnRoaXMgcmVhbGx5IGlzIGEgZGlzYXN0ZXIgbW92aWUsIGluIG1vcmUgd2F5cyB0aGFuIG9uZS4pAAAAAAAA8D8KmAkIvAMQvAMihgl3aGVuIGkgZmlyc3Qgc2F3IHRoYXQgdGhpcyBtb3ZpZSB3YXMgZ29pbmcgdG8gYmUgcGxheWluZyBvbiBUViwgaSBvbmx5IG5ldyBvZiBwYXVseSBzaG9yZSBhcyB0aGlzIGpva2Ugb2YgYSBjb21lZGlhbiB3aG8gd29yZSByZWFsbHkgd2VpcmQgb3V0Zml0cyBiYWNrIGluIHRoZSBkYXkuIGkgc3RpbGwgZGVjaWRlZCB0byB3YXRjaCBpdCBhbmQgaSB3YXMgaW1wcmVzc2VkLiBzaG9yZSBicmluZ3MgYSBmcmVzaCBicmVhdGggb2YgYWlyIHRvIHRoZSBzY3JlZW4uIGluIHRoaXMgbW92aWUsIGhlIHBsYXlzIGNyYXdsIGEgY29sbGVnZSBhZHZpc2VyIHRoYXQgcHJvYmFibHkgbmVlZHMgaGlzIG93biBhZHZpc2VyIGFzIHdlbGwuIGNhcmxhIGd1Z2lubywgaW4gYW4gdW5kZXJyYXRlZCByb2xlLCBwbGF5cyBiZWNjYSwgYSBtaWR3ZXN0ZXJuICJmYXJtIGdpcmwiIHdpdGggYSBzaW1wbGUgZmFtaWx5IGFuZCBhIG1vdmllLWNsaWNow6kgYm95ZnJpZW5kIHRyYXZpcy4gd2hlbiBzaGUgaGVhZHMgb2ZmIHRvIHVjbGEsIHNoZSBtZWV0cyBjcmF3bCBhbmQgaGUgcXVpY2tseSB0dXJucyBoZXIgaW50byBhIGJ1YmJseSwgYmxvbmRlIENhbGlmb3JuaWFuIGdpcmwuIHNoZSBkZWNpZGVzIHRvIGJyaW5nIGNyYXdsIGhvbWUgZm9yIHRoZSB0aGFua3NnaXZpbmcgYnJlYWsuIHdoZW4gdHJhdmlzIGRlY2lkZXMgdG8gcHJvcG9zZSwgYmVjY2EgbmVlZHMgYSBkaXN0cmFjdGlvbi4gY3Jhd2wgdGhlbiBkZWNpZGVzIHRvIG1ha2UgZXZlcnlvbmUgYmVsaWV2ZSB0aGF0IGhpbSBhbmQgYmVjY2EgYXJlIGVuZ2FnZWQgYWxyZWFkeS4gdGhpcyBsZWFkcyB0byBjcmF3bCBzcGljaW5nIHVwIHRoZSByb21hbmNlIGJldHdlZW4gYmVjY2EncyBwYXJlbnRzLCBiZWZyaWVuZGluZyBoZXIgYnJvdGhlciwgYW5kIGV2ZW4gZ2V0dGluZyB0aGUgZGFuY2VycyBhdCB0aGUgbG9jYWwgYmFyIHRvIGdldCBhIGxpdHRsZSBsb29zZS4gaSdtIG5vdCBnb2luZyB0byByZXZlYWwgdGhlIGVuZCwgYnV0IGkgbGlrZWQgaXQuIGFueXdheSwgZG9uJ3QgcmVudCBpdCBpZiB5b3Ugd2FudCBhIHBvaWduYW50IHBlcmZvcm1hbmNlOyByZW50IGl0IGlmIHlvdSB3YW50IHRvIGxhdWdoIHlvdXIgYnV0dCBvZiBhbmQgZW5qb3kgYW4gb2Z0ZW4tbWlzc2VkIHBhcnQgb2YgOTAncyBodW1vci4pAAAAAAAA8D8KhwgIvQMQvQMi9Qd3aGVuIGkgZmlyc3QgcmVhZCBhYm91dCAiYmVybGluIGFtIG1lZXIiIGkgZGlkbid0IGV4cGVjdCBtdWNoLiBidXQgaSB0aG91Z2h0IHdpdGggdGhlIHJpZ2h0IHBlb3BsZSwgdGhlIHJpZ2h0IGxvY2F0aW9ucywgdGhlIHJpZ2h0IG11c2ljIGFuZCBmYXNoaW9uIHlvdSBjb3VsZCBhdCBsZWFzdCBtYWtlIGEgdHJpdmlhbCBtb3ZpZSBhYm91dCB0aGUgaGlwIGJlcmxpbiBldmVyeW9uZSBzZWVtcyB0byBiZSB0YWxraW5nIGFib3V0LiBidXQgZWlzc2xlciBmYWlsZWQsIGl0J3Mgc28gcmlkaWN1bG91c2x5IHVuYXV0aGVudGljLiBpdCdzIGEgY29tcGxldGUgbWlzcmVwcmVzZW50YXRpb24gb2Ygd2hhdCBpdCBpcyBnb2luZyBvbiBpbiBiZXJsaW4ncyBzbyBjYWxsZWQgc2NlbmUuIG9mIGNvdXJzZSBpdCdzIG5vdCBhbGwgYWJvdXQgaGlwcG5lc3MsIGJ1dCB5b3Ugc2hvdWxkIGV4cGVjdCBtb3JlIGZyb20gYSBtb3ZpZSB0aGF0J3MgYmVpbmcgc29sZCBhcyAidGhlIGRlZmluaXRlIGJlcmxpbiBtb3ZpZSIuPGJyIC8+PGJyIC8+YW5kIGFwYXJ0IGZyb20gYWxsIHRoZSBjcmVkaWJpbGl0eSBzdHVmZiwgaXQgcmVhbGx5IGlzIGEgYmFkIG1vdmllLiBtZWRpb2NyZSBhY3RpbmcgYW5kIGEgcmF0aGVyIGJvcmluZyBwbG90LiBpbnRlcmVzdGluZ2x5IHNvbWUgb2YgdGhlIGFjdG9ycyBoYXZlIHByb3ZlZCBpbiBvdGhlciBtb3ZpZXMgdGhhdCB0aGV5IGFyZSBhY3R1YWxseSBxdWl0ZSB0YWxlbnRlZC4gc28gaXQgcmVhbGx5IG11c3QgYmUgcG9vciBkaXJlY3Rpbmcgc2tpbGxzLjxiciAvPjxiciAvPmRvbid0IGJvdGhlciB3YXRjaGluZyAiYmVybGluIGFtIG1lZXIiIHVubGVzcyB5b3UgYXJlIDE3LCBjb21lIGZyb20gc29tZSBzbWFsbCB0b3duIGluIHdlc3Rlcm4gR2VybWFueSBhbmQgd2FudCB0byBtb3ZlIHRvIHRoZSBiaWcgY2l0eSBhZnRlciB5b3UgZmluaXNoZWQgc2Nob29sLiB0aGVuIHlvdSBtaWdodCBhY3R1YWxseSBmaW5kIGl0IGVuam95YWJsZSBhbmQgdG90YWxseSBjb29sLikAAAAAAADwPwr2CAi+AxC+AyLkCHdoZW4gaSBmaXJzdCBoZWFyZCBhYm91dCB0aGlzIG1vdmllIGkgdGhvdWdodCBpdCB3b3VsZCBiZSBsaWtlIFRoZSBEdWNoZXNzKDIwMDgpLCBidXQgd2hlbiBpIHNhdyB0aGUgZmlyc3QgMzAgbWludXRlcyBvZiBUaGUgWW91bmcgVmljdG9yaWEgaSBrbmV3IHRoaXMgd291bGRuJ3QganVzdCBiZSBhIHNvbGlkIG1vdmllLiBBbG1vc3QgZXZlcnl0aGluZyBpbiB0aGlzIG1vdmllIGlzIGdyZWF0LCB0aGUgY29zdHVtZXMgYXJlIHJlYWxseSBhbWF6aW5nIGFuZCB0aGUgc2V0dGluZ3MgYXJlIGFsc28gYmVhdXRpZnVsbHkgc2hvdC48YnIgLz48YnIgLz5UaGUgb25seSB0aGluZyB0aGF0IHJlYWxseSBsZXQgbWUgZG93biBhcmUgdGhlIHBlcmZvcm1hbmNlcy4gRW1pbHkgQmx1bnQoVGhlIERldmlsIFdlYXJzIFByYWRhKSBpcyB0aGUgc3RhciBvZiB0aGUgZmlsbSwgYnJpbmdpbmcgVmljdG9yaWEgdG8gbGlmZSBhbmQgd2l0aCB0aGlzIG1vdmllIHNoZSBzaG93cyB0aGF0IHNoZSBpcyBhIGdyZWF0IGFjdHJlc3MgYW5kIG1heWJlIHBpY2tpbmcgYSBmaXJzdCBPc2NhciBub21pbmF0aW9uIGZvciBoZXIgcGVyZm9ybWFuY2UuIFJ1cGVydCBGcmllbmQgaXMgYWxtb3N0IGJsYW5kIGFzIFByaW5jZSBBbGJlcnQgYnV0IGhlIGhhcyBncmVhdCBjaGVtaXN0cnkgd2l0aCBFbWlseSBCbHVudC4gUGF1bCBCZXR0YW55IGlzIGFsc28gc29saWQgYXMgTG9yZCBNZWxib3VybmUgYWx0aG91Z2ggaSBleHBlY3RlZCBtb3JlIG9mIGhpbS4gSmltIEJyb2FkYmVudCBhbmQgTWlyYW5kYSBSaWNoYXJkc29uIGJvdGggaGF2ZSBzdXBwb3J0aW5nIHJvbGVzIGJ1dCBhcmUgZm9yZ2V0dGFibGUuPGJyIC8+PGJyIC8+VG8gbWUgdGhlIGZpbG0gZmVlbHMgbGlrZSB1bmZpbmlzaGVkLiBNYXliZSB0aGF0IHRoZSBzY3JlZW53cml0ZXJzIGNoYW5nZWQgdG9vIG1hbnkgdGhpbmdzIGluIHRoZSBzY3JpcHQsIGkgZG9uJ3Qga25vdyBidXQgdGhhdCdzIGhvdyBpIGZlZWwgYWJvdXQgdGhlIG1vdmllLjxiciAvPjxiciAvPkJ1dCBvdmVyYWxsIGl0J3MgYSBncmVhdCBtb3ZpZSBhYm91dCB0aGUgZWFybHkgeWVhcnMgb2YgVmljdG9yaWEgd2l0aCBhIEdyZWF0IHBlcmZvcm1hbmNlIGZyb20gRW1pbHkgQmx1bnQuKQAAAAAAAPA/CsgGCL8DEL8DIrYGd2hlbiBmZWxsaW5pIGNvbW1pdHRlZCA4IDEvMiB0byBmaWxtIG1hbnkgY29tbWVudGVkIHRoYXQgaXQgd2FzIHRoZSBtb3N0IHBlcnNvbmFsIHZpc2lvbiBldmVyIHRvIGZpbmQgaXRzIHBlcmZlY3QgZXhwcmVzc2lvbi4gd2hlbiBkYW50ZSBjYXN0IGJldHJpY2UgdG8gdGhlIGZsYW1lcyBvZiBoaXMgdW5keWluZyBwYXNzaW9uIG1hbnkgd2VyZSBhZ2hhc3QgYXQgdGhlIGhvbmVzdCBicnV0YWxpdHkgb2YgaGlzIHVucmVxdWl0ZWQgZmVlbGluZ3MgZm9yIGEgeW91bmdlciB3b21hbi4gd2hlbiBvbnVyIHR1a2VsLCBhbmQgYSBtZXJyeSBiYW5kIG9mIHdpY2tlZGx5IHRhbGVudGVkIGFuZCBtaXNmaXRlZCBmaWxtbWFrZXJzLS1mcm9tIHRoZSBtZWNjYSBvZiBtb3ZpZS1tYWtpbmcgaW5zYW5pdHktLWJhbmQgdG9nZXRoZXIsIGR1cmluZyB0aGUgY291cnNlIG9mIHR3byBjaGlsbHkgd2Vla3MgaW4gZGVjZW1iZXIgMjAwMCwgbWFueSBjb21tZW50ZWQgdGhhdCBub3RoaW5nIG1vcmUgc29waG1vcmljIGhhZCBldmVyIGJlZW4gY29tbWl0dGVkLi4ubXVjaCBsZXNzIG9uIGZpbG0uPGJyIC8+PGJyIC8+d2VsbCwgdG8gdGhlIGRvdWJ0ZXJzIG91dCB0aGVyZSwgd2F0Y2ggdGhpcyBvcmlnaW5hbCBwaWVjZSBhbmQgZmluZCBvdXQgd2h5IHRoZSBJRCBpcyBib3RoIGEgY2hhcm1pbmcgYW5kIHBvd2VyZnVsIHRoaW5nLiBhbmQgaWYgdGhhdCBkb2Vzbid0IGdldGNoeWEsIHJvbGwgb3ZlciBhbmQgcnViIG9uZSBvdXQuLi5pdCdzIHByb2JhYmx5IHRpbWUgeW91IGRpZCBzby48YnIgLz48YnIgLz5rdWRvcyBvbnVyIG9uIGEgZ3JlYXQgcGllY2Ugb2YgYXJ0KQAAAAAAAPA/CqsTCMADEMADIpkTd2hlbiBkaXNjdXNzaW5nIGEgbW92aWUgdGl0bGVkICdzbmFrZXMgb24gYSBwbGFuZScsIHdlIHNob3VsZCBwb2ludCBvdXQgZWFybHkgdGhhdCB0aGUgc25ha2VzIGFyZSBwcmV0dHkgZGFybiBpbXBvcnRhbnQgdG8gdGhlIHBsb3QuPGJyIC8+PGJyIC8+d2hhdCB3ZSBoYXZlIGhlcmUgYXJlIHZlcnkgYmFkIGNnaSBzbmFrZXMgdGhhdCBuZWl0aGVyIGxvb2sgbm9yIG1vdmUgbGlrZSByZWFsIHNuYWtlcy4gc25ha2VzIGFyZSBzY2FyeSBiZWNhdXNlIHRoZXkgYXBwZWFyIHRvIGJlIHNsaW15LCB0aGV5IGNyYXdsIHRoZXkgc2xpdGhlci4gdGhlc2Ugc25ha2VzIGRvIG5vdGhpbmcgb2YgdGhlIHNvcnQuIHRoZXkgZ2xpZGUgYWxvbmcgbGlrZSB0aGV5IHdvdWxkIGluIGEgdmlkZW8gZ2FtZS4gdGhleSBhcmUgY2FydG9vbiBzbmFrZXMuIGkgd291bGQgZ28gYXMgZmFyIHRvIHNheSB0aGF0IGV2ZW4gc29tZW9uZSB0aGF0IGhhZCBhIG1ham9yIHBob2JpYSBhZ2FpbnN0IHJlYWwgc25ha2VzIHdvdWxkIG5vdCBmaW5kIHRoZXNlIG9uZXMgc2Nhcnk8YnIgLz48YnIgLz53aHkgb24gZWFydGggdGhlbiB3b3VsZCB5b3Ugd2FudCB0byBpbmNsdWRlIGV4dHJlbWUgY2xvc2UgdXBzIG9mIHRoZXNlIGNnaSBmYWlsdXJlcz8gd2h5IG5vdCByZWx5IG9uIHN1c3BlbnNlLi4gdGhlIHdob2xlICdsZXNzIGlzIG1vcmUnIGV0aGljLiBvciBiZXR0ZXIgc3RpbGwsIHdoeSBub3QganVzdCBtYWtlIHRoZW0gbG9vayBnb29kIGluIHRoZSBmaXJzdCBwbGFjZT8gYW5kIHRoZW4gbWF5YmUgc3RpbGwgdXNlIHRoZW0gc3BhcmluZ2x5PGJyIC8+PGJyIC8+dGFrZSBvbmUgbG9vayBhdCBqb2huIGNhcnBlbnRlcnMgJ3RoZSB0aGluZycuIGhlcmUgd2UgaGF2ZSByZWFsIHNsaW1lLCBhbmQgZ29yZSBvZiBlZXJpZSBwcm9wb3J0aW9ucy4gMjAgeWVhcnMgZ28gYnkgYW5kIHdlIGdldCB0aGlzIHBpbGUgb2Ygc3Rpbmtpbmcgc2Z4IGNyYXAgJ3NuYWtlcyBvbiBhIHBsYW5lJy4gd2hlbiBhcmUgdGhlc2UgcGVvcGxlIGdvaW5nIHRvIHdha2UgdXAgYW5kIHNtZWxsIHRoZSBjb2ZmZWU/IHNwZWNpYWwgZWZmZWN0cyBhcmUgZ29pbmcgYmFja3dhcmRzITxiciAvPjxiciAvPnN1cmUgeW91IGNvdWxkIHNheS4uIGJ1dCB0aGUgbW92aWUgaXMgYSBqb2tlLCBnZXQgaXQ/IHN1cmUgaSdtIHdpdGggdGhhdCBpZGVhLCBidXQgZG8gaXQgd2VsbCEgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLCB0aGlzIG1vdmllIGhhcyBjcmFwIGRpYWxvZ3VlLiBhbmQgdGhlIG11c2ljIGFuZCBzb3VuZCBlZmZlY3RzIGFyZSBub3QgY3JlZXB5IG9yIG1lbW9yYWJsZSBpbiBhbnkgd2F5LjxiciAvPjxiciAvPmkgY291bGQgaGFuZGxlIGV2ZXJ5IG90aGVyIGFjdG9yIGJlaW5nIHBhcnQgb2YgdGhpcyBtb3ZpZSwgZXhjZXB0IGZvciBqYWNrc29uLiB3aGF0IHdhcyBoZSBkb2luZyB0aGVyZT8gdGhlIG1hbiB3aG8gc3RhcnJlZCBpbiBwdWxwIGZpY3Rpb24gMTAgeWVhcnMgYWdvLiBpcyB0aGlzIGNhcmVlciBwcm9ncmVzc2lvbj8gYXJlIHlvdSBvZmZlcmluZyBwZW9wbGUgdmFsdWUgZm9yIG1vbmV5PyBuby4gaSdkIGxpa2UgdG8ga25vdyB3aGF0IFRhcmFudGlubyB0aG91Z2h0IHdoZW4gaGUgd2FzIGhhbGYgd2F5IHRocm91Z2ggdGhpcyBzdGlua2VyIG9mIGEgbW92aWU8YnIgLz48YnIgLz50aGUgY3VycmVudCBnZW5lcmF0aW9uIHNlZW0gdG8gaGF2ZSB2ZXJ5IGxvdyBleHBlY3RhdGlvbnMuIGFuZCBIb2xseXdvb2Qgc2VlbXMgdG8gYmUgb2ZmZXJpbmcgdGhlbSBqdXN0IHdoYXQgdGhleSB3YW50LiBvbiBsZWF2aW5nIHRoZSBjaW5lbWEgaSBzYXcgYSBudW1iZXIgb2YgYWR2ZXJ0aXNlbWVudHMgZm9yIHNvbWUgdHJ1bHkgaG9ycmVuZG91cyBsb29raW5nIGZ1dHVyZSByZWxlYXNlcyBpbmNsdWRpbmcuLi4gRE9BOiBkZWFkIG9yIGFsaXZlLCAoYW5vdGhlcikgY2dpIGFuaW1hbCBmaWxtIGNhbGxlZCAnZmx1c2hlZCBhd2F5JywgYW5kIGFub3RoZXIgY3JhcCBsb29raW5nIGNvbWVkeSBuYW1lZCAnY2xpY2snLiBpbiBhZGRpdGlvbiB0byB0aGF0IGkgc2F3IHNvbWUgYXdmdWwgdHJhaWxlcnMsIGluY2x1ZGluZyBvbmUgZm9yIChhbm90aGVyKSBjcmFwIEJyaXRpc2ggaG9ycm9yL2NvbWVkeS4gaSd2ZSB0cnVseSBub3Qgc2VlbiB0aGUgbW92aWUgaW5kdXN0cnkgaW4gYSBtZXNzIGxpa2UgdGhpcyBmb3IgYSBsb25nIHRpbWU8YnIgLz48YnIgLz5leHBlY3QgdG8gc2VlIHRoaXMgbW92aWUgZm9yIHNhbGUgaW4gdGhlIERWRCBiYXJnYWluIHNlY3Rpb24gZm9yIMKjMSBpbiA2IG1vbnRocyB0aW1lLiBhbmQgaWYgeW91J3JlIGV4cGVjdGluZyB0byBzZWUgYSBibGFjayBjb21lZHkgd2l0aCB0b25uZXMgb2YgZ3JlYXQgbG9va2luZyBzbmFrZXMsIGFuZCBzb21lIGJhZCBhc3MgY29vbCBkaWFsb2d1ZSBjb21pbmcgZnJvbSBzYW11ZWwgbCBqYWNrc29ucyBsaXBzLiBmb3JnZXQgaXQuKQAAAAAAAPA/CoQICMEDEMEDIvIHd2hlbiBJIGtub3cgdGhhdCBXYWx0ZXIgd2lsbCBuZXZlciBncmFjZSBhbm90aGVyIHNldC5JIHdhcyBpbiBteSAzMCdzIHdoZW4gSSBmaXJzdCBzYXcgdGhpcyBzd2VldCxlbmRlYXJpbmcgYW5kIHVuYWJhc2hlZGx5IHJvbWFudGljIGZpbG0uSSBsb3ZlZCBpdCBmcm9tIHRoZSBmaXJzdCBzY2VuZSxhbmQgYWxsIHRoZSB3YXkgdGhyb3VnaCB0byB0aGUgZW5kLkFydCBDYXJuZXkgd2FzIGhpcyB1c3VhbCBkYWZ0IHNlbGY7IEdsZW5kYSBtYXRjaGVkIFdhbHRlciBzdGVwIGZvciBzdGVwIGluIHRoZSB3aXR0aWNpc21zO2FuZCBSaWNoYXJkIEJlbmphbWluIHN1cHBsaWVkIHRoZSBzYXJjYXN0aWMgdm9pY2Ugb2YgcmVhc29uIHRoYXQgaGUgZG9lcyBzbyB3ZWxsLkFsb25nIHRoZSB3YXkgdGhlcmUgd2VyZSBtYW55IGFjdG9ycyB3aG9tIHdlIGFsbCByZWNvZ25pemUsZG9pbmcgdGhlaXIgdXN1YWwgYnJpbGxpYW5jZS4gVGhlcmUgYXJlIGEgY291cGxlIG9mIGxpbmVzIGluIHRoZSBtb3ZpZSB3aGljaCBteSBTTyBhbmQgSSBoYXZlIHVzZWQgdGhyb3VnaG91dCB0aGUgeWVhcnMsYnV0IEkgd29uJ3Qgc2F5IGFueXRoaW5nIGFib3V0IHRoZW0gaGVyZS5JJ20gcHJldHR5IHN1cmUgeW91IHdpbGwga25vdyB3aGljaCB0d28gSSBhbSB0YWxraW5nIGFib3V0LiBKdXN0IGdldCB0aGlzIG1vdmllLk1ha2Ugc29tZSBwb3Bjb3JuLGdyYWIgeW91ciBzcXVlZXplKGlmIGhlIGlzIGFzIHNhcHB5IGFzIG1pbmUgaXMsZm9yIHdoaWNoIEkgYW0gdGhhbmtmdWwpLGFuZCBlbmpveSB0aGlzIHN0YW5kb3V0IHJvbWFudGljIGNvbWVkeSBmcm9tIHRoZSA3MCdzLiBZb3Ugd2lsbCBub3QgYmUgZGlzYXBwb2ludGVkLiBIb3dldmVyLEkgaGF2ZSB0aGUgZmVlbGluZyB0aGF0IEkgYW0gcHJlYWNoaW5nIHRvIHRoZSBjaG9pciBoZXJlIGJlY2F1c2UgYW55b25lIHdobyBsb3ZlcyBXYWx0ZXIgd2lsbCBhbHJlYWR5IG93biBpdC5JJ20gdmVyeSBnbGFkIGl0J3Mgb3V0IG9uIERWRCBub3csZmluYWxseS4pAAAAAAAA8D8KiwUIwgMQwgMi+QR3aGF0IHdhcyB0aGUgcXVvdGUgYnkgYXJjaGJpc2hvcCB0dXR1IGF0IHRoZSBlbmQgb2YgdGhlIGZpbG0gYWJvdXQgYSBwZXJzb24ncyBwYXN0PyB0aGlzIGZpbG0gd2FzIHZlcnkgZGlzdHVyYmluZyB0byB3YXRjaCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCB3YXMgYSB0cnVlIHN0b3J5IGFuZCB0byB0aGluayB0aGF0IGh1bWFuaXR5IGlzIHN0aWxsIHNvIGNydWVsIGFmdGVyIGFsbCB0aGVzZSB5ZWFycyBtYWtlcyBtZSBhc2hhbWVkIDxiciAvPjxiciAvPmV2ZXJ5b25lIGlzIGh1bWFuIGFuZCBldmVyeW9uZSBoYXMgdGhlIHJpZ2h0IHRvIGxpdmUgdGhlaXIgbGlmZSBpbiBwZWFjZSBhbmQgaGFybW9ueSA8YnIgLz48YnIgLz5saXZlIGFuZCBsZXQgbGl2ZTxiciAvPjxiciAvPmlmIGFueW9uZSBrbm93cyB0aGUgcXVvdGUgcGxlYXNlIGxldCBtZSBrbm93IFRoYW5rIHlvdTxiciAvPjxiciAvPnRoaXMgZmlsbSBzaG91bGQgYmUgc2hvd24gYSBsb3QgbW9yZSBwdWJsaWNseSBhcyB0cnVlIGV2ZW50cyBhcyBob3JyaWZpYyBhcyB0aGVzZSBzaG93biBpbiB0aGUgZmlsbSBzaG91bGQgYmUga25vd24gdG8gYWxsIGluIHRoZSBob3BlIHRoYXQgdGhpbmdzIHdpbGwgY2hhbmdlIHNvb25lciByYXRoZXIgdGhhbiBsYXRlci4pAAAAAAAA8D8KzwIIwwMQwwMivQJ3aGF0IHdhcyBCcnVjZSBXaWxsaXMgdGhpbmtpbmcgd2hlbiBoZSBzaWduZWQgb24gZm9yIHRoaXMgb25lPz8gdGhpcyBvbmUgbWFkZSBubyBzZW5zZSB0byBtZS4uIGkgd2FzIHNvIGNvbmZ1c2VkIGJ5IGl0LCBpdCB3YXNudCBmdW5ueSBhdCBhbGwuLiBJIGRvbnQgZXZlbiBrbm93IHdoeSBEaXNuZXkgbWFkZSB0aGlzIG9uZS4uIEJydWNlIGlzIGEgR3JlYXQgYWN0b3Igd2hvbSBpdmUgbGlrZWQgZm9yIGEgTG9uZyB0aW1lIC4uIGFuZCB0aGlzIGRpc2FwcG9pbnRlZCBtZSBhIGxvdC4uIFBhc3MgdGhpcyBvbmUgYnkgb24gdGhlIHZpZGVvIHNoZWxmLi4uLikAAAAAAADwPwrEBQjEAxDEAyKyBXdoYXQgdGhlIGhlbGwgd2FzIHRoZSBwb2ludCBvZiB0aGlzIGR1bGwgbW92aWU/IGl0IGxvb2tlZCBwcmV0dHkgaW50ZXJlc3RpbmcgaW4gdGhlIGJlZ2lubmluZyBidXQgcXVpY2tseSBmZWxsIGZsYXQgb24gaXRzIGZhY2UuIGl0cyBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBhIHRydWUgc3RvcnkgYnV0IGZvciBjcnlpbmcgb3V0IGxvdWQgaXMgdGhlcmUgbm8gbW9yZSBzY3JpcHQgd3JpdGVycyBsZWZ0IGluIEhvbGx5d29vZD8gbWFuIGl2J2Ugc2VlbiB0aGVzZSBndXlzIGluIHNvbWUgb2YgdGhlIGJlc3QgbW92aWVzIGV2ZXIgbWFkZSxkZWZvZSBjYW4gcGxheSBqdXN0IGFib3V0IGFueXRoaW5nIGFuZCB3aGVuIGkgc2VlIGhlJ3MgaW4gYSBtb3ZpZSBpIGRvbid0IGhhdmUgYSBwcm9ibGVtIHJlbnRpbmcgaXQgYnV0IEknbSBzdGFydGluZyB0byB3b25kZXIucmVkZm9yZCBhbHNvIGEgZ3JlYXQgYWN0b3IgaXMgYWxzbyBzbGlwcGluZzsgcGVyaGFwcyB0aGVpciBoYXJkIHVwIG9yIGp1c3QgbG9zaW5nIHRoZWlyIHNlbnNlcy4gdGhlIGRpYWxvZyB3YXMgbG9uZyBhbmQgdGVycmlibHkgaGVhdnkgZXllZCxlc3BlY2lhbGx5IGF0IGhvbWUgd2l0aCB0aGUgZmFtaWx5Lmkgd29uZGVyIGlmIHRoZSBhY3RvcnMgdGhvdWdodCB0aGV5IGhhZCBhIGhpdCBnb2luZyBoZXJlPyBwZXJoYXBzLi4udWguLmFuIE9zY2FyPykAAAAAAADwPwrjBQjFAxDFAyLRBXdoYXQga2luZCBvZiBzaCp0IGlzIHRoaXM/IFBvd2VyIHJhbmdlcnMgdnMgRnJlZGR5PyBJdCB3YXMgd2F0Y2hhYmxlIGFuZCBhcyBnb29kIGFzIHRoZSBmaXJzdCBmaWxtIGluIHRoZSBiZWdpbm5pbmcgYnV0IGZyb20gdGhlIHBhcnQgd2hlcmUgdGhlIHByb3RhZ29uaXN0cyBnZXQgc3VwZXIgcG93ZXJzIGluIHRoZWlycyBkcmVhbXMsIGl0IHN0YXJ0ZWQgdG8gYmVjb21lIGNoaWxkaXNoLiBUaGlzIHNoKnQgc2hvdWxkIGhhdmUgYmVlbiByYXRlZCBQRyBvciBQRy0xMyByYXRoZXIgdGhhbiBSLiBJIGV4cGVjdGVkIHRvIHNlZSBzb21lIHZlcnkgbWF0dXJlIHN0dWZmIGJ1dCBpdCB3YXMgb25seSBmb3IgdGhlIDEvMyBvZiB0aGUgZmlsbS4gVGhlIHJlc3QgYXJlIGZvciBsaXR0bGUga2lkcy4gUGx1cyBpdCdzIGZvY3VzZWQgdG9vIG11Y2ggb24gQ2hyaXN0aWFuaXR5LiBJIGtub3cgRnJlZGR5J3MgYSBkZW1vbiBidXQgdGhlcmUgYXJlIG1hbnkgcmVsaWdpb25zIHRoYXQgaGF2ZSBkaWZmZXJlbnQgd2F5cyB0byBmaWdodCBkZW1vbnMuIFdoeSBkb2VzIGl0IGFsd2F5cyBoYXZlIHRvIGJlIENocmlzdGlhbml0eT8gVGhpcyBpcyB0b3RhbCBPcmllbnRhbGlzbSBhbmQgZmlsbGVkIHdpdGggd2hpdGUgbWVuL3dlc3Rlcm5lcidzIHN1cGVyaW9yaXR5LiBEb24ndCcgd2F0Y2ggdGhpcywgc2hvdyBpdCB0byBsaXR0bGUga2lkcyB3aG8gbG92ZXMgcG93ZXIgcmFuZ2Vycy4pAAAAAAAA8D8KsQYIxgMQxgMinwZ3aGF0IGlzIHdyb25nIHdpdGggeW91IHBlb3BsZSwgaWYgeW91IHdlcmVuJ3QgYmxvd24gYXdheSBieSB0aGUgYWN0aW9uIGNhciBzZXF1ZW5jZXMgYW5kIGplc3NpY2EgU2ltcHNvbnMgaG90IGJvZHkgdGhlbiB5b3UgYXJlIG1ham9ybHkgc2NyZXdlZCBpbiB0aGUgaGVhZC4gT2YgY291cnNlIHRoZSBmaWxtIGlzbid0IGEgbWFzdGVycGllY2UsIGkgZG9uJ3QgdGhpbmsgaXQgd2FzIGFpbWluZyB0byBiZS4gSXQgd2FzIGZ1biBhbmQgZnVubnksIGkgbmV2ZXIgd2F0Y2hlZCB0aGUgc2hvdyB3aGVuIGkgd2FzIHlvdW5nZXIsIGkgb25seSByZWNlbnRseSBzYXcgb25lIGVwaXNvZGUsIGFuZCB3aGVuIGkgd2F0Y2hlZCB0aGUgbW92aWUsIGkgZmVsdCBpdCBoYWQgdGhlIHNhbWUga2luZCBvZiBhdG1vc3BoZXJlLiBUaGUgbW92aWUgc2VhdHMgd2VyZSBwcmFjdGljYWxseSBzaGFraW5nLCBhbmQgdGhlIGNhciBzZXF1ZW5jZXMgd2VyZSBnb29kIGJlY2F1c2UgaXQgZGlkbid0IGJvcmUgbWUgYW5kIGRyYWcgb3V0IGxpa2Ugc29tZSBvZiB0aGUgc2NlbmVzIGluIDJmYXN0IDJmdXJpb3VzLiBhbmQgamVzc2ljYSBTaW1wc29uIGlzIHBsYWluIGhvdCwgaSBqdXN0IHdpc2ggdGhleSBoYWQgdXNlZCBoZXIgbW9yZSBpbiB0aGUgYWN0aW9uIHNlcXVlbmNlcy4gQWxsIGluIGFsbCwgaSBoYWQgYSBoZWxsIG9mIGEgdGltZSB3YXRjaGluZyB0aGlzIGFuZCBpIHdvdWxkIGdvIGFuZCBzZWUgaXQgYWdhaW4gc29vbiBhbmQgaSB3aWxsIGJ1eSBpdCBvbiBEVkQuIFBlb3BsZSwgZW5qb3kgaXQgZm9yIHdoYXQgaXQgaXMuKQAAAAAAAPA/CrkGCMcDEMcDIqcGd2hhdCBoYXBwZW5lZCB0byBNYXRoZXcgTW9kaW5lJ3MgY2FyZWVyPz8/IGkgY2FuIHN0aWxsIHJlY2FsbCB3aGVuIGhlIHdhcyBjb25zaWRlcmVkIGFuIEEgbGlzdCBhY3Rvci4uLjxiciAvPjxiciAvPndhcyBpdCBjdXR0aHJvYXQgaXNsYW5kIHRoZSBmaW5hbCBuYWlsIGluIHRoZSBjb2ZmaW4gb2YgYSBvbmNlIHByb21pc2luZyBjYXJlZXI/Pz8gd293LCB0aGlzIGd1eSBtdXN0IHJlYWxseSBoYXRlIFJlbm55IEhhcmxpbidzIGd1dHMuLi48YnIgLz48YnIgLz5UaGlzIG1vdmllIHdhbnRzIGJhZGx5IHRvIGJlIGEgY29tZWR5IGJ1dCBmYWlscyB0byBkZWxpdmVyIGFueSBsYXVnaHMsIHRoZSBjaGFyYWN0ZXJzIGFyZSBjYXJpY2F0dXJlcywgYW5kIGJhZGx5IGRyYXduIG9uZXMgYXQgdGhhdCAuLi4gYnV0IHN0aWxsIHdoYXQgcGFpbnMgbWUgdGhlIG1vc3QgaXMgc2VlaW5nIE1yLiBNb2RpbmUgdGFraW5nIHVwIG9uIHRoaXMga2luZCBvZiByb2xlcywgbmV4dCB0byBhY3RvcnMgc28gZmFyIGF3YXkgZnJvbSBoaXMgY2FsaWJlciwgaSBtZWFuIGF0IHRoZSB0aW1lIHdoZW4gaGUgd2FzIG1ha2luZyBtb3ZpZXMgbGlrZSBCSVJESUUgaGUgY291bGQgbmV2ZXIgaW4gaGlzIHdvcnN0IG5pZ2h0bWFyZXMgaGF2ZSBpbWFnaW5lZCB0aGF0IGluIHRoZSBmdXR1cmUgaGUgd291bGQgYmUgYWN0aW5nIGluIG1vdmllcyB3aXRoIGEgaGljayBodW1waW5nIGEgY293IHRoYXQganVzdCBoYWQgaGVyIGFudXMgc3RhcGxlZCBzaHV0LCBhbmQgbWF5YmUgd2hhdHMgZXZlbiB3b3JzdDtuZXh0IHRvIEVsaXphYmV0aCBCZXJrbGV5ISEhKQAAAAAAAPA/CosFCMgDEMgDIvkEd2hhdCBjYW4gaSBzYXk/LCBtcyBFcmlrYSBFbGVuaWFrIGlzIG15IGZhdm9yaXRlIGJsb25kZSBnaXJsIGV2ZXIsIGFuZCBsaWtlIGEgSXRhbGlhbiBBbWVyaWNhbiwgZmFuIG51bWJlciBvbmUgb2YgZmVtYWxlIGJlYXV0eSBpIGNhbid0IGZvcmdldCB0aGlzIG1vdmllLjxiciAvPjxiciAvPnlvdSBrbm93IGkgcmVhbGx5IGRvbid0IHJlbWVtYmVyIGEgbG90IGFib3V0IHRoZSBwbG90LCBvciB0aGUgc2l0dWF0aW9ucyBvciB0aGUgb3RoZXIgYWN0b3JzIC4gaSBvbmx5IGNhbiByZW1lbWJlciBhYm91dCBkcm9wIGRlYWQgZ29yZ2VvdXMgRXJpa2EgYW5kIHRoYXQgaW4gdGhpcyBmaWxtIHNoZSBsb29rcyBiZXR0ZXIgdGhhbiBldmVyLCBpIHJlYWxseSBkb24ndCBjYXJlIGlmIGl0IHdhcyBhIGJhZCBtb3ZpZSBvciBhIGdvb2QgbW92aWUsIGkgb25seSBjYXJlIHRoZSBuaWNlIG1vbWVudHMgaSBoYWQgYmVlbiBhIHRlZW5hZ2VyIGluIEJyb29rbHluIGp1c3QgY29udGVtcGxhdGluZyBFcmlrYSdzIGJlYXV0eS48YnIgLz48YnIgLz5XZWxsIGp1c3QgdG8gY29uY2x1ZGUgaWYgeW91IGFyZSBhbiBFcmlrYSBFbGVuaWFrJ3MgYmVhdXR5IGZhbiBsaWtlIG1lIGRlZmluaXRlbHkgdGhpcyBmaWxtIGlzIGZvciB5b3UuKQAAAAAAAPA/CqgCCMkDEMkDIpYCd2hhdCBjYW4gaSBzYXkuIG9oIHllYWggdGhvc2UgZnJlYWtpbmcgZmluZ2VycyBhcmUgc28gd2VpcmQuIHRoZXkgc2NhcmUgdGhlIGhlY2sgb3V0IG9mIG1lLiBidXQgaXQgaXMgc3VjaCBhIGZ1bm55IGZpbG0sIEppbSBDYXJyZXkgd29ya3MgdGhlIGdyaW5jaC4gaWYgeW91IGhhdmVudCBhbHJlYWR5IHNlZW4gaXQgdGhlbiB3aGF0IHlvdSB3YWl0aW5nIGZvciBhbiBpbnZpdGF0aW9uLiBnbywgZ28gYW5kIGdldCB3YXRjaCBpdC4geW91IGRvbnQga25vdyB3aGF0IHlvdXIgbWlzc2luZy4pAAAAAAAA8D8K6RQIygMQygMi1xR3aGF0IGNhbiBpIHNheSwgdGhpcyBmaWxtIGlzIGFtYXppbmcuIGl0IGhhcyBpdHMgZmxhd3MgbGlrZSBldmVyeSBmaWxtIGRvZXMgZm9yIGV4YW1wbGUgd29iYmx5IGhlYWRzdG9uZXMgaW4gYSBncmF2ZXlhcmQsIGEgY2xlYXJseSB2aXNpYmxlIHNsaWRlIGJvYXJkIGR1cmluZyB0aGUgcGVuZ3VpbnMgZGVhdGggc2NlbmUsIE1heCBTaHJlY2sgbG9zaW5nIGhpcyBoZWF2eSBjb2F0IGluIGEgc3BsaXQgc2Vjb25kIGJldHdlZW4gc2hvdHMgZHVyaW5nIHRoZSBpbWFnZSBjb25zdWx0YW5jeSBzY2VuZSwgYmF0bWFuIGxvc2luZyBoaXMgYmxhY2sgZXllIG1ha2V1cCBhbGwgb2YgYSBzdWRkZW4gYmV0d2VlbiBzaG90cyBzbyBoZSBjYW4gcmV2ZWFsIEJydWNlIFdheW5lIHRvIENhdHdvbWFuLCBkaWFsb2d1ZSBiZWluZyByZWNvcmRlZCBidXQgaXMgcGxheWVkIGJhY2sgYW5kIHNwb2tlbiBkaWZmZXJlbnRseSB0aGFuIHdoZW4gaXQgd2FzIHNwb2tlbiBpbiB0aGUgZmlyc3QgcGxhY2UgYW5kIGxhc3RseSBDYXR3b21hbiBhbGwgb2YgYSBzdWRkZW4ga25vd3MgaG93IHRvIHVzZSBhIGJ1bGwgd2hpcCB3aXRob3V0IGFueSB0cmFpbmluZyB3aGF0c29ldmVyLiB0aGVzZSBmbGF3cyBhcmUgbWlub3IgY29tcGFyZWQgdG8gc29tZSB5b3Ugd291bGQgc2VlIGluIGZvciBleGFtcGxlIGJhdG1hbiBmb3JldmVyIHdoZXJlIHRoZSByaWRkbGVyIGNhbiBvYnZpb3VzbHkgYmUgc2VlbiB3YWl0aW5nIGZvciBoaXMgY3VlIG9yIHZhbCBLaWxtZXIncyBoYWlyIGNoYW5naW5nIGJldHdlZW4gc2hvdHMuPGJyIC8+PGJyIC8+d2hhdCBtYWtlcyB0aGlzIGZpbG0gc28gZGVzZXJ2aW5nIG9mIGFuIDgvMTAgaXMgdGhlIGdyZWF0IGFjdGluZyBiZWNhdXNlIHRoZSBwZXJmb3JtYW5jZXMgYXJlIGFic29sdXRlbHkgYW1hemluZy4gTWljaGFlbCBLZWF0b24gcmVwcmlzZXMgaGlzIHJvbGUgYXMgQmF0bWFuIGFuZCBoYXMgYSBsb3QgbW9yZSB0byBkbyBpbiB0aGlzIGZpbG0uIEhlIGxvb2tzIG1vcmUgY29tZm9ydGFibGUgaW4gdGhlIHJvbGUgdGhlIHNlY29uZCB0aW1lIGFyb3VuZCBhbmQgaXMgb24gcGFyIHdpdGggdGhlIHZpbGxhaW5zIHBlcmZvcm1hbmNlcy4gRGFubnkgRGV2aXRvIGlzIHRoZSBwZXJmZWN0IHBlbmd1aW4uIEkgcmVhbGx5IGxpa2UgdGhlIGNvbnZlcnNpb24gb2YgdGhlIHBlbmd1aW4gaW50byB0aGUgZ3JvdGVzcXVlIHBlbmd1aW4gbWFuIGluc3RlYWQgb2YgdGhlIG5vbiB0aHJlYXRlbmluZyBjaGFyYWN0ZXIgZnJvbSB0aGUgY29taWNzIG9yIFRWIHNob3cgYmVjYXVzZSBub3cgdGhlIGNoYXJhY3RlciBoYXMgbW9yZSBkZXB0aCBhbmQgaGFzIGEgZmFyIG1vcmUgaW50ZXJlc3Rpbmcgc3RvcnkgdGhhdCBnZW5lcmF0ZXMgZnJvbSB0aGUgYmFzaWMgbmVlZCBvZiBmYW1pbHkgYW5kIHRvIGZlZWwgYWNjZXB0ZWQgYW5kIHdhbnRlZC4gdGhpcyBnaXZlcyB1cyBhbiBldmlsIGNoYXJhY3RlciB3aG8gd2UgZmVlbCBzeW1wYXRoeSBmb3IgYmVjYXVzZSBoZSB3YXMgcmVqZWN0ZWQgZm9yIGJlaW5nIHdoYXQgaGUgaXMgd2hpY2ggaXMgbm90IGhpcyBmYXVsdC4gTWljaGVsbGUgUGZlaWZmZXIgaXMgZXhjZWxsZW50IGFzIENhdHdvbWFuLiBzaGUgaXMgc2xlZXQgYW5kIHNleHkgYW5kIHNoZSBpcyBhbHNvIGEgdmlsbGFpbiB3ZSBjYW4gZmVlbCBzb3JyeSBmb3IgYmVjYXVzZSBvZiB0aGUgd2F5IHNoZSBpcyB2aWN0aW1pc2VkLiBDaHJpc3RvcGhlciBXYWxrZW4gaXMgYSBncmVhdCBzZWNvbmRhcnkgdmlsbGFpbiBhbmQgaXMgc28gaW50ZXJlc3RpbmcgYSBjaGFyYWN0ZXIgZXZlbiB0aG91Z2ggaGUgaXMgbm90IGV2ZW4gaW4gdGhlIGJhdG1hbiB1bml2ZXJzZS48YnIgLz48YnIgLz50aGUgc291bmR0cmFjayBpcyBmYXIgYmV0dGVyIHRoYW4gdGhlIGZpcnN0IGFuZCBEYW5ueSBFbGZtYW4gZ2V0cyBtb3JlIG9mIGEgY2hhbmNlIHRvIHNob3cgb2ZmIGhpcyBtdXNpY2FsIHRhbGVudHMgdGhpcyB0aW1lIGFyb3VuZC4gVGhlIHNldHMgYXJlIGFtYXppbmcuIFRoZXkgYXJlIGRldGFpbGVkLCBleWUgY2F0Y2hpbmcsIHNpbmlzdGVyLCBHb3RoaWMgLCB1bmlxdWUsIGRhcmsgYW5kIHNvIG1hbnkgb3RoZXIgYWRqZWN0aXZlcyBjYW4gZGVzY3JpYmUgaG93IGFtYXppbmcgdGhleSBsb29rLiB0aGUgY29zdHVtZXMgYW5kIG1ha2UgdXAgYXJlIGdyZWF0IGFuZCBvYnZpb3VzbHkgYSBsb3Qgb2Ygd29yayB3ZW50IGludG8gbWFraW5nIHRoZW0gYW5kIGFsbCB0aGUgd29yayBwYXlzIG9mZiBiZWNhdXNlIHRoZSBCYXRzdWl0IGlzIGJldHRlciwgdGhlIGNhdCBzdWl0IGlzIGFtYXppbmcgdG8gbG9vayBhdCBhbmQgdGhlIHBlbmd1aW4gbWFrZSB1cCBhbmQgZWZmZWN0cyBhcmUgc28gY29udmluY2luZy5UaGUgYW5pbWF0cm9uaWMgcGVuZ3VpbnMgbG9vayByZWFsbHkgcmVhbGlzdGljIGFuZCBhcmUgcGxheWVkIHRvIGdvb2QgZWZmZWN0LiBUaGUgc2NyaXB0IGlzIHJlYWxseSBnb29kIGFuZCB0aGUgU3RvcnlsaW5lIGluIG15IG9waW5pb24gaXMgYSBwbGF1c2libGUgb25lLiBvdmVyYWxsLCBiZWNhdXNlIG9mIGFsbCB0aGVzZSBmYWN0b3JzIHRoaXMgZmlsbSBkZXNlcnZlcyBhbiA4LzEwIGFuZCBzdGFuZHMgYXMgbXkgZmF2b3VyaXRlIG9mIGFsbCB0aGUgYmF0bWFuIGZpbG1zKQAAAAAAAPA/Ct0DCMsDEMsDIssDd2hhdCBjYW4gaSBzYXkgYWJvdXQgdGhpcyBmaWxtIHRoYXQgaGFzbnQgYWxyZWFkeSBiZWVuIHNhaWQ/IHdlbGwgdG8gdGVsbCB0aGUgdHJ1dGggYWxvdCBvZiBpdCBsb29rcyB2ZXJ5IGZha2UgbGlrZSBzb21lIG9mIHRoZSBzbGFwcyBhbmQgdGhlIGtpY2tzLiBob3cgY2hhcmxpZSBzaGVlbiB0aG91Z2ggdGhpcyB3YXMgcmVhbCBpIGRvbnQga25vdy4gaW0gc3VyZSB0aGV5IHdvdWxkIGJlIGhpdHRpbmcgYW5kIGtpY2tpbmcgaGVyIGFsb3QgaGFyZGVyIGlmIGl0IHdhcy4gaG93ZXZlciB0aGUgc2NlbmVzIHdpdGggdGhlIHBpbmNoaW5nIGFuZCB0aGUgaG90IG9pbCBsb29rIHZlcnkgcmVhbC4gYW5kIHRoZSBmaW5hbCBuZWVkbGUgaW4gdGhlIGV5ZSBzY2VuZSBpcyBhbWF6aW5nbHkgZG9uZSBhbmQgaXMgcHJvYmlibHkgdGhlIG9ubHkgdGhpbmcgb24gZmlsbSB0aGF0IGhhcyBldmVyIHNob2NrZWQgbWUuKQAAAAAAAPA/CsYDCMwDEMwDIrQDd2hhdCBhIHdhc3RlIG9mIHRpbWUhIGkgZXhwZWN0ZWQgYmV0dGVyIGZyb20gY2FtZXJvbiBkaWF6ISBpIGd1ZXNzIGl0IHdhc24ndCByZWFsbHkgaGVyIGZhdWx0IGZvciBiZWluZyBpbiBhIHRlcnJpYmxlIGZpbG0uIHRoZSBmaWxtIGRvZXMgbm90IGNhcHR1cmUgdGhlIGJlYXV0eSBvZiBldXJvcGUuLi4uLmFuZCB3YXNuJ3Qgc3VjY2Vzc2Z1bCBpbiBsZWFkaW5nIHRoZSBhdWRpZW5jZSBpbnRvIHN1c3BlbnNlIG9yIHdvbmRlci4gd2VhayBhdHRlbXB0IGF0IHN0b3J5dGVsbGluZyBhbmQgbmFycmF0aW5nIC0tIGRpYWxvZ3VlIGlzIGR1bGwgYW5kIHdhc24ndCBhYmxlIHRvIGNvbnZleSB3aGF0IGkgc29tZXRpbWVzIHRoaW5rIHNpbXBsaWNpdHkgaXMgYmVhdXR5LiBubyBsb3ZlLCBlbmVyZ3ksIGVsZWN0cmljaXR5IG9uIHNjcmVlbi4gdG9vIGJhZCEhISEhISEhMSkAAAAAAADwPwqnBwjNAxDNAyKVB3doYXQgYSB3YXN0ZSBvZiBhIGZpbG0gb25jZSBhZ2FpbiB0aGUgZmlsbSBpbmR1c3RyeSBkb2VzIG5vdCB0cnVzdCB0byBtYWtlIGEgZmlsbSB0aGF0IGNvdWxkIGhhdmUgYmVlbiBqdXN0IGFib3V0IHRoZSBtYW4ncyBpZGVhcy4gdGhlcmUgaXMgdmlydHVhbGx5IG5vdGhpbmcgb24gaGlzIHRoZW9yaWVzIG9yIGV2b2x1dGlvbiwgaW5zdGVhZCB0aGUgbW9zdCBib3Jpbmcgc3Rvcnkgb2YgaG9tZSBsaWZlIGFuZCByZWxhdGlvbnNoaXAgd2l0aCBvbmUgZGF1Z2h0ZXIsIGEgcG9uZGVyb3VzIHNjcmlwdCwgZ3JlYXQgbGliZXJ0aWVzIHRha2VuIHdpdGggRGFyd2luJ3MgbGlmZSwgZGlhbG9ndWUgZ2l2ZW4gdG8gaGlzIGNoYXJhY3RlciB0aGF0IGkgZmluZCBoYXJkIHRvIGJlbGlldmUgaGUgd291bGQgaGF2ZSB2b2ljZWQuIERhcndpbiBuZXZlciBnYXZlIHVwIGhpcyBiZWxpZXZlIGluIGEgaGlnaGVyIHBvd2VyLCBoZSBtYXkgbm90IHF1aXRlIHJpZ2h0bHkgaGF2ZSBiZWxpZXZlZCBpbiB0aGUgZXN0YWJsaXNoZWQgQ2hyaXN0aWFuIGlkZWEgb2YgR29kICwgYnV0IHdhcyBub3QgYW4gYXRoZWlzdC4gd2hpY2ggdGhpcyBmaWxtIGltcGxpZXMuIHdoYXQgd291bGQgaGF2ZSBiZWVuIGEgcml2ZXRpbmcgYW5kIG11Y2ggYmV0dGVyIGZpbG0sIGlzIGlmIHRoZXkgaGFkIHN0YXJ0ZWQgd2l0aCB0aGUgcHVibGljYXRpb24gb2YgT24gdGhlIE9yaWdpbiBvZiBTcGVjaWVzIGFuZCBjb25zdHJ1Y3RlZCBhIHN0b3J5IG9mIHRoZSBncmVhdCByZXZvbHV0aW9uIHRoYXQgZW50YWlsZWQsIGFuZCBvZiBhbiBhbWF6aW5nIGNhc3Qgb2YgY2hhcmFjdGVycyBpbnZvbHZlZCBvbiBhbGwgc2lkZXMuIGluc3RlYWQgd2UgZ290IGEgcGxvZGRpbmcsIGJvcmluZyBkcmFtYSwgbW9zdGx5IG1hZGUgdXAsIGEgZ3JlYXQgaW5qdXN0aWNlKQAAAAAAAPA/CssFCM4DEM4DIrkFd2hhdCBhIHNoYW1lIG91ciBmaXJzdCBtb3ZpZSBpcyBzbyBiYWQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIGhpIHNoYW0gLCB3aGF0IGRpZCB5b3UgZG8gaW4gdGhpcyBtb3ZpZTooIC4gLiBpdCBpcyBhd2Z1bCEgYW5kIHRoZSBkaXJlY3RvciA6KCAuLiB0aGVyZSBpcyBubyBzdG9yeSBpbiB0aGlzIGZpbG0gLiBpIGhhZCBzbGVlcCB3aGVuIGkgd2FzIHdhdGNoaW5nIHRoaXMgZmlsbSAuLiBJdCBpcyBhIGRpc2FwcG9pbnRtZW50LCBhbmQgdGhlIG1ham9yaXR5IG9mIHRoZSBjcmV3IGlzIG5vdCBmcm9tIFNhdWRpIEFyYWJpYS4gU3VwcG9zZWQgdG8gYmUgYSBjb21lZHkgbW92aWUsIGJ1dCBpdCBsYWNrcyB0aGUgZXNzZW50aWFsIGVsZW1lbnRzIGluIENvbWVkeSAsPGJyIC8+PGJyIC8+SSBrbm93IGl0IGZpcnN0IGV4cGVyaWVuY2Ugb2YgY2luZW1hIGluIFNhdWRpIEFyYWJpYSwgYnV0IEkgZXhwZWN0IGJldHRlciBmcm9tIEthaWYgQWwgSGFsICEhIFRoZSBvbmx5IHBvc2l0aXZlIGluIHRoZSBtb3ZpZSBpcyB0aGUgcHJlc2VuY2Ugb2Ygc29tZSB0YWxlbnRlZCBhY3RvcnMgd2hvIGRpZCBub3QgaGVscCBtdWNoIHRleHQgdG8gZXhwbG9kZSB0aGVpciB0YWxlbnRzIEZpbmFsbHkuLiwgaXdhbnQgdG8ga25vdyB5b3VyIGNvbW1lbnQgYWJvdXQgdGhpcyBtb3ZpZSBndXlzLi4uIGlzIGl0IGJhZCBvciB3aGF0PykAAAAAAADwPwqXBQjPAxDPAyKFBXdoYXQgYSByZWxpZWYgdG8gZmluZCBvdXQgSSBhbSBub3QgaW1hZ2luaW5nIHRoaXMgcHJvZ3JhbW1lISB0aGUgc3VtbWFyeSBmcm9tIHRheG1hbiBpcyBncmVhdC4gSSB0b28gcmVtZW1iZXIgZmluZGluZyBpdCBoYXVudGluZyBhbmQgbm90IHBhcnRpY3VsYXJseSBmYW1pbHkgdmlld2luZywgSSBtdXN0IGhhdmUgYmVlbiAxMC8xMSBhdCB0aGUgdGltZSBJIHdhdGNoZWQgaXQuIEkgdGhpbmsgZm9yIGEgZ2lybCB0aGF0IGFnZSBwYXJ0IG9mIGF0dHJhY3Rpb24gd2FzIGxlYWQncyB2ZXJ5IGJsb25kIGhhaXIsIGFuZCBoaXMgcGVybWFuZW50bHkgc2FkIHN0YXRlLiBUaGUgdGhlbWUgd2FzIHBsYXllZCBvbiBhIGZsdXRlIEkgcmVjYWxsIC0gYWx0aG91Z2ggSSBjYW5ub3QgcmVtZW1iZXIgaG93IGl0IHdlbnQuIEkgdGhpbmsgdGhlIGludHJvIHNob3dlZCBoaW0gcGxheWluZyBpdCAtIG9yIG1heWJlIGhlIHBsYXllZCBhIGZsdXRlIGluIHRoZSBwcm9ncmFtbWUgYW5kIGVzcGVjaWFsbHkgd2hlbiBoZSB3YXMgc2FkPyBNYXliZSBJIGFtIGRlc3RpbmVkIG5ldmVyIHRvIGtub3cgaG93IGl0IGVuZGVkIG9yIHRvIHNlZSBjbGlwIG9yIGhlYXIgdGhlIHR1bmUsIGJ1dCBhdCBsZWFzdCBJIG5vdyBrbm93IGl0IGlzIG5vdCBqdXN0IG1lLikAAAAAAADwPwqABgjQAxDQAyLuBXdoYXQgYSBwcmVwb3N0ZXJvdXMgc3RvcnkgLG11cmRlciBibGFja21haWwsY2hpbGQgc2V4IGFsbGVnYXRpb25zICxnYXlzIGFuZCB0aGUgY2F0aG9saWMgY2h1cmNoLi4uLi5hYnNvbHV0ZSB0cmlwZS4gSG93IGlzIGl0IHRoYXQgbW9zdCBVSyBiYXNlZCBUViBkcmFtYXMgLHNpdCBjb21zIGV0YyBoYXZlIHRvIGluY2x1ZGUgdGhlIG9ibGlnb3J0b3J5IEdheSxpdHMgcmVhbGx5IGdldHRpbmcgdGlyZXNvbWUgbm93LiBFdmVyeWJvZHkgYWNjZXB0cyB0aGF0IHRoZXJlIGFyZSBHYXkgcGVvcGxlIGluIHNvY2lldHkganVzdCBoYXMgdGhlcmUgYXJlIG90aGVyIG1pbm9yaXR5IGdyb3VwcyxidXQgd2UgZG9uJ3Qgd2FudCBpdCByYW1taW5nIGRvd24gb3VyIHRocm9hdHMoaSdsbCBwYXNzIG9uIHRoaXMgb25lKSBpbiBldmVyeSBzaW5nbGUgc2hvdy4gQXBhcnQgZnJvbSB0aGUgYWJvdmUsIHRoZSBkcmFtYSB3ZW50IGZyb20gd2hhdCBjb3VsZCBoYXZlIGJlZW4gYW4gaW50ZXJlc3RpbmcgbGl0dGxlIHN0b3J5IGludG8gYSBwYW50b21pbWUsdGhlIHByaWVzdCB3YXMgYSBwYWVkb3BoaWxlIGFuZCB0aGVyZSBhcmUgZ2F5cyBydW5uaW5nIGFib3V0IGV2ZXJ5IHdoZXJlLG9oIHllcyBqdXN0IHRvIGJlIHRvdGFsbHkgUEMgb25lIG9mIHRoZSBnYXkgY291cGxlIHdhcyBibGFjay5pIGFtIHN1cnByaXNlZCBhdCBjIGVjY2xlc3RvbmUgZm9yIGV2ZW4gY29udGVtcGxhdGluZyB0aGlzIHdoZW4gaGUgcmVhZCB0aGUgc2NyaXB0LikAAAAAAADwPwqEBgjRAxDRAyLyBXdoYXQgYSBsb3VzeSBtb3ZpZSwgdG9vayBtZSAzIHRpbWVzIHRvIGZpbmlzaCBpdC4gVGhlIHRoaW5nIGkgZGlzbGlrZWQgdGhlIG1vc3Qgd2FzIHRoZSBpbmZhbnRpbGUgc2Vuc2Ugb2YgaHVtb3IuIGpva2VzIG1hZGUgYnkgYSAxMCB5ZWFycyBvbGQgY2hpbGQuIG5vdCBmdW5ueS4gcHJldHR5IGFubm95aW5nIGFjdHVhbGx5LCBmb3IgZXhhbXBsZSB3aGVuIHRoZSBkZXRlY3RpdmUgY2FudCBnZXQgYSBwbGFjZSBhdCB0aGUgYmFyIGhlIHllbGxzICJzaGUncyB0YWtpbmcgaXQgYWxsIG9mZiIgYW5kIHRoZW4gdGhleSBhbGwgcnVuICJmYXN0IGZvcmV3YXJkIiBzbGFwc3RpY2sga2luZGEnIHJ1c2guIHNvIHN0dXBpZC4gYW5kIGFsc28gYSBndXkgc2l0dGluZyBhdCB0aGUgYmFyIHNtYXNoaW5nIGZydWl0IHRvIHdvcmsgb3V0IGhpcyBwb3N0IHRyYXVtYXRpYyBzdHJlc3MgZGlzb3JkZXIuIG9uIHRoZSBiYXIhIGFuZCB0aGUgYmFydGVuZGVyIGlzIHN1cHBseWluZyBoaW0gd2l0aCBtb3JlIGFuZCBtb3JlIGZyZXNoIGZydWl0LiB0aGF0cyBzdXBwb3NlZCB0byBiZSBmdW5ueT8gYW5kIGkgbWVhbiAuLi4gaSBsb3ZlIGdvb2Qgb2wnIGV4cGxvaXRhdGlvbiBnb3JlIGZsaWNrcywgYW5kIHNhdyBhIGxvdCBvZiB0ZXJyaWJsZSBtb3ZpZXMsIGJ1dCBoaXMgb25lIGlzIHBsYWluIGJhZC4gYW5kIGFsc28gdGhlICJnb3JlIiBpcyBub3QgdGhhdCBleGNpdGluZy4gZG9uJ3QgYm90aGVyLiBpIHdvdWxkbid0IHJlY29tbWVuZCBpdC4pAAAAAAAA8D8KyAgI0gMQ0gMitgh3aGF0IGEgZ3JlYXQgbGl0dGxlIGZpbG0sIGxvdHMgb2YgZ29vZCByb2xlcyBmcm9tIHNvbWUgcmFuZG9tIHN0YXJzLiBCYXNpY2FsbHkgdGhlcmUgYXJlIHRoZXNlIHBvdCBncm93ZXJzIHRoYXQgZ2V0IGNhdWdodCB1cCBpbiBhIGNvbWljYWwgYWR2ZW50dXJlLiBBdCBwb2ludHMgdGhlIGZpbG0gbWFrZXMgeW91IGJlbGlldmUgZXZlcnlvbmUgaXMgZ29pbmcgdG8gZW5kIHVwIGRlYWQhIFdoaWNoIGFkZHMgdG8gdGhlIGNvbWVkeS4gV2hlbiB0aGUgY2hhcmFjdGVyIG9mIEpvaG4gTGl0aGdvdyAoM3JkIFJvY2spIHJlLWFwcGVhcnMgLSBpdHMgaW1wb3NzaWJsZSBub3QgdG8gaW1hZ2luZSB0aGUgdHJpcCwgdGhpcyBtYXkgaGF2ZSBjYXVzZWQsIGxpa2UgYSB0b3RhbCBwYXJhZG94LiBUaGUgZmlsbSBpcyBmdWxsIG9mIHR3aXN0cyBhbmQgdHVybnMgdGhhdCBrZWVwIHlvdSBndWVzc2luZyBhbGwgdGhlIHdheSB0byB0aGUgZW5kLiBCaWxseSBCb2IgVGhvcm50b24gQXN0cm9uYXV0IEZhcm1lcikgaXMgYnJpbGxpYW50LCBpbiBmYWN0IGxvb2tpbmcgYmFjaywgdGhlIGNoYXJhY3RlciBpcyBmYWlybHkgc2ltaWxhciBpbiB0aGUgZmFjdCBoZSBob2xkcyB0aGUgZmFtaWx5IG9mIHBvdCBncm93ZXJzIHRvZ2V0aGVyLiBFdmVyeW9uZSBpbnZvbHZlZCBpbiB0aGlzIGZpbG0gc2hvdWxkIGdldCBhIGJpZyB0aHVtYnMgdXAuPGJyIC8+PGJyIC8+QXMgaSBzYXknIHRoZSBmaW5hbCBzY2VuZSBpcyBhIGRyZWFtOyBob3dldmVyIGEgbmlnaHRtYXJlIGF0IHRoZSBzYW1lIHRpbWUuIEkgbG92ZSBpdCB3aGVuIEhhbmsgQXphcmlhIChjYXJ0ZXIpIHNheXMgYXQgdGhlIGVuZCBkbyB5b3UgdGhpbmsgd2Ugc2hvdWxkIGRvIHRoaXMgZXZlcnkgeWVhcj8gSSBmZWx0IG15IHNlbGYgd2lzaGluZyB0aGV5IHdvdWxkLiA8YnIgLz48YnIgLz5JJ20gbm90IGdvaW5nIHRvIHNheSB0aGlzIGZpbG0gaXMgZ29vZCBmb3IgZXZlcnlvbmUsIGJ1dCBhcyBhIGxvdmVyIG9mIHN0b25lciBtb3ZpZXMgaSBnaXZlIGl0IDEwLzEwLiAtIE15IGFkdmljZSBoYXZlIGEgam9pbnQgcmVhZHk7IGtpY2sgYmFjayBhbmQgZW5qb3khKQAAAAAAAPA/Cs4FCNMDENMDIrwFd2VsbCx0aGVyZSBpc250IG11Y2ggdG8gc2F5IGFib3V0IHRoaXMgbW92aWUuIGl0cyBzaW1wbHkgdHJhc2guIHZlcnkgcG9vciBhY3RpbmcsIHBvb3Igc2NyaXB0LCBhbmQgbGFtZSBzdG9yeS4uLi4gd2VsbCwgdGhlIGFjdHJlc3MsKGkgb2RudCBldmVuIGtub3cgaGVyIG5hbWUpIHdobyBwbGF5ZWQgbWFpbnJvbGUsKG5vdCB0aGUgYmxvbmQgb25lLGJ1dCBsYXRpbmEgb25lKSB3YXMgYWN0aW5nIGZpbmUsYnV0IHRoZSBibG9uZCBvbmUgd2hvIHBsYXllZCB0aGUgZnJpZW5kIG9mIG1haW4gY2hhcmFjdG9yLCwsaGVyIGFjdGluZyBsZXZlbCBpcyBqdXN0IGxpa2UgaGlnaHNjaG9vbCBwbGF5LHNvIGFzIG1vc3Qgb2Ygb3RoZXIgYWN0b3JzIGluIHRoZSBtb3ZpZS4gQWxzbyx6b21iaWVzLCwsLHZlcnkgYmFkIGFjdGluZyBhcyB3ZWxsLiBhbmQsLHRoZSBzdG9yeSBpdHNlbGYgaGFzIHJlYWxseSBubyBwb2ludCBhdCBhbGwuIHdlbGwsIGlmIHlvdSBhcmUgcmVhbGx5IGJvcmVkIGFuZCByZWFsbHkgZ290IG5vdGhpbmcgdG8gZG8sYnV0IHdhbm5hIGtpbGwgdGltZSBzb21laG93LCBtYXliZSB5b3UgbWF5IHdhbm5hIHdhdGNoIHRoaXMgbW92aWUsYnV0IGV2ZW50aG8sdGhlcmUgYXJlIHN0aWxsIG1pbGxpb25zIG9mIGJldHRlciBCIG1vdmllcyB0aGFuIHRoaXMgY3JhcC4gaXRzIHRvdGFsIHdhc3RlIG9mIG1vbmV5IGFuZCB0aW1lLikAAAAAAADwPwq9CAjUAxDUAyKrCHdlbGwsIHdoYXQgY2FuIGkgc2F5LiBXSEFUIFRIRSBGKipLPyBUaGVyZSByZWFsbHkgaXNuJ3QgbXVjaCB0byBzYXkgYWJvdXQgdGhpcywgcmVhbGx5LiBUaGUgb25seSB3YXkgeW91IHdvdWxkIGxpa2UgdGhpcyBpcyBpZiB1LCBsaWtlIG1lLCBsaWtlIGJhZCBiYWQgaG9ycm9yIHRvIGxhdWdoIGF0LjxiciAvPjxiciAvPkFDVElORy0gVkVSWSBVTkNPTlZJTkNJTkchIEp1c3Qgd2F0Y2ggdGhlIGxhc3Qgc2NlbmUgd2l0aCB0aGUgbWFpbiBhY3RyZXNzZXMgcnVubmluZyEgUmlwLW9mZiBvZiBUZXhhcyBDSEFJTlNBVyBNQVNTQUNSRSEgYnV0IGluIGEgYmFkIHdheSEgSnVzdCBhd2Z1bCE8YnIgLz48YnIgLz5Hb3JlLSBSZWFsbHkgbm90IGJlbGlldmFibGUuIEluIG9uZSBzY2VuZSB0aGV5IHVzZSBvbmUgb2YgdGhvc2Uga25pdmVzIHdoaWNoIGhhdmUgYSBjaHVuayBjdXQgb3V0IG9mIHRoZW0gd2hpY2ggZml0IG92ZXIgYSBib2R5IHBhcnQgZXRjLiBCeSB1c2luZyB0aGlzLHdpdGggdGhlIGFkZGl0aW9uIG9mIHJlZCBrZXRjaHVwLCBpdHMgc3VwcG9zZWQgMiBsb29rIHJlYWwsIGFsdGhvdWdoIGl0IHJlYWxseSBkb2Vzbid0LjxiciAvPjxiciAvPlBsb3QtIHByZWRpY3RhYmxlICdraWRzIGdldCBsb3N0IGluIHdvb2RzIG9uIGNhbXBpbmcgd2Vla2VuZCcgbW92aWUgcmlwcGVkIG9mZiBmcm9tIEZyaWRheSB0aGUgMTN0aC48YnIgLz48YnIgLz5LaWxsZXIgUXVhbGl0eS0gc2NhcnkgbWFzayBpZiB5b3UncmUgc2NhcmVkIG9mIGNsb3ducywga2luZGEgdW5iZWxpZXZhYmxlIHRoYXQgc29tZW9uZSB3b3VsZCBjaG9zZSB0aGlzIGFzIHRoZWlyIGNvc3R1bWUgaG93ZXZlci4gVGhlIGRpcmVjdG9yIG9idmlvdXNseSByZWFsaXNlZCBhbGwgdGhlIGdvb2QgY29zdHVtZXMgaGFkIGJlZW4gdXNlZCBpbiBhbGwgdGhlIG90aGVyIGhvcnJvci1jYW1wIG1vdmllcyBvdXQgdGhlcmUuPGJyIC8+PGJyIC8+VE9UQUwtIDMvMTAgKi8qKioqKiBwLnMtIHN0YXkgYXdheSBmcm9tIENBTVAgQkxPT0QgSUksIHRoYXQgb25lIG1hZGUgdGhpcyBsb29rIGxpa2UgTE9SRCBPRiBUSEUgUklOR1MuKQAAAAAAAPA/CugHCNUDENUDItYHd2VsbCwgdGhpcyBpcyBhbiBJdmFuIFJlaXRtYW4gZmlsbS4gd2l0aCB0aGUgcmFyZSBleGNlcHRpb24sIEl2YW4gbGlrZXMgdG8gZW50ZXJ0YWluLiBIaXMgZmlsbXMgZ2VuZXJhbGx5IGFyZW4ndCAiZGVlcCIsIGJ1dCB0aGV5IGFyZSBvZnRlbiBlbnRlcnRhaW5pbmcgZW5vdWdoLiBNeSBTdXBlciBFeC1HaXJsZnJpZW5kIHN1cnByaXNlZCBtZSBpbiB0aGF0IGkgbGF1Z2hlZCBtb3JlIHRoYW4gaSB0aG91Z2h0IGkgd291bGQuIFVtYSBUaHVybWFuIGlzIGp1c3Qgc28gZ3JhbmQsIGFuZCBpIGxvdmUgaGVyIHBvcnRyYXlhbHMuIEkgbGlrZSBMdWtlIFdpbHNvbiB0b28sIGFuZCBSYWlubiBXaWxzb24gd2FzIGEgc3RyYWlnaHQgaG9vdC4gTmV2ZXIgdGFraW5nIGl0c2VsZiBzZXJpb3VzbHksIHRoZSBmaWxtIGlzIG92ZXIgdGhlIHRvcCBhbmQgeWV0IGlzbid0IHZlcnkgdW5pcXVlLCBub3IgZG9lcyBpdCBnbyB3aGVyZSBubyBvbmUgaGFzIGdvbmUgYmVmb3JlLi4uLiBpdCdzIGEgbmljZSByZW50IHRob3VnaCBhbmQgcHJvYmFibHkgYW4gT0sgZGF0ZSBtb3ZpZSwgZXNwZWNpYWxseSBpZiB5b3UgaGF2ZSBhIGhlYWRhY2hlIGFuZCBkb24ndCB3YW50IHRvIHN0cmFpbiB5b3VyIGJyYWluLiBJdCdzIGVzY2FwaXN0IGZ1biBhbmQgdGhlcmUncyBub3RoaW5nIHdyb25nIHdpdGggdGhhdC4gV2hlbiB5b3Ugc3RyaXAgYXdheSB0aGUgInN1cGVyLWdpcmwiIHN0dWZmLCB5b3UncmUgbGVmdCB3aXRoIGEgc3RvcnkgYWJvdXQgcmVsYXRpb25zaGlwcywgYW5kIHJlbGF0aW9uc2hpcHMgZ29uZSBiYWQuIEl0J3MgYSBib3kgbWVldHMgZ2lybCwgYm95IGxlYXZlcyBnaXJsIHRoaW5nLiBBbmQgaW4gdGhlIGVuZCwgdGhlIGNoYXJhY3RlcnMgYXJlIGxvb2tpbmcgZm9yIGxvdmUuIE5vdCBhbGwgb2YgdGhlbSB0YWtlIGJlaW5nICJkdW1wZWQiIGFzIHdlbGwgYXMgdGhleSBjb3VsZC4uLi5hIHNsaWNlIG9mIGxpZmUgd2l0aCBhIHR3aXN0LikAAAAAAADwPwqgBQjWAxDWAyKOBXdlbGwsIGkgc2FpZCBpdCBhbGwgaW4gdGhlIHN1bW1hcnksIGkgc2ltcGxleSBhZG9yZSB0aGUgbW92aWUgYW5kIHRoZSBjYXN0Li4uaSB3b3VsZCBnaXZlIGVhY2ggYWN0b3IgYW4gT3NjYXIuLi5ncmVhdCwgZ3JlYXQgbW92aWUuLi5pJ20gMjUgbm93IGFuZCBpIHdhdGNoZWQgaXQgNCB0aW1lcyBpbiBkaWZmZXJlbnQgcGVyaW9kcyBhbmQgaSBhbHdheXMgdGhpbmsgaSB3b24ndCBjcnkgYW5kIGkgYWx3YXlzIGRvLCBhYm91dCAyIG9yIDMgdGltZXMuLi47KSBtZXJ5bCBzLiB3YXMgYWJzb2x1dGVseSBicmlsbGlhbnQsIGplcmVteSBpcm9ucyBhbHNvLi5qdXN0IGJyaWxsaWFudC4uLmkgd2lzaCB0aGUgbW92aWUgcmVjZWl2ZWQgbW9yZSBhd2FyZHMuLi4gaSByZWFsbHkgZG9uJ3Qga25vdyBhbnlib2R5IHdobyB3YXRjaGVkIGl0IGFuZCBkaWRuJ3QgbG92ZWQgaXQuLi4gYWxzbywgZ2xlbm4gY2xvc2Ugd2FzIGZhbnRhc3RpYy4uLiB0aGUgc3Rvcnkgd2FzIGJlYXV0aWZ1bCBhbmQgc2FkIGF0IHRoZSBzYW1lIHRpbWUuLi4gaSBsb3ZlZCB0aGUgZmFjdCB0aGF0IGRlc3BpdGUgZXZlcnl0aGluZyBjbGFyYSBhbmQgZXN0ZWJhbiBsb3ZlZCBlYWNoIG90aGVyIHNvIG11Y2gsIGFuZCBob3cgYmxhbmNhIHdhcyBjbG9zZSB0byBoZXIgcGFyZW50cy4uLikAAAAAAADwPwqoBwjXAxDXAyKWB3dlbGwsIGkgbWF5IGJlIGJpYXMgYXMgaSBncmV3IHVwIHdhdGNoaW5nIGEgVkhTIGNvcHkgb2YgdGhpcyBmaWxtIHRoYXQgaXMgbm93IHJlYWR5IHRvIHNuYXAgYW5kIGhhdmUganVzdCBzcGVudCB0aGUgbGFzdCBjb3VwbGUgb2YgaG91cnMgdHJhY2tpbmcgZG93biBhIERWRCBjb3B5IGFzIGEgYmlydGhkYXkgcHJlc3NpZSBmb3IgbXkgRGFkLiBUaGUgZmlsbSBpcyBzbyBoYXJtbGVzcyBhbmQgaW5vZmZlbnNpdmUgaXQgc3VpdHMgYWxsIGFnZXMuLi4uIG11Y2ggYmV0dGVyIHRoYW4gYW55dGhpbmcgRGlzbmV5IGV2ZXIgbWFkZSBpbiBteSBvcGluaW9uIChhbmQgaSB1c2VkIHRvIHdvcmsgaW4gdGhlIERpc25leSBTdG9yZSEhISkuIFRoZSBjaGFyYWN0ZXJzIGFyZSBlbmpveWFibGUgYW5kIHRoZSBhd2FyZCBmb3IgYmVzdCBzY2VuZSBpcyBhIHRpZSBiZXR3ZWVuIHRoZSBkaXNydXB0ZWQgd2VkZGluZyAoZXNwZWNpYWxseSB0aGUgbXVzaWNhbCB0YWxlbnRzIG9mIFN3YXQsIHRoZSBmbHkuIGFuZCBTbWFjayB0aGUgbW9zcXVpdG8pLCBhbmQgdGhlIGFtYXppbmcgbmlnaHQgY2x1YiBzY2VuZS4gVGhlIG11c2ljYWwgbnVtYmVycyBzdGlsbCBoYXZlIG1lIGh1bW1pbmcgMjAgeWVhcnMgYWZ0ZXIgaSBmaXJzdCB3YXRjaGVkIGl0LiB0aGVyZSBpcyBubyBvdGhlciBmaWxtIHRoYXQgaSBjYW4gYmV0dGVyIHJlY29tbWVuZCB3aGlsc3QgYmFieS1zaXR0aW5nLCBhbmQgaW4gZmFjdCBldmVyeSBjaGlsZCBpIGtub3cgKHRoYW5rcyB0byBteSBIb3BwaXR5IGxvdmluZyBwYXJlbnRzKSBoYXZlIHNlZW4gdGhpcyBmaWxtLCBtYW55IHRpbWVzLiBJdCB3aWxsIGFsd2F5cyBnZXQgdG9wIG1hcmtzIGZvciBpdHMgZmFidWxvdXMgbG92ZSBzdG9yeSwgYSBicmlsbGlhbnQgYmFkZHkgYW5kIG92ZXIgYWxsIG9yaWdpbmFsaXR5LikAAAAAAADwPwqaCAjYAxDYAyKICHdlbGwsIGkgaGF0ZWQga25vY2tlZCB1cCwgaSBkZXNwaXNlZCA0MC15ZWFyLW9sZCB2aXJnaW4sIGFuZCB0aGlzIGxpdHRsZSBnZW0gaXMgYSB3b3J0aGxlc3MgcGllY2Ugb2YgdHJhc2ggbW92aWUuIGRvIHlvdXJzZWxmIGEgZmF2b3IsIGFuZCBza2lwIGl0LiBpIGFkbWl0LCBpIGRvbid0IGxpa2UgdGhlIGFjdG9ycyBpbiB0aGlzIG1vdmllLCBhbmQgYWZ0ZXIgbXkgMTgteWVhci1vbGQgc29uIHNob3dlZCBtZSB0aGUgY292ZXIgb2YgdGhlIERWRCwgaSB3YXMgbGlrZSwgImkgd291bGRuJ3QgbGlrZSB0aGF0IG1vdmllLCIgYnV0IGF0IGhpcyBpbnNpc3RlbmNlLCBpIGRlY2lkZWQgdG8gZ2l2ZSBpdCBhIHRyeSwgdW5mb3J0dW5hdGVseS4gPGJyIC8+PGJyIC8+YWJvdXQgdHdvIG1pbnV0ZXMgaW50byB0aGUgbW92aWUgaSB0dXJuZWQgaXQgb2ZmLCBpIHdhcyBzbyBvZmZlbmRlZC4gaXQncyBqdXN0IGRpc2d1c3RpbmcuIGFueSBkZWNlbnQgcGVyc29uIHdvdWxkIGJlIG9mZmVuZGVkIGJ5IHRoZSBmaWx0aCBpbiB0aGlzIG1vdmllLiBjYWxsIG1lIG9sZCBmYXNoaW9uZWQsIGJ1dCBzaG92aW5nIHlvdXIgcHVzc3kganVpY2UtY292ZXJlZCBoYW5kIGludG8geW91ciBmcmllbmQncyBmYWNlIHNvIGhlIHdpbGwga25vdyB5b3UgImdvdCBzb21lIiBpcyBvdmVyIHRoZSBsaW5lIG9mIGRlY2VuY3ksIGluIG15IG9waW5pb24uIHllYWgsIHRoYXQncyBob3cgdGhpcyBwdXRyaWQgbGl0dGxlIGZpbG0gc3RhcnRzLCBhbmQgaSBjYW4gb25seSBpbWFnaW5lIGl0IGdldHMgbXVjaCB3b3JzZSBmcm9tIHRoZXJlLiBhbm90aGVyIHJlYWwgd2lubmVyIGZvciBNci4gUnVkZC4gaSBiZXQgaGUncyBwcm91ZCBhcyBwdW5jaC4gaW1hZ2luZSBpZiB5b3UgY291bGQgb25seSBnZXQgd29ydGhsZXNzIHJvbGVzIGxpa2UgaGUgZ2V0cywgd291bGQgeW91IHN0YXkgaW4gbW92aWVzPyBkZXNwaXRlIHRoZSBwYXksIGkgd291bGRuJ3QuIDxiciAvPjxiciAvPmkgc2hvdWxkIGhhdmUga25vd24gYmV0dGVyOyBuZXh0IHRpbWUgaSB3aWxsLikAAAAAAADwPwqeBwjZAxDZAyKMB3dlbGwgd29ydGggd2F0Y2hpbmcsIGVzcGVjaWFsbHkgd2l0aCB0aGUgbmljZSB0d2lzdCBvZiBhIGpvdXJuYWxpc3Qgd2l0aCBpbnRlZ3JpdHksIHlvdSBhcmUgZXhwZWN0aW5nIGEgYmlnIGZhbGwgZG93biBzdG9yeSBsaW5lIGFzIEdyZXkgT3dsIGlzIHVubWFza2VkIGFzIGEgZnJhdWQsIGJ1dCBpdCBpcyBub3QgdG8gYmUgYW5kIGFkZHMgdG8gdGhlIGdlbmVyYWxseSBvcHRpbWlzdGljIGFuZCB1cGxpZnRpbmcgdGhlbWUgYW5kIGRyYW1hIG9mIHRoZSBzdG9yeSBhbmQgZmlsbS48YnIgLz48YnIgLz5UaGlzIGhhcyB0byBiZSBCcm9zbmFuJ3MgYmVzdCBwZXJmb3JtYW5jZSB0byBkYXRlLCBoZSBjb252aW5jZXMgYWRtaXJhYmx5IGFzIHRoZSBFbmdsaXNoIGJveSBwbGF5aW5nIEluZGlhbnMuIFRoZSBzdGFuZCBvdXQgc2NlbmUgaXMgdGhlIHJldHVybiB0byBoaXMgP0F1bnRzPyB3aGVyZSBCcm9zbmFuIGFuZCB0aGUgdHdvIGVsZGVybHkgbGFkeSBhY3RyZXNzZXMgbWFrZSBhIHdvbmRlcmZ1bCBzY2VuZSBmdWxsIG9mIGZlZWxpbmcgb2Ygbm9zdGFsZ2lhIGFuZCBhIGxpZmUgbG9zdCB3aXRoIHNvIGxpdHRsZSBkaWFsb2d1ZSwganVzdCB3aXRoIGV4cHJlc3Npb25zIGFuZCBnb29kIGRpcmVjdGlvbi4gUGVyZmVjdC48YnIgLz48YnIgLz5UaGUgc3RvcnkgaXMgc28gbGl0dGxlIGtub3duIGFuZCB0aGUgbWVzc2FnZSBzbyB1bml2ZXJzYWwgYW5kIGFsbCBpbXBvcnRhbnQgaXQgaXMgYSByZWFsIHBpdHkgdGhpcyBmaWxtIGRpZCBub3QgZ2V0IGJldHRlciByZWNvZ25pdGlvbiwgbWF5YmUgaW4gdGltZSBpdCBtYXkgYmVjb21lIGEgYml0IG9mIGEgY2xhc3NpYyBhbmQgYSBzbGVlcGVyLiBJIGhvcGUgc28uPGJyIC8+PGJyIC8+V2VsbCBkb25lIERpY2tpZSBBdHRlbmJvcm91Z2ggYW5kIGNhc3QuKQAAAAAAAPA/CvIGCNoDENoDIuAGd2VsbCB3ZWxsIE9uZSBjYW50IGIgd2FzdGluZyB0aW1lIGp1c3QgY2F1c2Ugb2YgYSBiaWcgc3Rhci1jYXN0IC4uaSB0aGluayBhbGwgaSBjb3VsZCBzZWUgaXMgYSBidW5jaCBvZiB0YWxlbnRzIHdhc3RpbmcgdGhlaXIgdGltZSBvbiBhIGJpZyBzY3JlZW4gd2l0aCBzb21lIHBhdGhldGljIGh1bW9yIHdoaWNoIHdpbGwgYXBwZWFsIHRvIGkgZG8gbm90IGtub3cgd2hvPyBzb21lIHBhdGhldGljIHNvbmdzIHRoYXQgd2lsbCBiZSBoZWFyZCBieSB3aG8/IHNvbWUgcGF0aGV0aWNhbGx5IGFicnVwdCB0dXJuaW5ncyBqdXN0aWZpZWQgYnkgd2hvPyByYWNlIGFnYWluc3QgdGltZT8gdSBtZWFuIHdhc3RlIGFnYWluc3QgdGltZT8gT0sgc28gZmlyc3QgeW91IHNwb2lsIHlvdXIga2lkLHRoZW4geW91IHRlYWNoIGhpbSBhIGxlc3NvbiB3b3cgd2UgYXJlIHNvIGlnbm9yYW50IG9mIHRoaXMgZmFjdCB3aG9ldmVyIHNhaWQgaXRzIGEgYnJpbGxpYW50IG5ldyBjb25jZXB0IHByb2JhYmx5IGlzIHNvbWUgb3RoZXIgc3BlY2llcyBvdGhlciB0aGFuIGh1bWFuIGFscmlnaHQgZmluZSBsZXQgbWUgY29tZSBjb21tZW50IGxpa2UgaHVtYW5zIGRvIG1vdmllIGhhcyBhIG5pY2UgbWVzc2FnZSB0byBiZSBnaXZlbiBidXQgaXQgY291bGQgd2VsbCBoYXZlIGJlZW4gZ2l2ZW4gYnkgYSBzdHJhbmdlciBzaXR0aW5nIGJlc2lkZXMgeW91IGluIHRoZSBidXMgcmF0aGVyIHRoYW4geW91IGdvaW5nIGZvciBzdWNoIGEgd2FzdGVmdWwgbW92aWUgdG8gbGVhcm4gaXQgSGluZGkgbW92aWVzIGhhdmUgcHJvdmVkIGl0IGEgbG90IGFscmVhZHkgYW5kIGFsc28gaSBjYW50IHdhc3RlIG15IHRpbWUgd3JpdGluZyBhYm91dCB3YXN0ZSBhbnl3YXkhKQAAAAAAAPA/CukFCNsDENsDItcFd2VsbCBpdHMgb2ZmaWNpYWwuIHRoZXkgaGF2ZSBqdXN0IGtpbGxlZCBBbWVyaWNhbiBQaWUuIFRoZSBmaXJzdCAzIHdlcmUgYWJzb2x1dGVseSBoeXN0ZXJpY2FsLCBidXQgdGhpcyBvbmUgYW5kIHRoZSBvdGhlcnMgaGF2ZSBiZWVuIGF3ZnVsLiBJIG1lYW4gdGhlIHN0b3J5IGlzIGFib3V0IHR3byBjb2xsZWdlIGZyYXRlcm5pdHkncyB3aG8gYmF0dGxlIGVhY2ggb3RoZXIgZm9yIGl0cyBob3VzZXMsIEkgbWVhbiBjb21lIG9uIHRhbGsgYWJvdXQgYSB3ZWFrIHBsb3QsIHRoZSBmaXJzdCB0aHJlZSBkZWFsdCB3aXRoIGdyb3dpbmcgdXAsIGNoYW5nZSBhbmQgbWFycmlhZ2UsIHdoaWNoIGFyZSBhbGwgd29ydGh5IHBvaW50cyBvZiBkZXZlbG9wbWVudCBpbiBodW1hbiBzb2NpZXR5LjxiciAvPjxiciAvPlRoZSBuZXcgU3RpZmxlciBpcyB0aGUgYmlnZ2VzdCBqb2tlLCBJIGtub3cgaXRzIGhhcmQgdHJ5aW5nIHRvIGNvbXBhcmUgeW91cnNlbGYgd2l0aCB0aGUgU3RldmVuIFN0aWZsZXIgYnV0IHNvIG5vIGNpZ2FyLiBJIGdpdmUgdGhpcyBtb3ZpZSBhIDMgYmVjYXVzZSB0aGVyZSBpcyAyLTMgZnVubnkgYml0cyBpbiB0aGUgZmlsbS48YnIgLz48YnIgLz5UaGUgYmVzdCBjaGFyYWN0ZXIgaW4gdGhpcyBtb3ZpZSBvZiBjb3Vyc2UgaXMgSmltJ3MgZGFkIGkgZG9uJ3Qga25vdyB3aHkgaGUga2VlcHMgY29udGludWluZyB0byBkbyB0aGVzZSBwb29ybHkgZGV2ZWxvcGVkIGZpbG1zLikAAAAAAADwPwqECAjcAxDcAyLyB3dlbGwgaSB3YXNuJ3Qgc3VyZSB3aGF0IHRoZSBmaWxtIHdhcyBnb2luZyB0byBiZSBsaWtlIGFzIGkgaGFkIG9ubHkgc2VlbiBhIGxpdHRsZSBjbGlwIGJ1dCBpIHdhcyB0aGlua2luZyBpdHMgZ29pbmcgdG8gYmUgZ29vZCBhbmQgaSB3YXMgcmlnaHQgaSB3YXRjaGVkIGl0IHR3aWNlIG9uIHRoZSBkYXkgaSBnb3QgaXQgYW5kIHdlbGwgaXQgaXMgbXkgZmF2b3VyaXRlIGZpbG0uPGJyIC8+PGJyIC8+aSB0aGluayBBbGlzb24gTG9oYW4gcGxheWVkIHRoZSBwYXJ0IG9mIGJldGggcmVhbGx5IHdlbGwgc2hlIGlzIHN1Y2ggYSBncmF0ZSBhY3RyZXNzIGFuZCB0aGUgd3JpdGVyIG11c3QgaGF2ZSBnb25lIGludG8gYSBsb3Qgb2YgcmVzZWFyY2ggdG8gZmluZCBvdXQgYWJvdXQgYnVsaW1pYSBhbHRob3VnaCB0aGUgZW5kaW5nIHdoZW4gYmV0aCBpcyBpbiB0aGUgaG9zcGl0YWwgYW4gaGFzIDIgSG9ydXMgb2JzZXJ2YXRpb24gYWZ0ZXIgbWVhbHMgYmVjYXVzZSBpdiBiZWVuIHRvbGQgbGlrZSAxIGhvdXNlIGlzIE9LIGFuZCBhbHNvIHRoYXQgaG9zcGl0YWxzIGRvZXNuJ3QgaGVscCBidWxpbWljcyBhcyBpdiBiZWVuIHRvbGQgd2hpY2ggaXMgcHJvYmFibHkgd2h5IEknbSBzdGlsbCBhdCBob21lIGV2ZW4gdGhvIG15IHNpc3RlciBhbmQgbXVtIHdvdWxkIGxpa2UgdG8gaGF2ZSBtZSBob3NwaXRhbGlzZWQgYXMgaSB0byBoYXZlIGJ1bGltaWEgYnV0IHRoaXMgaXMgYSBncmF0ZSBmaWxtIGkgcmVjb21tZW5kIGl0IHRvIGFueSBvbmUgd2l0aCBvciB3aXRoIG91dCBhbiBlYXRpbmcgZGlzb3JkZXIgb3IgZm9yIHBlb3BsZSB3aG8ga25vdyBzb21lIG9uZSB3aXRoIGVhdGluZyBkaXNvcmRlcnMgYXMgaXQgY2FuIGxldCB0aGVtIGluIHRvIHRoZSBsaXZlcyBvZiBhIGJ1bGltaWMgcGVyc29uIGFuZCBzZWUgdGhlIHdvcmxkIGhvdyB0aGV5IGRvIGEgYml0IG92ZXIgYWxsIGEgZ3JhdGUgZmlsbSBhbmQgaSByZWNvbW1lbmQgaXQgdG8gYW55IG9uZSBhbmQgYW55IHR5cGUgb2YgcGVyc29uKQAAAAAAAPA/CuMLCN0DEN0DItELd2VsbCBpIHdhcyBhIHRlZW5hZ2VyIHdoZW4gaSBzYXcgdGhlIG1vdmllLi50aGUgc29uZ3Mgd2VyZSBhIGh1Z2UgaGl0IGJ1dCB0aGUgZWxpdGUgY2xhc3Mgc2tpcHBlZCBnb3ZpbmRhIG1vdmllcyBiYWNrIHRoZW4gY296IHdhdGNoaW5nIGdvdmluZGEgYW5kIGthcmlzaG1hIChha2Ega2FyaXptYSApbW92aWVzIHdlcmUgbm90IHRoZSBpbiB0aGluZyBmb3IgdGhhdCAnY2xhc3MnIGJ1dCBhbnl3YXlzIGEgbG90IG9mIHBlb3BsZSBsaWtlZCBpdCBhcyB0aGUgc2VyaWVzIG9mIHRoZXNlIG1vdmllcyByb2NrZWQgdGhlIDkwJ3MgdGhyb3VnaCBvdXQgYW5kIG1vc3Qgb2YgdGhlbSB3ZXJlIHN1Y2Nlc3NmdWwuLnRvZGF5IGkgd2FzIHdhdGNoaW5nIGl0IGFnYWluIGFmdGVyIGEgbG9uZyB0aW1lIGFuZCBpIHJlbWVtYmVyZWQsIHRoZXJlIHdhcyBhIGxvbmcgcXVlIG9mIHBlb3BsZSBhbmQgdGhlIHJpb3QgdGhleSBjcmVhdGVkIHdoZW4gdGhlIGEgYWEgZSB1byB1byBvIHNvbmcgY2FtZSBvbiBzY3JlZW4uLi4udGhlIGRyZXNzZXMgb2YgZ292aW5kYSBhbmQga2FyaXNobWEgd2VyZSBjb21wbGltZW50YXJ5IHRvIGVhY2ggb3RoZXIodGhlIHdvcnN0IGRyZXNzaW5nIGR1byBvZiB0aGF0IHRpbWUpIHdlbGwga2FyaXNtYSBpbiB0aGUgbGF0ZSA5MCdzIHRyYW5zZm9ybWVkIGJ1dCBnb3ZpbmRhIGhhcyBzdGlsbCBiZWVuIHZlcnkgZmFpdGhmdWwgdG8gaGlzIGRlc2lnbmVyIGFzIGhpcyBkcmVzcyBzZW5zZSByZW1haW5zIHRoZSBzYW1lLi4uYnV0IGJhY2sgdGhlbiBpdCBhbGwgYmxlbmRlZCBpdCB3YXMgYWxsIGdvb2QgLi5ldmVyeXRoaW5nIHdvcmtlZCBhbmQgc2xvd2x5IHRoZSBlbGl0ZSBjbGFzcyByZWFsaXplZCB3aGF0IGZ1biBpdCB3YXMgbWlzc2luZyBhbmQgdGhlbiAuLi4uLnRoZXJlIHdhcyBubyBsb29raW5nIGJhY2sgZm9yIHRoaXMgam9kaSBhcyBpdCB3ZW50IG9uIG4gb24gbWFraW5nIHRob3NlIEluZGlhbiBjYXJyeSBvbiBzZXJpZXMgLi5oYXRlZCBieSBhIGZldyBidXQgbG92ZWQgYnkgdGhlIG1hc3Nlcy48YnIgLz48YnIgLz5pZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGEgZ29vZCB0aW1lIHdpdGggbm90aGluZyB0byBkbyByZW50IGl0IG9yIHdhdGNoIGl0IG9uIFRWIGkgZG9uJ3QgdGhpbmsgeW91IHdpbGwgcmVncmV0IGl0Li4uYnV0IHJlbWVtYmVyIGl0cyB0aGUgd29yc3QgYXQgaXRzIGJlc3QgLi48YnIgLz48YnIgLz5zdGlsbCBpIHdhdGNoIHRob3NlIG1vdmllcyB3aGVuIGkgZ2V0IHRpbWUgY296IGkgY2FudCBzdG9wIGxhdWdoaW5nLi4uc28gaSBzYXkgZ28gYWhlYWQgYW5kIGhhdmUgYSBnb29kIHRpbWUgYXMgdGhlcmUgYXJlIHRpbWVzIHdoZW4gd2UgYWxsIGxvdmUgc3R1cGlkaXR5IGFuZCBzcGVjaWFsbHkgd2hlbiBpdHMgZG9uZSBieSB0aGUga2luZ3Mgb2YgdGhlaXIgdGltZXMgaXQgc3VyZWx5IGlzIHdhdGNoYWJsZSAuLi5pIHJlY29tbWVuZCBpdCB0byBhbGwgbW92aWUgbG92ZXJzIC4uLikAAAAAAADwPwqtBAjeAxDeAyKbBHdlbGwgaSBkb24ndCBrbm93IHdoYXQgcGVvcGxlIHNhdyBpbiB0aGlzIG1vdmllIGkgZG9uJ3Qga25vdy4gPGJyIC8+PGJyIC8+aSBzYXcgdGhpcyBtb3ZpZSB5ZXN0ZXJkYXkgYW5kIGkgZ290IGEgc2V2ZXJlIGhlYWRhY2hlLiBvdGhlciB0aGFuIGZldyBnb29kIGRpYWxvZyB0aGVyZSBpcyBub3RoaW5nIGluIHRoaXMgbW92aWUuPGJyIC8+PGJyIC8+dGhlIGJpZyBiIHJ0IG5vdyBpcyBwcmVhY2hpbmcgdG8gZmFsbCBpbiBsb3ZlIHdpdGggZ2lybHMgb2YgaGFsZiBvZiB5b3UgYWdlLiA8YnIgLz48YnIgLz5pIGRpZG4ndCBsaWtlIHRoZSBtb3ZpZSBhdCBhbGwuIGkgd2FudGVkIHRvIGdpdmUgMSByYXRpbmcgYnV0IGdpdmluZyAzIGFzIDxiciAvPjxiciAvPmkgbGlrZSB0aGUgcm9sZSBvZiB0aGUgc21hbGwgZ2lybCB3aG8gaXMgY2FsbGVkICJzZXh5IiBieSBBQi4gbXkgd29yZCAiRE9OVCBXQVRDSCI8YnIgLz48YnIgLz5zYXZlIHlvdXIgc2VsZiBkb25vdCB3YXRjaCB0aGlzIG1vdmllLjxiciAvPjxiciAvPnNhdmUgdGltZSBhbmQgbW9uZXkuKQAAAAAAAPA/CssECN8DEN8DIrkEd2VsbCBkb25lIGdpdmluZyB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlIG90aGVyIHNpZGUgZnJhdWxlaW4gZG9rdG9yIGNhcHR1cmVzIGJvdGggdGhlIGNvc3QgYW5kIHRoZSBmdXRpbGl0eSBvZiB3YXIuIGV4Y2VsbGVudCBhY3RpbmcgZXNwZWNpYWxseSB3aGVuIGdlcm1hbiBoaWdoIGNvbW1hbmQgcmVmdXNlcyBpbiB0aGUgbmFtZSBvZiBjaGl2YWxyeSB0byBwcmVzZW50IG1lZGFsIGthaXNlciBvcmRlcmVkIHN0cnVjay4gdGhlIHNjZW5lcyBvZiBjYXJuYWdlIGFyZSBwcm9iYWJseSB0b28gaW50ZW5zZSBmb3IgZWZmZXRlIFVTIG1pbmRzIHdobydkIHByb2JhYmx5IHByZWZlciBzb21lIHNpbGx5IHNwZWVjaGVzIGFuZCBzZW5zZWxlc3MgYWJzdHJhY3Rpb25zIGxpa2UgMTQgcG9pbnRzIG9yIHRoZSBsZWFndWUgb2YgbmF0aW9ucy4gcmVhbCBhbWVyaWNhbnMgbWlnaHQgYXBwcmVjaWF0ZSB0aGUgc3RvcnkgbGluZSBhbmQgdGhlIGFjdGlvbi4gZm9yIGFsbCB0aGUgYWN0aW9uIGFuZCBpbnRyaWd1ZSwgZnJhdWxlaW4gZG9rdG9yIGNvbXBhcmVzIGZhdm8odSlyYWJseSB0byBKYWNvYidzIExhZGRlci4pAAAAAAAA8D8K7AcI4AMQ4AMi2gd3ZWxsIGFmdGVyIHdhdGNoaW5nIHRoaXMgaSBjYW4gc2F5IHRoYXQgaXQgYWluJ3QgdGhlIHdvcnN0IG1vdmllIGV2ZXIgbWFkZSwsIHllcyBmb2xrcyB0aGVyZSBpcyB3b3JzZSB0aGFuIHRoaXMsLCB0aGVyZSBhcmUgc29tZSBnb29kIHBvaW50cyB0byB0aGUgbW92aWUsLCB5b3UgZ2V0IHRvIHdhdGNoIGRydW5rZW4gdGVlbmFnZXJzLCBoYXZlIGhvcnJpYmxlIGRlYXRocywsIGFuZCBjdXRlIGxvb2tpbmcgcmF0cyBlYXRpbmcgc29tZSBzY2llbmNlIGV4cGVyaW1lbnQsIGFuZCBnZXR0aW5nIGdyb3Rlc3F1ZWx5IGh1Z2UsLCB0aGUgZHJ1bmsgamFuaXRvciwsIHRoZSBjcmFua3kgZG9jdG9yLCwgYW5kIHllcyBhIGdpcmwgaW4gdGhvbmcgdW5kZXJ3ZWFyIHRoYXQgaGFzIGFic29sdXRlbHkgbm8gc2hhbWUsLCBkdW1iIGpvY2tzLCwgaSBjb3VsZCdudCBwZXJzb25hbGx5IHdhaXQgZm9yIHRoZSByYXQgdG8gZWF0IHRoZXNlIGRydW5rZW4gZm9vbHMsLCBpIHdhcyByb290aW5nIGZvciB0aGUgcmF0IHRoZSBlIG50aXJlIHRpbWUsLCBpdCBoYWQgYSBnb29kIHByZW1pc2UsLCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgbW92aWUsLCB3YXMgaW50ZXJlc3RpbmcgdGhvdWdoIHdpdGggdGhlIHNjaWVudGlmaWMgZXhwbGFudGF0aW9uIGFib3V0IHRoZSByYXRzLCwgYW5kIHRoZSBsaXR0bGUgYmFjayBzdG9yeSwsIGJ1dCBpIHRoaW5rIHRoYXQgaXQgcnVpbmVkIHdoZW4gdGhlIGR1bWIgZHJ1bmtlbiBob3JueSB0ZWVuYWdlcnMgY29tZSBpbnRvIHBsYXksLCB0aGUgcmF0IGluIG15IG9waW5pb24sIHRoZSBvbmUgdGhhdCBnZXQncyBsb3N0LCwgaGVyIG5hbWUgaXMgQnJlbmRhLCB3YXMgc28gZmFrZSwsIG11c3QgaGF2ZSBiZWVuIGEgY0dpIHJhdCwsIGxvb2tlZCBsaWtlIGEgZ3V5IGRyZXNzZWQgdXAgaW4gYSBiZWF2ZXIgc3VpdCwsIHRoaXMgd2FzIHByZXR0eSBzY2hsb2NreSwgbGFtZSwsIGJ1dCBub3QgdG90YWxseSBob3JyaWJibGUsLCkAAAAAAADwPwriBAjhAxDhAyLQBHdlYWsgZGlyZWN0aW9uLCB3ZWFrIHBsb3QsIHVuaW1wcmVzc2l2ZSBtdXNpYywgaSB3b25kZXIgd2h5IFVkaXRhIEdvc3dhbWkgaXMgdGhlcmUgaW4gdGhlIG1vdmllIHdvcmxkIGluIHRoZSBmaXJzdCBwbGFjZSA/IHNoZSB0cmllZCB0byByZXZlYWwgYSBsb3Qgb2YgaGVyIHRhbGVudCAobW9zdGx5IHNraW4pIGJ1dCBmYWlsZWQgdG8gaW1wcmVzcy48YnIgLz48YnIgLz5tdXNpYyB3YXNuJ3QgdGhhdCBpbXByZXNzaXZlIGFzIHdlbGwsIG9ubHkgb25lIHNvbmcgIkpoYWxhayBEaWtobGFqYWEiIHdhcyB3b3J0aCBsaXN0ZW5pbmcgdG8uLi4uLiA8YnIgLz48YnIgLz5Ba3NhciwgdGhlIHRpdGxlID8gd2VsbCB0aGV5IHRyaWVkIHRvIGp1c3RpZnkgdGhlIHRpdGxlIG9mIHRoZSBtb3ZpZSBpbiB0aGUgZW5kLCBidXQgaXQgZGlkbid0IG1ha2Ugc2Vuc2UuLjxiciAvPjxiciAvPnRoZXJlIHdlcmUgbWFueSB1bndhbnRlZCB0d2lzdHMgYW5kIHR1cm5zIGluIHRoZSBzdG9yeSwgd2hpY2ggbWFkZSBpdCBtb3JlIGJvcmluZy4gaG93ZXZlciBpZiBzb21lb25lJ3MgYSBEaW5vIE1vcmVhIGZhbiwgcGxlYXNlIGdvIGFoZWFkIGFuZCB3YXRjaCBpdC4pAAAAAAAA8D8K5QYI4gMQ4gMi0wZ3YXRjaCB0aGlzIG1vdmllLiBpdCdzIHRydWx5IGEgZ29vZCByaWRlIHRocm91Z2ggdGhlIGRpZmZpY3VsdGllcyBvZiBtYWtpbmcgYSBpbmRpZSBtb3ZpZSwgYW5kIHdoYXQgaGFwcGVucyB3aGVuIGl0IGJsb3dzIHVwIGluIHRoZSBmaWxtIG1ha2VyJ3MgZmFjZS4gdGhlcmUncyBhIGxvdCBvZiBzdHVmZiBhYm91dCBwdW5rIHJvY2ssIGFuZCB0aGUgcGhpbG9zb3BoeSBiZWhpbmQgdGhhdCBtb3ZlbWVudCBhbmQgaXQncyByZWxhdGlvbnNoaXAgdG8gdGhpcyBwcm9qZWN0LiBzbyBpZiB5b3UncmUgaW50byBvbGQgcHVuaywgQW1lcmljYW4gcHVuaywgeW91J2xsIGRpZyBpdC4uLi4gYnV0LCBiZXdhcmUsIHRoZXJlJ3MgYSB0b24gb2YgYmFkIGFjdGluZyBiaXRzIGZyb20gdGhlIGZhaWxlZCBwcm9qZWN0IHRoYXQgYXJlIGluY29ycG9yYXRlZC4uLiB5ZXQgdGhleSBkbyBjb21lIG9mZiBmdW5ueSBhdCB0aW1lcy4gYW5kLCBhY3R1YWxseSwgc29tZSBvZiB0aGUgYmVzdCBwYXJ0cyBhcmUgbGlzdGVuaW5nIHRvIHBlb3BsZSB3aG8gaGF2ZSBuZXZlciBiZWVuIGludm9sdmVkIGluIG1vdmllIG1ha2luZyBwb250aWZpY2F0ZSBhbmQgd2hhdCB0aGV5IHdlbnQgdGhyb3VnaCBpbiB0aGUgdGhyZWUgeWVhciBwZXJpb2QgdGhhdCBpdCB0b29rIHRvIHB1dCB0aGlzIHRvZ2V0aGVyLiBzbyBhbnlvbmUgb3V0IHRoZXJlIHRoYXQncyBhYm91dCB0byBtYWtlIGEgZmlsbSwgZXNwZWNpYWxseSBpZiB5b3UgaGF2ZW4ndCBiZWVuIHRvIGZpbG0gc2Nob29sIG9yIHdvcmtlZCBpbiB0aGUgZmllbGQsIHlvdSBzaG91bGQgd2F0Y2ggdGhpcyBhbmQgbGVhcm4gZnJvbSB0aGUgZmlsbSBtYWtlcidzIG1pc3Rha2VzLikAAAAAAADwPwq5CQjjAxDjAyKnCXdhdGNoIGEgdGVhbSBvZiBib21iIGRpc3Bvc2FsIGV4cGVydHMgaW4gSXJhcSBjb3VudCBkb3duIHRoZWlyIHRpbWUgYmVmb3JlIHRoZXkgY2FuIGdvIGhvbWUuPGJyIC8+PGJyIC8+VGhhdCBpbiBpdHNlbGYgc291bmRzIGJvcmluZy4gRXZlcnkgdGltZSB0aGF0IGxpdHRsZSBjYXB0aW9uIGNhbWUgdXAgdGVsbGluZyB1cyBob3cgbG9uZyB0aGV5IGhhZCBsZWZ0LCBpdCBqdXN0IGNhdXNlZCB0aGlzIGZpbG0gd2l0aCBubyBwbG90IHRvIGRyYWcgb24gYW5kIG9uLiBodXJyeSB1cCBhbmQgZmluaXNoIHlvdXIgdGltZSB0aGVyZSBzbyB3ZSBjYW4gYWxsIGdvIGhvbWUuPGJyIC8+PGJyIC8+SSBtdXN0IGJlIG1pc3Npbmcgc29tZXRoaW5nLiBJJ20gYSBncmVhdCBmYW4gb2Ygd2FyIGZpbG1zIGlmIHRoZXkgYXJlIGRvbmUgd2VsbC4gVGhpcyBoYWQgImphcmhlYWQiIHN5bmRyb21lLiBBIGZpbG0gdGhhdCBhdCB0aW1lcyB3YXMgYmVhdXRpZnVsbHkgc2hvdCwgYnV0IGNpbmVtYXRvZ3JhcGh5IGRvZXNuJ3Qgc3RvcCBpdCBmcm9tIGJlaW5nIHRvdGFsbHkgZHVsbCBhbmQgcG9pbnRsZXNzLjxiciAvPjxiciAvPkFuZCBnZXQgb3ZlciB0aGUgc2xvdyBtbyAiY2FydHJpZGdlcyBjb21pbmcgb3V0IG9mIHRoZSBndW4iIHNob3QgYWxyZWFkeS4gdGhleSBjb3VsZCBoYXZlIHNhdmVkIG1vbmV5IGFuZCBqdXN0IGdvdCBzdG9jayBmb290YWdlIGZyb20gYW55IG90aGVyIGZpbG0gd2l0aCBhIGd1biBpbiBpdC48YnIgLz48YnIgLz5JIGRpZG4ndCBoYXZlIGFueSBlbXBhdGh5IGZvciB0aGUgbWFpbiBndXkgaW4gaXQsIGkgd2FzIGNvbnN0YW50bHkgaG9waW5nIHRoYXQgaGlzIHJlY2tsZXNzbmVzcyB3b3VsZCBjYXVzZSBoaW0gdG8gZGllLiBJbiBmYWN0IHRoZSBmaWxtIHdvdWxkIGhhdmUgd29ya2VkIG11Y2ggYmV0dGVyIGlmIGhlIGhhZC48YnIgLz48YnIgLz5JIHJlYWQgc29tZSByZXZpZXdzIGFuZCBzZWVtZWQgdG8gZ2V0IHRoZSBmZWVsaW5nIHRoYXQgdGhvc2Ugd2hvIGhhZCBiZWVuIGluIHRoZSBhcm1lZCBmb3JjZXMgZGlzbGlrZWQgaXQsIGFuZCBldmVyeW9uZSBlbHNlIGxvdmVkIGl0LiBJIGhhdmUgbmV2ZXIgYmVlbiBpbiB0aGUgZm9yY2VzLCBhbmQgSSdtIHdpdGggdGhlbS4gSXQncyBwcmV0ZW50aW91cyBkcml2ZWwuIHRoZSAzIHN0YXJzIGFyZSBmb3IgdGhlIGNpbmVtYXRvZ3JhcGh5LikAAAAAAADwPwrOBQjkAxDkAyK8BXdhc3RlIG9mIDFoNDUgdGhpcyBuYXN0eSBsaXR0bGUgZmlsbSBpcyBvbmUgdG8gYXZvaWQsIGl0cyBsaWtlIGEgY2hlYXAgYmFkbHkgcGxvdHRlZCBjcm9zcyBiZXR3ZWVuIHNhdyBhbmQgYSBmZXcgb3RoZXIgcmVjZW50IGZpbG1zIGFib3V0IGtpZG5hcCwgd2h5IHRoZSB3cml0ZXIgd3JvdGUgdGhpcyBpcyBvYnZpb3VzLi5oZSBoYXMgbm8gc291bCBhbmQgZGlkIGl0IHRvIHRyeSBhbmQgbWUgc29tZSBtb25leS4gVGhlIHR3aXN0cyB3ZXJlIG9idmlvdXMsIHdoZW4gdGhvc2UgaW4gcGVyaWwgY291bGQgZXNjYXBlIHRoZXkgZGlkIHRoZSBvYnZpb3VzIGFuZCBkaWRuJ3QgZXRjLi4gb25seSBnb29kIHRoaW5nIGFib3V0IGl0IGlzIEkndmUgZGlzY292ZXJlZCAxIG5ldyBhY3RyZXNzIHdvcnRoIHdhdGNoaW5nLi5wZXl0b24gbGlzdCwgZG9uJ3Qgd2F0Y2ggc2h1dHRsZSB0aG91Z2gsIHRoZXJlIGFyZSB0b28gbWFueSBiZXR0ZXIgbmljZXIgZmlsbXMgdG8gd2F0Y2ggcmF0aGVyIHRoYW4gdGhpcyB0aGF0IHdpbGwgbWFrZSB5b3UgbWlzZXJhYmxlIGFuZCB0aGluayBsZXNzIG9mIHRoZSB3b3JsZC4gU3BlbmQgeW91ciB0aW1lIG1vcmUgd2lzZWx5IHdhdGNoIGdvb2QgZmlsbXMsIGRvIHNvbWUgZXhlcmNpc2UsIGNvb2sgYSBuaWNlIG1lYWwuLmFueXRoaW5nIGJ1dCB3YXN0ZSB5b3VyIHRpbWUgb24gcnViYmlzaCBsaWtlIHRoaXMpAAAAAAAA8D8KrQsI5QMQ5QMimwt3YXMgdGhpcyB0aW0gbWVhZG93cyBmaXJzdCBhY3Rpbmcgcm9sZSBpbiBhIG1vdmllPyB0aGUgY2hhcmFjdGVyLCBsZW9uLCBpcyBmdW5ueSBlbm91Z2ggYnV0IHNob3J0bHkgYWZ0ZXIgdGhhdCB0aGUgc2V4dWFsIGpva2VzIGFuZCBodW1vciBhcmUgdG9vIGR1bWIgdG8gbGlzdGVuIHRvIGFueW1vcmUuIHNvbWUgbW92aWVzIGNhbiBnZXQgYXdheSB3aXRoIHRoZSBzZXh1YWwgam9rZXMsIGFuZCBiYXNlIHRoZWlyIGF1ZGllbmNlcyB0byBrbm93IHRoYXQgcmlnaHQgd2hlbiB0aGUgYWR2ZXJ0aXNpbmcgY29tZXMgb24uIHNvbWUgbW92aWVzIHRoYXQgZG8gdGhpcyBhcmUgYW1lcmljYW4gcGllIGFuZCBzY2FyeSBtb3ZpZS4gc2NhcnkgbW92aWUgd2FzIHN0dXBpZCwgYW5kIGFtZXJpY2FuIHBpZSB3b3VsZG50IGhhdmUgZG9uZSB3ZWxsIHdpdGhvdXQgdGhlIHNleHVhbCBqb2tlcy4gdGhlIG9ubHkgcm9sZSwgYmVzaWRlcyBsZW9uLCB0aGF0IGhhZCBzb21lIGh1bW9yIHRoYXQgZm9sbG93ZWQgd2FzIHdpbGwgZmVycmVsbC4gdGhlIGNoYXJhY3RlciByZWFsbHkgd2FzIGR1bWIgYW5kIHRoYXQgd2FzIGFsbCwgdGhlIGR1bWIgaHVtb3Igd2FzIGFsbCB0aGF0IGhhZCBtZSB3YXRjaGluZy4gdGhlIG1vdmllIHdhcyBvaywgYW5kIG5vdGhpbmcgZWxzZS4gaSBkb250IHJlYWxseSB1bmRlcnN0YW5kIHdoeSB0aGUgc25sIHBlb3BsZSB0aGF0IGFyZSBkeWluZyB0byBsZWF2ZSB0aGUgc2hvdyBhbHdheXMgZ2V0IGEgbW92aWUgYmFzZWQgb24gYSBjaGFyYWN0ZXIgdGhleSBwbGF5ZWQgb24gdGhlIHNob3cuIHRoZSBza2l0cyBsYXN0IGFib3V0IDUgbWludXRlcywgYW5kIGlmIHRoZXkgY2FuIG1ha2UgYSBtb3ZpZSBvZmYgYSA1IG1pbnV0ZSBza2l0LCB0aGVuIHdoYXQgaXMgdGhlIHdvcmxkIGNvbWluZyB0bz8gbW9sbHkgc2hhbm5vbiBoYWQgc3VwZXJzdGFyLCBjaGVyaSBvJ3RlcnJpIGhhZCBzY2FyeSBtb3ZpZSwgYnV0IHNoZSB3YXNudCBhIGxlYWRpbmcgcm9sZSwgYW5kIHdpbGwgaGFkIGVsZi4gYnV0IHRoYXQgd2FzIGdvb2QsIGJ1dCBoZSBkaWQgc29tZSBkdW1iIG1vdmllLCBidXQgaSBjYW50IHJlbWVtYmVyLCBhbmQgbWlrZSBteWVycyB3aXRoIHdheW5lJ3Mgd29ybGQuIGhvdyBjb21lIHRoZSBtYWQgdHYgY3JldyBkb250IGV2ZXIgZ2V0IG1vdmllIGRlYWxzPyBzZWVuIG9ubHkgb25lIGd1eSBicmVhayB0aHJvdWdoLCBidXQgb25seSBpbiBsaWtlIDIgbW92aWVzIGFuZCBhIHR2IHNob3cgd2l0aCBhbmR5IGRpY2suIGJ1dCB0aGF0IGd1eSByZWxpZXMgb24gY29tZWR5IGZvciBoaXMgbGlmZSB0byBjb250aW51ZSwgZnVubnkgb3Igbm90LiB0aGlzIG1vdmllIGlzIG5vdCBnb29kLCBidXQgaGFkIHNvbWUgcG9zaXRpdmUgaHVtb3IuIHdoYXQgYSB3YXN0ZSBvZiBmaWxtIGFuZCBwZW9wbGUncyBtb25leS4gKEQgRC0pKQAAAAAAAPA/CsIGCOYDEOYDIrAGd2FzIHNvcnQgb2YgZW5qb3lpbmcgdGhpcyBtb3ZpZSB1bnRpbCB0aGUgaXNzdWVzIG9mIEVkIE5vcnRvbidzIGZhY2lhbCBoYWlyLiBXaXRob3V0IHJldmVhbGluZyBhbnkgcGxvdCBkZXRhaWxzLS1vbiBvbmUgYWZ0ZXJub29uIGhlIHdhcyBzcG9ydGluZyBhIGxpZ2h0IGJlYXJkIGJ1dCBieSB0aGUgc2FtZSBldmVuaW5nIHRoZSBiZWFyZCB3YXMgZ29uZSBhbmQgYSB2ZXJ5IGx1eHVyaWFudCBtb3VzdGFjaGUgd2FzIGluIHBsYWNlLiBJdCB3YXMgbXVjaCBmdWxsZXIgdGhhbiB0aGUgbW91c3RhY2hlIHRoYXQgd2VudCB3aXRoIHRoZSBiZWFyZC4gTGF0ZXIgb24sIGluIHRoZSBjb3Vyc2Ugb2YgYSBkYXJrIG5pZ2h0IGluIHRoZSBvcGVuIHRoZSBtb3VzdGFjaGUgd2FzIGdvbmUgYW5kIGhlIGFwcGVhcmVkIGNsZWFucyBoYXZlbi4gVGhpcyB3YXMgb24gYW4gb2NjYXNpb24gd2hlcmUgc3RvcHBpbmcgdG8gc2hhdmUgd291bGRuJ3QgYmUgYW4gb3B0aW9uLiBUaGVzZSBjb250aW51aXR5IGRpc2NyZXBhbmNpZXMgdG90YWxseSBkaXN0cmFjdGVkIG1lIGZyb20gdGhlIHJlc3Qgb2YgdGhlIG1vdmllIGFuZCBydWluZWQgYW55IGNyZWRpYmlsaXR5IGl0IGhhZCBwcmV2aW91c2x5IGhhZC4gQWxzbywgSSBmb3VuZCB0aGUgbGVuZ3RoeSBzY2VuZSBvZiB0aGUgY293Ym95IGFsb25lIGluIGhpcyBiZWRyb29tIHdhcyB3YXkgdG9vIHJlbWluaXNjZW50IG9mIERlIE5pcm8gaW4gVGF4aSBEcml2ZXIuIEV2ZW4gaWYgaXQgd2FzIG1lYW50IHRvIGJlIGFuIGhvbWFnZSBpdCB3YXMgbGFpZCBvbiB0b28gdGhpY2tseSBmb3IgdGhpcyB2aWV3ZXIuKQAAAAAAAPA/CtkFCOcDEOcDIscFdmVyeSBzdHJhaWdodCAtIG5vdCBoYXBweSB3aXRoIHRoZSBtb3ZpZS48YnIgLz48YnIgLz5UaGUgbWFpbiBjZW50ZXIgb2YgdGhlIG1vdmllIGlzIHRoZSBzdG9yeSB3aGVyZSB0aGUgbGFkeSBpcyB0aGUgbW90aGVyIG9mIGFsbCB0aGUgc25hY2tzIGFuZCBhbGwgdGhlIHRoaW5ncy48YnIgLz48YnIgLz5JZiB0aGV5IGNhbiBtb3JlIGV4cGxhaW4gdGhhdCBob3cgdGhpcyBpcyBoYXBwZW5pbmcgYW5kIGFsbCB0aGUgc3R1ZmYgdGhlbiBpdCB3YXMgcXVpdGUgYSBmdW4gYW5kIG1vcmUgcmF0aW5nIGZvciB0aGlzIG1vdmllLjxiciAvPjxiciAvPlRoZSBlbmQgd2FzIHZlcnkgc2hvcnQgYW5kIHN1ZGRlbiwgdGlsbCBub3cgYWN0b3Igb2YgdGhlIG1vdmllIHdhcyB0byBzYXZlIGhlciB0aGVuIGF0IGxhc3QgaGUgdG9sZCBzb3JyeSAhISBub3cgd2UgYXJlIGxhdGUuIE9IICEhIGNyYXAuPGJyIC8+PGJyIC8+d2hhdCB3YXMgdGhlIHN0b3J5ICwgYW5kIGhvdyB0aGlzIGFsbCB0aGlzIHRoaW5nIGhhcHBlbiwgSSB0aGluayB0aGV5IGNhbiBwdXQgYWxsIHRoZXNlIHN0dWZmcy4gU28gdGhlIGVuZCB1c2VyIGxpa2UgdXMgd2lsbCBiZSBzYXRpc2ZpZWQgdGhhdCB5ZXMgd2UgYXJlIGhhcHB5IHdpdGggdGhlIG1vdmllLiA8YnIgLz48YnIgLz5hbnkgd2F5ICwgYnV0IG5pY2UgaWRlYSBhbmQgbmljZSB0cnkgc28gSSB3aWxsIHNheSA0IG9yIG1heCA0LjUuKQAAAAAAAPA/Cp8KCOgDEOgDIo0KdmVyeSByYXJlbHkgaXQgaGFwcGVucyB0aGF0IGkgc2l0IGRvd24gdG8gd3JpdGUgYSBjb21tZW50IGZvciBhIG1vdmllLi4uLmJ1dCB0aGlzIG1vdmllISEhISEhb2ggbXkgaG9seSBnb2QhISEhISEhIW5ldmVyIGV2ZXIgd2FzIHRoZXJlIGEgSGluZGkgbW92aWUgYmV0dGVyIHRoYW4gdGhpcy4uLi4uLmFuZCBuZXZlciBldmVyIHRoZXJlIGNhbWUgYSBtb3ZpZSBiZXR0ZXIgdGhhbiB0aGlzLi4uLi4uaXQncyB0aGUga2luZyBvZiBhbGwgY29tZWRpZXMuLi4uLjxiciAvPjxiciAvPmFhbWlyIGtoYW4gaXMgYXJndWFibHkgdGhlIGJlc3QgQ09NSUMgYWN0b3IgaW4gSW5kaWFuIGZpbG0gaW5kdXN0cnkuLi50aG91Z2ggaXRzIGZ1bm55IHRvIHNheSB0aGF0IGJlY2F1c2UgaGUgaXMgYSBjbGFzcyBhY3Qsbm90IGEgY29tZWRpYW4uLi5idXQgd2hhdCBoZSBoYXMgZG9uZSBpbiB0aGlzIGZpbG0gaXMgcGVyaGFwcyB0aGUgbW9zdCBoaWxhcmlvdXMgcGVyZm9ybWFuY2UgYnkgYW55IEluZGlhbiBhY3RvciBpbiBhbiBvdXQgYW5kIG91dCBjb21lZHkuLi48YnIgLz48YnIgLz5zYWxtYW4ga2hhbiBoYXMgbmV2ZXIgYmVlbiBhIGdvb2QgYWN0b3IgaW4gbXkgZXllcy4uLi5idXQgdGhpcyBtb3ZpZSBnb3QgdGhlIGJlc3Qgb3V0IG9mIGhpbS4uLi5oZSB3YXMgaW5ub2NlbnRseSBjb21pYy4uLmlmIGV2ZXIgdGhlcmUgd2FzIGEgdGVybSBsaWtlIGl0Li4uLmp1c3Qgd2hhdCB0aGUgZG9jdG9yIG9yZGVyZWQgYXMgZmFyIGFzIGhpcyByb2xlIGluIHRoZSBtb3ZpZSB3YXMgY29uY2VybmVkLi4uPGJyIC8+PGJyIC8+cmFqa3VtYXIgc2FudG9zaGkgaSBkb24ndCBrbm93IHdoeSwgbmV2ZXIgdHJpZWQgaGlzIGhhbmQgYXQgY29tZWR5IGFnYWluLi4uLmhlIGRpcmVjdGVkIGdyZWF0IHZlbnR1cmVzIGxpa2UgVGhlIExlZ2VuZCBvZiBCaGFnYXQgU2luZ2ggYW5kIGtoYWtlZSBidXQgY291bGQgbm90IHJlY3JlYXRlIHRoZSBtYWdpYyBvZiBhbmRheiBhcG5hIGFwbmEuLi4uPGJyIC8+PGJyIC8+aSBkb24ndCBjYXJlIHdoeSB0aGlzIGZpbG0gYm9tYmVkIGF0IHRoZSBib3ggb2ZmaWNlLi4uLnRob3VnaCBpIGZlZWwgc2FkIHRoYXQgYSBmaWxtIGxpa2UgImh1bSBhYXBrZSBoYWluIGthdW4iIHdhcyB0aGUgcmVhc29uIGZvciBpdCdzIGZhaWx1cmUuLi4uLi4gYXMgb2Ygbm93IGkgaG9wZSB0aGUgcnVtb3JzIGJlY29tZSB0cnVlLi4uLi50aGVyZSdsbCBiZSAiYW5kYXogYXBuYSBhcG5hLTIiIHRoZXkgc2F5Li4uLi4uLndlIGFzIHRoZSBhdWRpZW5jZSBjYW4gb25seSBzYXkgQU1FTiEhISEhKQAAAAAAAPA/CsMGCOkDEOkDIrEGdmVyeSBmZXcgY2hlc3MgbW92aWVzIGhhdmUgYmVlbiBtYWRlIG92ZXIgdGhlIGxhc3QgY291cGxlIG9mIHllYXJzICxidXQgdGhpcyBvbmUgaXMgbW9yZSB0aGFuIGp1c3QgYSBjaGVzcyBtb3ZpZSBpdHMgYSBzdG9yeSBhYm91dCB0aGUgbmVlZCB0byBiZSBsb3ZlZCBhbmQgdGhlIG5lZWQgdG8gd2luIGl0LEpvaG4gVG90dXJybyBwbGF5cyBhIHBzeWNob2xvZ2ljYWxseSBjaGFsbGVuZ2VkIG1hbiAsbm90aGluZyBtYXR0ZXJzIHRvIGhpbSBhY2NlcHQgNjQgc3F1YXJlcyBhbmQgMzIgcGllY2VzICx0aGUgZ2FtZSB2YWxpZGF0ZXMgaGltIGFzIGEgcGVyc29uICx3aGVuIGhlIGxvb3NlcyBhIGdhbWUgaGUgbG9vc2VzIHRoZSBvbmUgdGhpbmcgdGhhdCBtYWtlcyBzZW5zZSB0byBoaW0gYW5kIEpvaG4gVG9ydHVycm8gZXhwcmVzc2VzIHRoaXMgaW4gYSBiZWF1dGlmdWwgZmFzaGlvbixldmVuIHRoZSBsb3ZlIG9mIGEgd29tYW4gd2FzIG5vdCBlbm91Z2ggdG8gc2F2ZSBoaW0gZnJvbSBoaXMgc2FkIGV4aXN0ZW5jZS5JdCBtYWtlcyB5b3Ugd29uZGVyIGlmIHRoZXJlIG90aGVyIEx1em9uJ3Mgb3V0IHRoZXJlIHdobyBvYnNlc3MgYWJvdXQgdGhlIGdhbWUsaSBhbSBzdXJlIHRoZXkgYXJlLGlmIHlvdSBhcmUgYSBjaGVzcyBlbnRodXNpYXN0IGl0IHdvbid0IGh1cnQgdG8gd2F0Y2ggaXQuSXRzIGFuIGludGVsbGlnZW50IHBpZWNlIG9mIHdvcmsgbGFpZCBvdXQgcHJvcGVybHkgYW5kIGV4ZWN1dGVkIHdlbGwsaXQgYWNoaWV2ZXMgaXRzIG9iamVjdGl2ZXMsdW5mb3J0dW5hdGVseSBpIGRvdWJ0IGlmIHRoZXJlIHdpbGwgYmUgc2VxdWVsLikAAAAAAADwPwrkAQjqAxDqAyLSAXZlcnkgYmFkbHkgbWFkZSBmaWxtLCB0aGUgYWN0aW9uL3Zpb2xlbmNlIHNjZW5lcyBhcmUgcmlkaWN1bG91cy48YnIgLz48YnIgLz4xIHBvaW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgQnVydG9uIGFuZCBNYXN0cm9pYW5uaSArIDEgcG9pbnQgZm9yIHRoZSByZWFsIHRyYWdpYyBldmVudCBvZiB0aGUgbWFzc2FjcmUgb2YgdGhlIGlubm9jZW50IGl0YWxpYW5zOiAyLzEwLikAAAAAAADwPwqdBQjrAxDrAyKLBXV0dGVybHkgdXNlbGVzcy4uLiBoYXZpbmcgYmVlbiB0aGVyZSwgZG9uZSB0aGF0IHdpdGggdGhlIHN1YmplY3QgbWF0dGVyIGkgaGF2ZSB0byBzYXkgdGhpcyBjYXB0dXJlcyB0aGUgY2x1YmJpbmcgYXRtb3NwaGVyZSBpbiBhYnNvbHV0ZWx5IG5vIHJlc3BlY3QuIEl0IG1heSBoYXZlIGRvbmUgc28gaGFkIHRoZSBjaGFyYWN0ZXJzIG5vdCBqdXN0IGJlZW4gbW91dGhwaWVjZXMgZm9yIGluY3JlZGlibHkgZGlyZSwgdW5yZWFsaXN0aWMgZHJpdmVsLiBTbyBtYW55IGNyaW5nZS13b3J0aHkgc2NlbmVzIHRoYXQgd291bGQgcHV0IFRoZSBPZmZpY2UgdG8gc2hhbWUgKG5vdCBhIGNvbXBsaW1lbnQgdG8gdGhpcyBmaWxtKS4gSXQgYWxzbyBtYXkgaGF2ZSBoZWxwZWQgdG8gaGF2ZSBzb21lIHNlbWJsYW5jZSBvZiBhIHN0b3J5LCBhIHBvaW50LCBhIG1lc3NhZ2UsIGEgY29tbWVudGFyeSwgYW55dGhpbmcuIFNlcmlvdXNseSwgS2V2aW4gJiBQZXJyeSBHbyBMYXJnZSBoYWQgbW9yZSB0byBzYXkgb24gdGhlIHN1YmplY3QgdGhhbiB0aGlzIGZpbG0gKHRlcm0gdXNlZCB2ZXJ5IGxvb3NlbHkgaW4gdGhpcyBjYXNlKS4gVGhlcmUgc2hvdWxkIGJlIG1pbnVzIG51bWJlcnMgcmVzZXJ2ZWQgZm9yIGZpbG1zIGxpa2UgdGhpcy4gLTEwIChleHRyYSB0dXJkKSkAAAAAAADwPwqOAwjsAxDsAyL8AnVzdWFsbHkgYSBtb3ZpZSB0aGF0IHN0YXJ0cyBiYWQgc3RheXMgYmFkIGluIGEgbW9ub3RvbmljYWxseSBkZXNjZW5kaW5nIHBhdHRlcm4uIFRoaXMgYmFkIG1vdmllIHN0YXJ0ZWQgdG8gc2VlbSB0byBnZXQgYmV0dGVyIGJlZm9yZSBnb2luZyBpbnRvIGEgc3RlZXAgZGl2ZS4gVGhlIGFjdGluZywgc2F2ZSBmb3IgdGhlIG1hbGUgYW50YWdvbmlzdCwgd2FzIGF3ZnVsLiBUaGUgcGxvdCB3YXMgZXNzZW50aWFsbHkgYSBzZXQgdXAgZm9yIHRoZSBmaW5hbCBtYWluIHNjZW5lLCB3aGljaCBpcyBwcm9iYWJseSBnb29kIGFzIHBlcmZvcm1hbmNlIGFydCwgYnV0IGl0IHdhcyB3YXN0ZWQgaW4gdGhpcyBtb3ZpZS4gTm90IHN1cmUgd2h5IHRoaXMgbW92aWUgd2FzIG1hZGUuKQAAAAAAAPA/Cv0ECO0DEO0DIusEdXN1YWxseSBJIHN1cHBvcnQgaW5kZXBlbmRlbnQgYXJ0IGFuZCBpIHRyeSB0byBiZSB2ZXJ5IGNvbXByZWhlbnNpdmUgYW5kIHRvbGVyYW50Li4uaSB0ZW5kIHRvIHN1cHBvcnQgZXZlcnlib2R5LCBiZWNhdXNlIHRoZWlyIGVmZm9ydHMgYXJlIHdvcnRoLi4uPGJyIC8+PGJyIC8+YnV0IHRoaXMgbW92aWUganVzdCBtb3ZlcyBhd2F5IGZyb20gYWxsIGNvbXByZWhlbnNpb24gYW5kIHRvbGVyYW5jZSBsaW1pdHMhPGJyIC8+PGJyIC8+aW1hZ2luZSB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjo8YnIgLz48YnIgLz4xLiB0aGluayBhYm91dCB0aGUgUkVBTExZIFdPUlNUIGhvcnJvciBtb3ZpZSB5b3UgaGF2ZSBldmVyIHNlZW4gaW4geW91ciBsaWZlIHNvIGZhci48YnIgLz48YnIgLz4yLiB0aGluayBhYm91dCBzb21lIGdyZWF0LCBhdHRyYWN0aXZlIEFSVCBmb3IgdGhhdCBtb3ZpZSdzIERWRCBib3guLi5hbmQgYSBwcm9taXNpbmcgcGxvdC4uLjxiciAvPjxiciAvPjMuIHZvaWzDoCEgeW91IGdvdCBaT01CSUUgTkFUSU9OLjxiciAvPjxiciAvPnNlZSBpdCBvbmx5IGlmIHlvdSByZWFsbHkgZG9uJ3QgaGF2ZSBhbnl0aGluZyBlbHNlIGJldHRlciB0byBkby4gQU5ZVEhJTkcgaXMgYmV0dGVyLikAAAAAAADwPwq8BgjuAxDuAyKqBnVyZ2ghIDMgdGhpbmdzIGEgbW92aWUgbmVlZHM6IGEgZ29vZCBzY3JpcHQsIGEgZ29vZCBwbG90IGFuZCBnb29kIGNhc3RpbmcuIGkgd2F0Y2hlZCB0aGlzIG1vdmllIGV4cGVjdGluZyBpdCB0byBiZSBoaWxhcmlvdXNseSB0ZXJyaWJsZSBhbmQgd2FzIHVuZm9ydHVuYXRlbHkgZGlzYXBwb2ludGVkIHdoZW4gaXQgd2FzIGp1c3QgcGxhaW4gdGVycmlibGUuIEkgbG9zdCB0aGUgd2lsbCB0byBsaXZlIGhhbGZ3YXkgdGhyb3VnaC4gVGhlIG9ubHkgdGhpbmcgd2hpY2ggc3RvcHBlZCBtZSBmcm9tIHN0YWJiaW5nIG15IGV5ZXMgb3V0IHdpdGggYSBmb3JrIHdhcyBSb3NlIEJ5cm5lICh3aG8gd2FzIHRoZSByZWFzb24gZm9yIG1lIHdhdGNoaW5nIGl0IGluIHRoZSBmaXJzdCBwbGFjZSkuIFNoZSBkaWQgYSBnb29kIGpvYiBhcyBSYXN0dXMgYW5kIGhlciBhcHBlYXJhbmNlIGhhc24ndCBjaGFuZ2VkIG11Y2ggc2luY2Ugc2hlIHdhcyAxMy4gaXQgd2FzIGEgZmFudGFzdGljIGZpcnN0IGVmZm9ydCBpbiBhIG1vdmllLiB0aGUgZG9nIHdhcyBhbHNvIHZlcnkgZ29vZC4gYm90aCBkaWQgYSBncmVhdCBqb2Igd2l0aCBzdWNoIGF3ZnVsIG1hdGVyaWFsLiBTYW5kcmEgQmVybmhhcmQgaSB0aGluayB3YXMgdGhlIGJpZ2dlc3QgbWlzdGFrZSBvZiB0aGUgbW92aWUuIHNoZSB3YXMgY29tcGxldGVseSBtaXNjYXN0LCBhbmQgaSBkb24ndCB0aGluayBzaGUgZXZlciBxdWl0ZSBnb3QgdGhlIGNoYXJhY3Rlci48YnIgLz48YnIgLz5JIGdpdmUgdGhlIG1vdmllIDIgb3V0IG9mIDEwIC0gYW5kIHRoYXRzIG9ubHkgYmVjYXVzZSBvZiBSb3NlLikAAAAAAADwPwqPGQjvAxDvAyL9GHVwZGF0ZWQgSmFudWFyeSAxc3QsIDIwMDY8YnIgLz48YnIgLz5QYXJzaWZhbCBpcyBvbmUgb2YgbXkgdHdvIGZhdm9yaXRlIFdhZ25lciBvcGVyYXMgb3IgbXVzaWMgZHJhbWFzLCB0byBiZSBtb3JlIGFjY3VyYXRlLCAoTWVpc3RlcnNpbmdlciBpcyB0aGUgb3RoZXIuKSB0aG91Z2ggaXQncyBoYXJkIHRvIGltYWdpbmUgaXQgYXMgdGhlICJ0b3Agb2YgYW55b25lJ3MgcG9wcyIuIFRoZSBsaWJyZXR0bywgYnkgdGhlIGNvbXBvc2VyIGFzIHVzdWFsLCBpcyBhIG11ZGRsZSBvZiByZWxpZ2lvbiwgcGFnYW5pc20sIGVyb3RpY2lzbSwgYW5kIHBvc3NpYmx5IGV2ZW4gaG9tby1lcm90aWNpc20sIGFuZCBpdHMgbGVuZ3RoIG1heSBtYWtlIGl0IHNlZW0gdG8gdGhlIGF1ZGllbmNlIGxpa2UgaGVhcmluZyBwYWludCBkcnkuPGJyIC8+PGJyIC8+V2FnbmVyLCBiZWluZyBhIGZhbW91cyBhbnRpLVNlbWl0ZSwgKEtsaW5nc29yIG1heSBiZSBvbmUgb2YgaGlzIHN1cnJvZ2F0ZSBKZXdpc2ggdmlsbGFpbnMuKSBuYXR1cmFsbHkgZW50cnVzdGVkIHRoZSBwcmVtaWVyZSB0byBhbiB1bmNvbnZlcnRlZCAobm90IGZvciB3YW50IG9mIFJXJ3MgdHJ5aW5nISkgSGVybWFubiBMZXZpLCB3aG8gd2FzIGhpcyBmYXZvcml0ZSBjb25kdWN0b3IhIChHbyBmaWd1cmUhKSBLdW5kcnksIGEgbW9zdCBtaXhlZC11cC1nYWwgYW5kIGFub3RoZXIgbGlrZWx5IEpld2lzaCBzdXJyb2dhdGUsIGlzIGJvdGggdmlsbGFpbm91cyBvciBiZW5ldm9sZW50LCBkZXBlbmRpbmcgb24gdGhlIHNjZW5lLjxiciAvPjxiciAvPkNvbnNpZGVyaW5nIHRoYXQgbWFueSB2aWRlbyB2ZXJzaW9ucyBvZiBQYXJzaWZhbCBzZWVtIG9uIHRoZSBzdG9kZ3kgc2lkZSwgdGhpcyBmaWxtIG9mIHRoZSBvcGVyYSBpcywgaW4gY29tcGFyaXNvbiwgYSBicmVhdGggb2YgZnJlc2ggYWlyLiBIYW5zLUrDvHJnZW4gU3liZXJiZXJnLCB0aGUgZGlyZWN0b3IsIGhhcyBicm91Z2h0IGNvbnNpZGVyYWJsZSBpbWFnaW5hdGlvbiB0byBpdCBidXQgaXQncyBoYXJkIHRvIGtub3cgd2h5IGhlIG1hZGUgc29tZSBvZiBoaXMgY2hvaWNlcy4gRm9yIGV4YW1wbGU6IHRoZSBub3RvcmlvdXMgZHVhbCBQYXJzaWZhbHMgKG9mIGVhY2ggZ2VuZGVyISksIHRoZSBwdXBwZXRzLCB0aGUgZGVhdGgtbWFzay1vZi1XYWduZXIgc2V0IGFuZCB2YXJpb3VzIGRvbGxzIGFuZCBzeW1ib2xzIHN1Y2ggYXMgdGhlIE5hemkgc3dhc3Rpa2EgaW4gb25lIG9mIHRoZSB0cmF2ZWxpbmcgc2NlbmVzLiAoSWYgSSByZW1lbWJlciwgdGhlICJyZWFsIiBFbmdlbGJlcnQgSHVtcGVyZGluY2sgd3JvdGUgdGhlIGFjdHVhbCBtdXNpYyB0byBwYWQgb3V0IHRoZSBzY2VuZSBjaGFuZ2VzLikgVGhvdWdoIFdhZ25lciBoaW1zZWxmIGRpZWQgbXVjaCB0b28gZWFybHkgdG8gYmUgYW4gYWN0dWFsIE5hemksIG1hbnkgb2YgaGlzIGRlc2NlbmRhbnRzIChBcyB3ZWxsIGFzIGhpcyBzZWNvbmQgd2lmZSBDb3NpbWEuKSB3ZXJlIGF0IGxlYXN0IGZlbGxvdy10cmF2ZWxlcnMsIGluY2x1ZGluZyB0aGVpciBncmFuZHNvbiBXb2xmZ2FuZyBXYWduZXIgd2hvIHN0aWxsIHJ1bnMgdGhlIEJheXJldXRoIEZlc3RpdmFsIGF0IGFuIGFkdmFuY2VkIGFnZS4gSW4gZmFjdCwgV29sZmdhbmcncyBzb24gR290dGZyaWVkIFdhZ25lciwgaW4gY29tcGxldGUgb3Bwb3NpdGlvbiB0byBoaXMgZmF0aGVyLCBoYXMgdHJpZWQgdG8gY29tZSB0byB0ZXJtcyBob25lc3RseSB3aXRoIGhpcyBncmVhdC1ncmFuZGZhdGhlci48YnIgLz48YnIgLz5TeWJlcmJlcmcsIHRvbywgc2VlbXMgcG9saXRpY2FsbHkgYW1iaWd1b3VzIGZyb20gd2hhdCBJJ3ZlIHJlYWQuIEluIDE5NzcsIGhlIG1hZGUgYSB3ZWxsLWtub3duIGZpbG0gb24gSGl0bGVyLCAiSGl0bGVyOiBlaW4gRmlsbSBhdXMgRGV1dHNjaGxhbmQiIChTb21ldGltZXMgY2FsbGVkICJPdXIgSGl0bGVyIiBpbiBFbmdsaXNoLikuIFNpbmNlIGl0IGxhc3RzIGFsbCBvZiA4IGhvdXJzIGFuZCBoYXNuJ3QgYmVlbiB3aWRlbHkgZGlzdHJpYnV0ZWQsIG1vc3QgcGVvcGxlIGhhdmUgbm90IHNlZW4gaXQgKGluY2x1ZGluZyBteXNlbGYuKS48YnIgLz48YnIgLz5Bcm1pbiBKb3JkYW4sIHRoZSBjb25kdWN0b3Igb2YgdGhlIGF1ZGlvIENEIG9uIHdoaWNoIHRoaXMgZmlsbSBpcyBiYXNlZCwgcGxheXMgQW1mb3J0YXMgKHN1bmcgYnkgV29sZmdhbmcgU2Now7ZuZSkgRWRpdGggQ2xldmVyIChZdm9ubmUgTWludG9uKSBwbGF5cyBLdW5kcnksIE1pY2hhZWwgS3V0dGVyIGFuZCBLYXJpbiBLcmljayBwbGF5IHRoZSBkdWFsIFBhcnNpZmFscyAoQm90aCBzdW5nIGJ5IFJlaW5lciBHb2xkYmVyZy4hKSBhbmQgUm9iZXJ0IExsb3lkIGFuZCBBYWdlIEhhdWdsYW5kIGJvdGggcGxheSBhbmQgc2luZyBHdXJuZW1hbnogYW5kIEtsaW5nc29yLjxiciAvPjxiciAvPlRob3VnaCB0aGUgb3BlcmEgdGFrZXMgcGxhY2Ugb3ZlciBhIGxvbmcgcGVyaW9kIG9mIHRpbWUgYW5kIGFsbCAoZXhjZXB0IEt1bmRyeT8pIGhhdmUgYmVlbiBkZXNjcmliZWQgYXMgaGF2aW5nIGFnZWQgY29uc2lkZXJhYmx5IGJldHdlZW4gQWN0cyAyIGFuZCAzLCBubyBvbmUgbG9va3MgYSBkYXkgb2xkZXIgYnkgdGhlIGVuZCBvZiB0aGUgb3BlcmEuIChUaGUgbWFnaWMgb2YgdGhlIEdyYWlsPyBJbiB0aGlzIG9wZXJhIHRoZSBHcmFpbCBpcyB0aGUgY3VwIGZyb20gd2hpY2ggSmVzdXMgZHJhbmsgYXQgdGhlIExhc3QgU3VwcGVyIGFuZCBub3QgTWFyeSBNYWdkYWxlbmUgYXMgaW4gbW9yZSByZWNlbnQgdGltZXMsIGFuIGlkZWEgSSBmaW5kIHByZXBvc3Rlcm91cyEpLjxiciAvPjxiciAvPlRoZSBjb25kdWN0aW5nIGFuZCBzaW5naW5nIGFyZSBhbGwgcXVpdGUgc2VydmljZWFibGUgYW5kIHRoZSBEVkQgc2VlbXMgdG8gaGF2ZSBpbXByb3ZlZCB0aGUgc291bmQsIGlmIG5vdCB0aGUgcGljdHVyZSwgdG8gYSBncmVhdCBleHRlbnQuIChZZXMsIEkgYWdyZWUgdGhhdCAiS25hJ3MiIGFwcHJvYWNoIGlzIHN1cGVyaW9yLCBldmVuIG9uIHRoZSBzZWNvbmQsIHN0ZXJlbywgdmVyc2lvbiBidXQgaGUgaXMgcHJvYmFibHkgc3VwZXJpb3IgdG8gYWxsIHJlY29yZGVkIHZlcnNpb25zIG9uIHRoZSB3aG9sZS4pPGJyIC8+PGJyIC8+Tm90IGEgUGFyc2lmYWwgZm9yIGFsbCBXYWduZXJpdGVzIGJ1dCBJIHRoaW5rIGl0IHdvcmtzIHF1aXRlIHdlbGwgYXMgYSBmaWxtZWQgb3BlcmEuKQAAAAAAAPA/CqgNCPADEPADIpYNdHlwaWNhbGx5LCBhIG1vdmllIGNhbiBoYXZlIGZhY3RvcnMgbGlrZSAiYXJvdXNpbmciLCAiZ29vZCBmZWVsIiwgInNlbnNlIG9mIHB1cnBvc2UiLCAicGxvdCIsIGV0Yy4gVGhlcmUncyBhbHdheXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIHRha2VuIG91dCBvZiBtb3ZpZXMsIGl0cyBqdXN0IGEgbWF0dGVyIG9mIGhvdyBjb21wZWxsaW5nIHRoZSByZWFzb24gaXMsIGZvciBtZSB0byBvd24gaXQgaW4gbXkgY29sbGVjdGlvbi4gJ1RhbGUgb2YgdHdvIHNpc3RlcnMiLCBhcyB0aGV5IGNhbGwgaXQgd2hlbiBpdCB3YXMgcmVsZWFzZWQgaW4gbXkgY291bnRyeSwgaGFzIHRyZW1lbmRvdXMgZmVlbCBhbmQgYW4gZXZlbnR1YWxseSAobW9zdGx5KSBzZWxmLWV4cGxhaW5pbmcgcGxvdC4gaSBsb3ZlIGhvcnJvciBtb3ZpZXMgdGhhdCByZXZvbHZlIGFyb3VuZCBhIGhvdXNlLiB0aXRsZXMgdGhhdCBjb21lIHRvIG1pbmQgYXJlICJUaGUgT3RoZXJzIiwgIlRoZSBIYXVudGluZyIsICJUaGUgaGF1bnRpbmcgb2YgSGVsbCBIb3VzZSIuIHRoaXMgbW92aWUgd2lsbCBiZSBhIGFub3RoZXIgZ3JlYXQgZXhhbXBsZSB0aGF0IGkgd2lsbCByZW1lbWJlci4gdGhlIG1vdmllIGhhZCBleHRyZW1lbHkgcmljaCBjb2xvdXIsIGluIHRoZSB3YXkgdGhlIGhvdXNlIHdhcyBkZWNvcmF0ZWQsIGluIHRoZSBjbG90aGVzIHRoYXQgdGhlIGNoYXJhY3RlcnMgd29yZSwgaW4gdGhlIG9wZW4tc2tpZWQgZGF5bGlnaHQgc2NlbmVzIHRoYXQgaXMgaW4gY29udHJhc3QgdG8gbW9zdCBob3Jyb3IgbW92aWVzLCB3aGljaCwgdHlwaWNhbGx5IG1ha2VzIHVzZSBvZiBkZXNhdHVyYXRlZCB0b25lcyBhbmQgZ2xvb215IGVudmlyb25zICh0aGluayBIb25vZ3VyYWkgbWl6dSBubyBzb2tvIGthcmEsIERhcmsgV2F0ZXIsIHdoaWNoIGlzIGFub3RoZXIgc2hvdyBpIGxpa2UpIHRoYXQgZ2l2ZXMgdGhpcyBmaWxtIGEgc2Vuc2Ugb2YgYWVzdGhldGljcyBhbmQgam95IHdoZW4gaXQgd2Fzbid0IGluIGl0cywgbW9yZSwgZ3JpcHBpbmcgbW9tZW50cy4gdGhlIGNoYXJhY3RlcnMgYXJlIGV4dHJlbWVseSBiZWxpZXZhYmxlLiB0aGlzIG1heSBiZSBwYXJ0bHkgYXR0cmlidXRlZCB0byB0aGUgZmFtaWxpYXIgc2V0dGluZyBvZiB0aGlzIG1vdmllLiBtYXliZSBkb21lc3RpYyBpc3N1ZXMgYXJlIGVhc2llciBmb3IgYm90aCBteXNlbGYgYXMgd2VsbCBhcyB0aGUgYWN0b3JzIHRvIGlkZW50aWZ5IHdpdGgsIGFuZCB0aGUgYWN0b3JzIGJlY29tZSB0aGVpciBjaGFyYWN0ZXJzIHdpdGggZXhjZXB0aW9uYWwgZmluZXNzZS4gdGhlIGRpcmVjdG9yIHRveXMgd2l0aCB0aW1lbGluZXMsIGluIG9yZGVyIHRvIGdpdmUgdGhlIGF1ZGllbmNlIHRoZSBzdG9yeSBpbiBiaXRzIGFuZCBwaWVjZXMsIGFsbG93aW5nIHRoZW0gdG8gY29tZSB0byB0aGVpciBvd24gdGVybXMgb2YgaW50ZXJwcmV0YXRpb24sIGluc3RlYWQgb2YgcHJlc2VudGluZyBldmVyeXRoaW5nIGluIGEgbGluZWFyIGZhc2hpb24uIHRoaXMgaXMgYSBwb3NpdGl2ZSBhc3BlY3Qgb2YgdGhpcyBmaWxtLCBpbiBteSBvcGluaW9uLCBhbmQsIHBlcmhhcHMsIGl0IGlzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbW92aWUgdGhhdCBhbGxvd3MgbWUgdG8gZmluZCBpdCBlbmpveWFibGUuIGkgd291bGQgZGVmaW5pdGVseSBsb29rIG91dCBmb3IgdGhpcyBvbiBEVkQuKQAAAAAAAPA/CogCCPEDEPEDIvYBdHdlbnR5IHllYXJzIGxhdGVyLCB0aGlzIG1vdmllIHN0aWxsIHJlbWFpbnMgYXMgZW50ZXJ0YWluaW5nIGFzIHdoZW4geW91IGZpcnN0IHdhdGNoZWQgaXQuIEluIGEgbW92aWUgbWFya2V0IG92ZXJydW4gYnkgdG9pbGV0IGh1bW9yLCBncmFwaGljIHZpb2xlbmNlIGFuZCBmb3VsIGxhbmd1YWdlLCBpdCdzIHJlZnJlc2hpbmcgdG8gYmUgZnVsbHkgZW50ZXJ0YWluZWQgZm9yIHR3byBob3VycyBieSBzdWNoIGEgY2xlYW4gbW92aWUuKQAAAAAAAPA/CocJCPIDEPIDIvUIdHVybmVkIG91dCB0byBiZSBhbm90aGVyIGZhaWxlZCBhdHRlbXB0IGJ5IHRoZSBsYXVnaGFibGUgc2NpLWZpIGNoYW5uZWwuIGkgYW0gbm90IHN1cmUgd2hvIHdyb3RlIHRoZSBzY3JpcHQsIGFuZCBpbnRlcnByZXRlZCB0aGUgcG9lbSwgYnV0IGkgYW0gc3VyZSBpdCB3YXMgYnkgc29tZSAxNyB5ZWFyIG9sZCB0ZWVuIHdobyB0aG91Z2h0IGl0IHdvdWxkIGJlIGF3ZXNvbWUgdG8gYSBoYXZlIGEgc2NvcGVkIGNyb3NzYm93IGluIHRoZSBtb3ZpZS4gQUFBQUFBQUghIHdoZW4gaSBzYXcgdGhhdCBwYXJ0LCBJIGxvc3QgYWxsIGhvcGUuIFRoZW4uLi50aGV5IHNldCBvZmYgZm9yIGhlb3JvdCBpbiBhIHdoYXQgbG9va3MgdG8gYmUgdGhlIHNoaXAgdGhhdCBDaHJpc3RvcGhlciBDb2x1bWJ1cyBzYWlsZWQgaW4hIHdoZW4gdGhleSByZWFjaCBIZW9yb3QsICh3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBhIE5vcnNlIG1lYWQgaGFsbCkgdGhlIHNjaS1maSBncm91cCBvZiBpZGlvdHMgZGVjaWRlZCB0byBtYWtlIGhlb3JvdCBsb29rIGxpa2UgYSBiaWcgc3RvbmUgY2FzdGxlLiB3aGVuIGkgc2F3IHRoYXQgcGFydC4uIGkgd2FudGVkIHRvIHNjcmVhbS4gaSByZWFsbHkgd2FudGVkIHRoaXMgbW92aWUgdG8gYmUgZ29vZCwgYnV0IHNjaS1maSBoYXMgeWV0IHRvIHByb2R1Y2UgYSBnb29kIG1vdmllLCBzbyBpIGRvbid0IGtub3cgd2h5IGkgZ290IG15IGhvcGVzIHVwLiBPaC4uYW5kIEdyZW5kZWwgYW5kIGhpcyBtb3RoZXIsIGFyZSBzdHVwaWQgYWxzby4gKHRoaXMgY29tbWVudCBpcyBvZmYgdG9waWMgYWJvdXQgIkdyZW5kZWwiKUlmIGFueW9uZSBmcm9tIHRoZSBzY2ktZmkgY2hhbm5lbCBpcyByZWFkaW5nIHRoaXMuLmhlcmUgaXMgc29tZSBnb29kIGFkdmljZS4gTk9UIEVWRVJZIE1PVklFIFlPVSBNQUtFIEhBUyBUTyBCRSBBQk9VVCBBIEJJRyBNT05TVEVSIFRIQVQgQ0FOIFJJUCBQRU9QTEUgSU4gSEFMRiwgVEhBVFMgTk9UIFdIQVQgU0NJRU5DRSBGSUNUSU9OIElTIEFCT1VUISBBTkQgQUxTTywgU1RPUCBDQVNUSU5HIExPVy1HUkFERSBBQ1RPUlMgTElLRSBTVEVQSEVOIEJBTERXSU4gVE8gQkUgSU4gWU9VUiBGSUxNUyEgSVRTIE5PVCBIRUxQSU5HIFRIRSBNT1ZJRSwgQlVUIE1BS0lORyBJVCBXT1JTRSEhISkAAAAAAADwPwqlBQjzAxDzAyKTBXRyeWluZyBoYXJkIHRvIGZpdCBpbnRvIHRoZSBzY2FyeSBzcGFjZSBjb21lZHkgZ2VucmUsIHRoaXMgZmlsbSBmYWxscyBkb3duIGluIHR3byBvZiB0aGVzZS4gSXQgZG9lcyBpbmRlZWQgdGFrZSBwbGFjZSBpbiBzcGFjZSAtIGJ1dCBpdCBpcyBuZWl0aGVyIGZ1bm55IG9yIHNjYXJ5LiBUaGUgcGxvdCBpcyBkaXNtYWwgYW5kIHRoZSBvbmUgam9rZSwgY29uY2VybmluZyB0aGUgY29tcHV0ZXIncyBpbnRlbGxlY3QsIGlzIG92ZXJwbGF5ZWQgdG8gZGVhdGguIFNheWluZyB0aGF0IFBhdWwgV2hpdHRob3JuZSBhcyBFdGhhbiwgQW5nZWxhIEJhc3NldHQgYXMgRnJhbiBhbmQgQnJhZCBEb3VyaWYgYXMgQWwgQmVydCBtYWtlIHRoZSBiZXN0IG9mIHRoZWlyIGhhbSBzY3JpcHQuIFRoZSBob21vLWVzcXVlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEV0aGFuIGFuZCBBbCBCZXJ0IGlzIGhpbnRlZCBhdCBidXQgbmV2ZXIgZXhwbG9yZWQgd2hpbHN0IHRoZSBhdHRlbXB0IGF0IHNleHVhbCB0ZW5zaW9uIGJldHdlbiBmcmFuIGFuZCByaWNrIGlzIHNvIGNydWRlIGFzIHRvIGJlIGxhdWdoYWJsZS4gQWxsIGluIGFsbCB0aGlzIGlzIGEgdHVya2V5IHRoYXQgaXMgYmVzdCBzdWl0ZWQgdG8gbGF0ZSBuaWdodCB0diwgcHJlZmVyYWJseSB3aGlsc3QgZG8gdGhlIGlyb25pbmcuKQAAAAAAAPA/CpgCCPQDEPQDIoYCdHJpZXMgdG8gYmUgZnVubnkgYW5kIGZhaWxzIG1pc2VyYWJseS4gVGhlIGFuaW1hdGlvbiBpcyBqdXN0IHRlcnJpYmxlLCBsb29rcyBsaWtlIGEgMiB5ZWFyIG9sZCB0aHJldyBpdCB0b2dldGhlciBpbiBoaXMgc2xlZXAuIFBsb3QgaXMgZHVsbCBhbmQgY2xpY2hlZC4gSUYgeW91IGhhdmUgYSB5b3VuZyBjaGlsZCwgbWF5YmUgcmVudCBpdC4gYnV0IGRvbid0IHdhc3RlIGhhcmQgZWFybmVkIG1vbmV5IHRvIHBheSB0byBzZWUgaXQuPGJyIC8+PGJyIC8+MS8xMCkAAAAAAADwPwrCBQj1AxD1AyKwBXRvdGFsbHkgZ2VuaXVzIGZpbG0gZnJvbSB0aGUgQ0tZIGNyZXcuLi4uLi4obm90IHRoZSBqYWNrYXNzIGJveXMuLi4uLmpvaG5ueSBrbm94dmlsbGUsIGNocmlzIHBvbnRpdXMsIHN0ZXZlLW8gZXRjIGFyZSBub3QgaW4gdGhpczxiciAvPjxiciAvPmZpbG0pLiBPSyBzbyBtYXliZSB0aGV5J3Igbm90IHRoZSBiZXN0IGFjdG9ycyBidXQgaXRzIG5vdCB3aGF0IHlvdSBjYWxsIGEgc2VyaW91cyBmaWxtLi4uLi4uYnV0IGhleSB0aGVyZSBoYXZpbiBmdW4gYW5kIGl0cyB0b3RhbGx5IGZ1bm55IHRvIHdhdGNoLiB3aG8gZG9lc24ndCB3YW50IHRvIHNlZSBkb24gdml0byBkcmVzc2VkIGFzIGEgcm9tYW4gZW1wZXJvciE8YnIgLz48YnIgLz5hIHRvdGFsIG11c3QgaWYgeW91IGxpa2Ugdml2YSBsYSBiYW0gb3IgQ0tZLi4uLi4uLi4uLi4uIGFuIGFtYXppbmcgc291bmR0cmFjayBwcm92aWRlZCBieSB0aGUgYWxtaWdodHkgSElNLCBDS1kgYW5kIG90aGVycy4uLi4uLiBjaGVjayBvdXQgdGhlIGV4dHJhIGZlYXR1cmVzIG9uIHRoZSBEVkQgZXNwZWNpYWxseSBCcmFuJ3MgZnJlZXN0eWxlPGJyIC8+PGJyIC8+Q2hpbmVzZSByYXAgbnVtYmVyIHR3by4uLi4uLnNlcmlvdXNseSBoaWxhcmlvdXMuLi4uLi4uLi4uLiBjaGVjayB0aGlzIGZpbG0gb3V0Li4uLi4uLi55b3Ugd29udCByZWdyZXQgaXQuLi4uLi4uLi4gMTAvMTApAAAAAAAA8D8K2QQI9gMQ9gMixwR0b3RhbCBjcmFwLjxiciAvPjxiciAvPkkgd2FzIGtpbmQgb2YgZXhjaXRlZCB0byBzZWUgdGhpcyBhcyBpdCBpcyB0aGUgb25seSBmaWxtIHZlcnNpb24gSSBoYXZlIHNlZW4gb2YgTWFuc2ZpZWxkIFBhcmsuIEkgc3VmZmVyZWQgdGhyb3VnaCB0aGUgZmlyc3QgZm91ciBlcGlzb2RlcyBidXQgd2hlbiBpdCBjYW1lIHRvIHRoZSBwcm9wb3NhbCBzY2VuZSBiZXR3ZWVuIEhlbnJ5IGFuZCBGYW5ueSBJIHNuYXBwZWQgYW5kIGhhZCB0byB0dXJuIGl0IG9mZi4gV2hvZXZlciBlbXBsb3lzIHRoaXMgU3lsdmVzdHJhIExlIFRvdXplbCBsYWR5IGhhcyBnb3QgdG8gYmUgYm90aCBibGluZCBhbmQgZGVhZiBjYXVzZSB0aGUgd29tYW4gaXMgdGhlIHdvcnN0IGFjdHJlc3MgSSd2ZSBldmVyIHNlZW4gaW4gbXkgbGlmZS4gVGhlIHdob2xlIHRoaW5nIGlzIGp1c3QgYmFkLCBiYWQsIGJhZC4gSSBkb24ndCBrbm93LiBJIGp1c3QgZG9uJ3Qga25vdyB3aHkgcGVvcGxlIHdobyB3cml0ZSBKYW5lIEF1c3RlbiBzY3JlZW5wbGF5cyBzZWVtIHRvIGJlIGluY2FwYWJsZSBvZiBnaXZpbmcgaGVyIHdvcmsgdGhlIHJlc3BlY3QgaXQgZGVzZXJ2ZXMuKQAAAAAAAPA/CtwECPcDEPcDIsoEdG9wbGluZXMgdGhpcyBvayBjb21lZHkgYWJvdXQgYW4gYWdpbmcgZmF0aGVyIChDLiBBdWJyZXkgU21pdGgpIHdobyBkZWNpZGVzIHRvIGdhdGhlciBoaXMgZ3Jvd24gY2hpbGRyZW4gZnJvbSBhcm91bmQgdGhlIHdvcmxkLiBEYXZpZXMgaXMgd29ya2luZyBhcyBhIGNob3J1cyBnaXJsIGluIE5ldyBZb3JrIHdoZW4gc2hlIGdldHMgdGhlIG5ld3MgdGhhdCAiZGFkZHkiIHdhbnRzIGhlci4gSG1tbW0sIHNvdW5kcyBmYW1pbGlhci4gRGF2aWVzJyBjb25zaWRlcmFibGUgdGFsZW50cyBhcyBhIGNvbWVkaWVubmUgc2F2ZSB0aGlzIG90aGVyd2lzZSBzby1zbyBjb21lZHkgYXMgc2hlIHVwc2V0cyB0aGUgc3RhaWQgQnJpdGlzaCBjb3VudHJ5c2lkZSB3aXRoIGhlciBicmF6ZW4gQW1lcmljYW4gcGVyc29uYWxpdHkuIE5vdCBhcyBzaGFycCBhcyBzb21lIG90aGVyIERhdmllcyBjb21lZGllcywgYnV0IHN0aWxsIHdvcnRoIGEgbG9vay4gUmF5IE1pbGxhbmQgcGxheXMgaGVyIGxvbmctbG9zdCAiYnJvdGhlci4iIERvcmlzIExsb3lkLCBFbGl6YWJldGggTXVycmF5LCBhbmQgSGFsbGl3ZWxsIEhvYmJlcyBhcmUgYWxsIGZ1biwgdG9vLikAAAAAAADwPwq2DAj4AxD4AyKkDHRvbyBwcmVkaWN0YWJsZSBmb3Igc3BvaWxlcnMsIGJ1dCBpJ2xsIG5vdCBiZSBjYWdleSBiZWxvdywgc28gZG9uJ3QgcmVhZCBpdCBpZiB5b3UgY2FyZS48YnIgLz48YnIgLz5hIGZldyBkdWxsIHNjcmlwdHdyaXRlcnMgdG9nZXRoZXIgZm9yIGhhbGYgYW4gYWZ0ZXJub29uLCBhbmQgZXZlbiB0aGVuIHRoZXkgcnVuIG91dCBvZiBpZGVhcy4gc28gbGV0J3Mgc3RhcnQgd2l0aCBhIGNyaW1pbmFsIHNvdWdodCBieSBhbGwgRnJhbmNlLi4uZG9lc24ndCBtYXR0ZXIgd2hhdCBoZSBoYXMgZG9uZSwgd2UnbGwgdGhpbmsgb2YgdGhhdCBsYXRlciAodGhleSBkb24ndCkuIHNvbWUgc2Vjb25kcyBvZiBzdXNwZW5zZSwgYnV0IG5vdCB0b28gbXVjaCwgYW5kIG5vdGhpbmcgdW5leHBlY3RlZCwgYmVjYXVzZSB0aGF0IHJlcXVpcmVzIEFydC4gaGFsZiBhbiBob3VyIG5lZWRlZCB0byBmaW5pc2ggb2ZmIHRoZSBmaWxtOyBpIGdldCBpdDogaGF2ZSB0aGVtIHJvYiBhIGpld2VsbGVyJ3MsIGFuZCB0YWtlIGEgbG90IG9mIHRpbWUgYXZvaWRpbmcgYWxhcm1zIGV0Yy47IGV2ZXJ5Ym9keSByb2JzIGpld2VsbGVycyBpbiBmaWxtcyBqdXN0IGlrZSB0aGlzLCBpdCdzIGJvdW5kIHRvIHdvcmsgKGl0IGRvZXNuJ3QpLiBubyBodW1vdXIsIG5vIGNoYXJhY3RlciAob2ssIHl2ZXMgbW9udGFuZCBkb2VzIGdldCB0byBoYW0gaXQgYSB3ZWVueSBiaXQpIGFuZCBoYXZlIGV2ZXJ5b25lIHNwZWFrIGluIGEgcXVpZXQgZGVhZHBhbiB2b2ljZSB0aGF0IGlzIHN1cHBvc2VkIHRvIG1ha2Ugb25lIHRoaW5rIG9mIG5vaXIsIGJ1dCBtZXJlbHkgbWFrZXMgdGhlIGFjdG9ycyBzb3VuZCBkZXByZXNzZWQuIGlmIHRoZXkgYXJlIHNpbGVudCwgaXQnbGwgbWFrZSB0aGVtIHNlZW0gZ3JpbW1lciAtIGJ1dCBhbHNvIHNhdmUgdXMgd3JpdGluZyB0aGVpciBsaW5lcy4gd2UnZCBiZXR0ZXIgYWRkIHNvbWV0aGluZyBmb3IgdGhlIHN0YXkgYXQgaG9tZSB3b21lbiB3aG8gYXJlIGdvaW5nIHRvIHdhdGNoIHRoaXMgc3R1ZmYsIHNvIGxldCdzIGhhdmUgc29tZXRoaW5nIHRvIG1ha2UgdGhlbSBlbXBhdGhpc2Ugd2l0aCBodWJieSAod2UgZm9yZ290IHRvIHB1dCBhbnkgd29tZW4gaW4gdGhlIGZpbG0pLiBnb3QgaXQ6IGEgc29uIG9uIChnYXNwKSBtYXJpanVhbmEgLSBvaCwgYW5kIGhhdmUgaGltIGF0dGVtcHQgc3VpY2lkZSBmb3Igbm8gcGFydGljdWxhciByZWFzb24gKHNoYW1lPyBoaXMgZGFkJ3MgYSBtYWZpYSBib3NzIGZvciBjcnlpbmcgb3V0IGxvdWQsIGJ1dCB0aGUgYXVkaWVuY2Ugd2lsbCBmZWVsIGhpcyBmYXRoZXJseSBjYXJlLCBhbmQgaWYgbm90LCBzb2QgdGhlbSkuIG9oLCB0aGUgY3Jvb2tlZCBjb3Agd2FzIGEgY2xhc3NtYXRlIG9mIHRoZSBndXkgd2hvIGdldHMgaGltIGluIHRoZSBlbmQ7IHdyZW5jaGluZywgZWg/IGxldCdzIGhhdmUgdGhlbSBhbGwgZGllIGF0IHRoZSBlbmQsIG9yIHdlJ2xsIG5ldmVyIGZpbmlzaCB0aGlzIHN0dWZmLiBpcyBpdCBpbiB0aGUgY2FuPyByaWdodCwgdGhhdCdzIG92ZXIgd2l0aCB0aGVuLCB0aGFuayBnb2QuIHdobydsbCB3ZSBnZXQgZm9yIGRpcmVjdG9yPykAAAAAAADwPwqYCwj5AxD5AyKGC3RvbyBiYWQgdGhpcyBtb3ZpZSBpc24ndC4gV2hpbGUgIk5lbWVzaXMgR2FtZSIgaXMgbWlsZGx5IGVudGVydGFpbmluZywgSSBmb3VuZCBpdCBoYXJkIHRvIHN1c3BlbmQgbXkgZGlzYmVsaWVmIHRoZSB3aG9sZSBsZW5ndGggb2YgdGhlIG1vdmllLCBlc3BlY2lhbGx5IHRoZSBzaXR1YXRpb25zIHRoYXQgU2FyYSB3YXMgcHV0dGluZyBoZXJzZWxmIGludG8uIEFyZSB3ZSBzdXBwb3NlZCB0byBiZWxpZXZlIHRoYXQ6PGJyIC8+PGJyIC8+MSkgdGhpcyBob3QgY2hpY2sgaXMgZ29pbmcgdG8gZ28gc2x1bW1pbmcgdW5hcm1lZCBhcm91bmQgYWJhbmRvbmVkIGJ1aWxkaW5ncyBhbmQgZGFyayBzdWJ3YXkgdHVubmVscyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBuaWdodCBqdXN0IHRvIHNvbHZlIHNvbWUgcmlkZGxlcz88YnIgLz48YnIgLz4yKSB0aGUgcHJvdGFnb25pc3RzIGFyZSBzdXBwb3NlZGx5IHN1Y2ggZXhwZXJ0cyB0aGF0IHRoZXkgcGxheSByaWRkbGUgZ2FtZXMgZm9yIGZ1biwgYnV0IGRvbid0IHB1dCB0aGUgd2hvbGUgIkkgTmV2ZXIgU2lubmVkIiByaWRkbGUgdG9nZXRoZXIgdW50aWwgdGhlIHZlcnkgZW5kLi4uYW5kIHRoZW4uLi5hbmQgdGhlbi4uLmdldCB0aGlzLi4uc2hlIGhhcyB0byBkbyB0aGUgd2hvbGUgbWlycm9yIHRoaW5nIHRvIGZpbmFsbHkgcHV0IHRoZSBwaWVjZXMgdG9nZXRoZXI/PyBJIGtub3cgaXQgd2FzIHRoZSBmaWxtbWFrZXIncyBkZXZpY2UgdG8gc2hvdyB0aGUgYXVkaWVuY2Ugd2hhdCB3YXMgZ29pbmcgb24sIGJ1dCBkbyB0aGV5IHJlYWxseSB0aGluayB3ZSdyZSB0aGF0IHN0dXBpZD88YnIgLz48YnIgLz4zKSB3aGVuIFZlcm4gYW5kIFNhcmEgZ28gdG8gdGhlIENoZXogTSB0byBxdWVzdGlvbiB0aGUgYmxvbmRlLCB0aGVyZSBpcyBub3QgT05FIHRvcGxlc3MgY2hpY2sgaW4gdGhlIHdob2xlIGJ1aWxkaW5nLiBOYWRhLiBDJ21vbi4gSSBrbm93IGl0J3MgQ2FuYWRhLCBidXQgSSB3b3VsZCBleHBlY3QgbW9yZSBmcm9tIGEgY291bnRyeSB0aGF0IGdhdmUgdXMgU2hhbm5vbiBUd2VlZC48YnIgLz48YnIgLz5BbmQgYW55b25lIGVsc2Ugbm90aWNlIHRoYXQgd2hlbiBWZXJuIHdhcyBzdXJmaW5nIHRoZSBXZWIgYW5kIGZvdW5kIHRoYXQgcmlkZGxlem9uZSBzaXRlLCB0aGF0IHdoZW4gaGUgbW91c2VkIG92ZXIgdGhlIGxpbmsgdGhlIGN1cnNvciBzdGF5ZWQgYW4gYXJyb3csIGFuZCBkaWRuJ3QgdHVybiBpbnRvIGEgbGl0dGxlIGhhbmQgKExJS0UgQUxMIENVUlNPUlMgRE8gV0hFTiBZT1UgQ0xJQ0sgT04gQSBIWVBFUkxJTkspPyE/IEkgbWVhbiwgaWYgeW91J3JlIGdvbm5hIGhhdmUgdGhlIGludGVybmV0IHBsYXkgc3VjaCBhIHByb21pbmVudCByb2xlIGluIHlvdXIgbW92aWUsIGF0IGxlYXN0IGdldCB0aGUgbGl0dGxlIHRoaW5ncyByaWdodC4gR2Vlei4pAAAAAAAA8D8KmgkI+gMQ+gMiiAl0b28gYmFkIHRoZXkgc2hvd2VkIHBhbG0gdHJlZXMgdGhhdCBjb3VsZCBub3QgYmUgbW9yZSBpbmFjY3VyYXRlIGZvciBDb25uZWN0aWN1dCBpbiBPY3RvYmVyIC4uLiB0aGlzIHdhcyBmaWxtZWQgaW4gTmV3IFplYWxhbmQgLi4uVGhpcyBNYXJ0aGEgTW94bGV5IGNhc2UgaGFkIGJlZW4gJ2NvbGQnIGZvciAyMC0yNSB5ZWFycyAuLi4gaGVyIGZhbWlseSB3b3JrZWQgaGFyZCB0byBrZWVwIGl0IGFsaXZlIGFuZCB3aGVuIE1hcmsgRnVocm1hbiBkZWNpZGVkIGhlIGRpZCBub3Qgd2FudCB0byBiZSByZW1lbWJlcmVkIG9ubHkgZm9yIGhpcyBpbnZvbHZlbWVudCBpbiB0aGUgTmljb2xlIFNpbXBzb24gY2FzZSAuLi4uIHdoaWNoIGNvdWxkIGhhdmUgYmVlbiBkZWxldGVyaW91cyB0byBoaXMgcmVwdXRhdGlvbiAoaWYgaXQgYWxyZWFkeSBoYWRuJ3QpLi4uIEFueXdheSwgaGUgZm9sbG93ZWQgYWxvbmcgYXMgdGhlIHBvbGljZSB0cmllZCB0byBnZXQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHdyaXRlIGEgYm9vay4gLi4uIHdpdGggdGhlIHVzZSBvZiBmbGFzaGJhY2tzIHdlIGNhbiBzZWUgdGhlIHJlbGF0aW9uc2hpcHMgTWFydGhhIGZvcm1lZCAuLi4uIFVuYXR0ZW5kZWQgYm95cyBjb21pbmcgb2YgYWdlIHdpdGhvdXQgYSBtb3RoZXIgYXJvdW5kIHRvIGhlbHAgYW5kIGEgZGFkIHdobyB3YXMgYWx3YXlzIGxvb3BlZCAuLi48YnIgLz48YnIgLz5QbHVzIHRoZSBmYWN0IHRoYXQgdGhleSBwb3J0cmF5IHRoZSByZWFsIE1hcnRoYSBhcyBpZiBzaGUgd2VyZSBhIG1vdmllIHN0YXIuLi4gc2hlIHdhcyBhIGN1dGUgc3dlZXQgZ2lybCBuZXh0IGRvb3IgdHlwZS4gT3RoZXIgdGhhbiB0aGF0LCB0aGUgb3RoZXIgY2hhcmFjdGVycyB3ZXJlIHJlYWxseSBncmVhdCwgZXNwZWNpYWxseSBKb24gRm9zdGVyIGFuZCBUb2J5IE1vb3JlLCB3aG8gcGxheWVkIGFzIE1pY2hhZWwgU2tha2VsIGFuZCBUb21teSBTa2FrZWwgcmVzcGVjdGl2ZWx5LiBUaGV5IHdlcmUgZ29vZCBhcyB3ZWxsLCB0aGUgY29zdHVtZXJzIGhhZCB0byBrZWVwIGl0IGFsbCBpbiB0aGUgNzBzIGxvb2sgYW5kIGJhY2sgdXAgdG8gdGhlIDkwcyAuLi4uPGJyIC8+PGJyIC8+SXQga2VwdCBteSBpbnRlcmVzdCBldmVuIHdoZW4gSSBjYXVnaHQgb24gYWJvdXQgdGhlIFNrYWtlbCBndXkgLi4uLikAAAAAAADwPwrMBgj7AxD7AyK6BnRvbSBoYWQgYSB3aXNoIHRvIG1ha2UgZmlsbSBmb3IgYSBsb25nIHRpbWUgYW5kIGhlIGRpZC4gaXQgaXMgYXMgaWYgaGUgaGFzIHZpc3VhbGl6ZWQgYSBkaXJ0eSBhbmQgd29ybiBvdXQgbm90ZWJvb2sgZnVsbCBvZiBncmVhdCBsaXR0bGUgaWRlYXMgaGUgaGFzIGJlZW4gZmlsbGluZyB1cCBhbmQgY2FycnlpbmcgYXJvdW5kIGZvciAxMCB5ZWFycy4gbm8gZ3JhbnQgY2hhcmFjdGVyIHRyYW5zZm9ybWF0aW9ucywgbm8gSG9sbHl3b29kIGluZ3JlZGllbnRzIGp1c3QgbGlmZSBhbmQgYSBsaXR0bGUgYml0IG9mIG1hZ2ljLiB0aGUgYmFsYW5jZSwgaW4gc3BlZWQsIGluIHdlaXJkbmVzcyBpbiBjb21lZHkgdnMgZHJhbWEgaXMgcGVyZmVjdGx5IHdlaWdoZWQuIHRoaXMgZmlsbSB0YWtlcyB5b3Ugb24gYSBqb3VybmV5IHRoYXQgaXMgb3ZlciBiZWZvcmUgeW91IHJlYWxpemUgaG93IG5pY2UgaXQgd2FzLiB0aGUgbXVzaWMgaXMgZ3JlYXQgYW5kIHlvdXIgZXllcyB3aWxsIGJlIGVxdWFsbHkgc2F0aXNmaWVkLiB0aGUgZmFjdCB0aGF0IHRoaXMgZmlsbSBpcyBhYm91dCBub3RoaW5nLCBtZXJlbHkgYSBzZXF1ZW5jZSBvZiBza2V0Y2hlcyBvZiBwZW9wbGUgdGhhdCBhcmUgbWFpbmx5IGxpbmtlZCB0cm91Z2ggYSBwYXJ0eSBvZiBvbmUgb2YgdGhlIGNoYXJhY3RlcnMsIG1ha2VzIGl0IHZlcnkgcGxlYXNhbnQgYW5kIHN1cnByaXNpbmdseSBlbnRlcnRhaW5pbmcsIGl0IGlzIGJyaWxsaWFudCBiZWNhdXNlIGl0IGlzIGVtcHR5LiBpbiBiZXR3ZWVuIHRoZSBsaW5lcyBpdCBpcyBoYXBwZW5pbmcuIHRvIHNlZSBvciBub3QgdG8gc2VlLCB0aGF0J3MgdGhlID8pAAAAAAAA8D8K5gYI/AMQ/AMi1AZ0byBzdGFydCBvZmYsIGknbSBlYXNpbHkgcGxlYXNlZC4gaSdtIGluIG5vIHdheSBhIHJlYWwgY3JpdGljLCBhbmQgbW92aWVzIHRoYXQgYXV0aGVudGljIGNyaXRpY3MsIGZyaWVuZHMsIGZhbWlseSwgYW5kIG5ld3NwYXBlcnMgbWF5IGZpbmQgYXdmdWwgbWF5IGV2ZW4gYmUgZnVuIGZvciBtZSB0byB3YXRjaC48YnIgLz48YnIgLz5ub3QgdGhpcyBvbmUgaG93ZXZlci48YnIgLz48YnIgLz5pIGdvdCBpdCBzaW5jZSBpdCB3YXMgdGhlIG5ld2VzdCB3ZXNsZXkgc25pcGVzIG1vdmllIGluIG15IERWRC1zdG9yZS4gaSBsaWtlIHNuaXBlcywgYnV0IHRoaXMgd2FzIGEgbGV0LWRvd24uPGJyIC8+PGJyIC8+YmFkIHN0b3J5LCBiYWQgYWN0b3JzLCBjb250aW51aXR5LWdsaXRjaGVzLCBjcmFwcHkgc291bmQsIGRlcHJlc3NpbmcgbG9jYXRpb25zLCBhIHBzZXVkby0gY29vbCBzbmlwZXMsIGkgcmVhbGx5IGhhZCB0byBmb3JjZSBteXNlbGYgdG8gZmluaXNoIHRoZSBtb3ZpZS48YnIgLz48YnIgLz50aGV5IGV2ZW4gbGVmdCBzb21lIG1hcmtpbmdzIGluIHRoZSBzaG90cyB3aGVyZSBhIGNhciB3YXMgc3VwcG9zZWQgdG8gY29tZSB0byBhIHN0b3AuPGJyIC8+PGJyIC8+YW5kIGknbSBub3QgdGFsa2luZyBhYm91dCAic21hbGwgcHJvZHVjdGlvbiBjb21wYW55L3lvdW5nIGRpcmVjdG9yL2xvdyBidWRnZXQiIGtpbmQgb2YgYmFkLCB3aGVyZSB5b3UgbWF5IGlnbm9yZSBzb21lIG1pc3Rha2VzIGJlY2F1c2UgeW91IGZlZWwgc3ltcGF0aHkuPGJyIC8+PGJyIC8+YSB3YW5uYS1iZSBibG9jayBidXN0ZXIgYWN0aW9uIG1vdmllIHRoYXQgZGlzYXBwb2ludHMgbGlrZSBubyBvdGhlciBpbiBhIGxvbmcgdGltZS4pAAAAAAAA8D8KxwYI/QMQ/QMitQZ0byBtb3ZpZSx0aGlzIG1vdmllIGZlbHQgbGlrZSBvbmUgb2YgdGhvc2UgYWZ0ZXIgc2Nob29sIHNwZWNpYWxzLG9ubHkgbG93ZXIgYnVkZ2V0IGFuZCBsb3dlciBldmVyeXRoaW5nIGVsc2UuaSBndWVzcyB0aGlzIHdhcyBzdXBwb3NlZCB0byBhbiBpbnNwaXJhdGlvbmFsIG1vdmllIG9mIHNvbWUgc29ydCxidXQgaXQgZGlkbid0IHdvcmsgZm9yIG1lLnlldCBzb21lIGhvdyBpdCBjb21lcyBhY3Jvc3MgYXMgcHJlYWNoeS5pdCBoYXMgdmVyeSBwYWxlIHNoYWRlcyBvZiBGbGFzaCBEYW5jZSxidXQgc28gd2hhdD90aGVyZSBqdXN0IGlzbid0IGFueSBleGNpdGVtZW50IGluIHRoaXMgbW92aWUudGhlIGRpYWxvZ3VlIGlzIGNvbnRyaXZlZCBhbmQgY2xpY2jDqWQgdG8gZGVhdGgub2YgY291cnNlLHRoZSB3aG9sZSBtb3ZpZSBmZWVscyBsaWtlIGEgYmFkIDgwJ3MgY2xpY2jDqS50aGUgYWN0aW5nIHdhcyBsZXNzIHRoYW4gc3RlbGxhcix0aG91Z2ggdGhhdCBoYXMgYSBsb3QgdG8gZG8gd2l0aCB3aGF0IHRoZSBhY3RvcnMgd2VyZSBnaXZlbihvciBpbiB0aGlzIGNhc2Utbm90KXRvIHdvcmsgd2l0aC5vbiB0b3Agb2YgdGhhdCBpcyB0aGUgcG9vciBzb25nIGNob2ljZXMsd2l0aCByZWFsbHkgYmFkIGx5cmljcy5pIGZlbHQgZW1iYXJyYXNzZWQgZm9yIGFsbCB0aGUgYWN0b3JzIGludm9sdmVkLnRoZXkgYXJlIGFsbCB0YWxlbnRlZCxidXQgeW91IGNhbid0IHRlbGwgZnJvbSB0aGlzIG1vdmllLnRoaXMgaXMganVzdCBteSBvcGluaW9uIG9mIGNvdXJzZSxidXQgaSBoYXZlIHRvIGdpdmUgRmx5aW5nIEFLQSBEcmVhbSB0byBCZWxpZXZlIGEgMS8xMCkAAAAAAADwPwreEwj+AxD+AyLME3RvIG1ha2UgdXAgYSBtb3ZpZS1nb2luZyBhdWRpZW5jZSAtIEknbSBjZXJ0YWlubHkgc3R1bm5lZCBieSB0aGUgbnVtYmVyIG9mIHBvc2l0aXZlIGNvbW1lbnRzIHRoaXMgd3JldGNoZWQgZmlsbSBoYXMgZ2FybmVyZWQgaGVyZS4gSSBjYW4ndCBjcmVkaXQgaXQsIGNhbid0IGhlbHAgYnV0IGJlIHN1c3BpY2lvdXMsIGZvciB0aGF0IG1hdHRlciwgb2YgYmFjayBhbGxleSBwYXlvZmZzIHRvIGNyaXRpY3Mgd2hvIGFyZSB0b3V0aW5nIEFubmV0dGUgQmVuaW5nIGZvciBhbiBPc2NhcjsgdGhlIGhvbGUgaW4gdGhlIGtpdGNoZW4gY2VpbGluZyBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlbHkgYXR0cmlidXRlZCB0byBoZXIgc2NlbmVyeSBjaGV3aW5nLiBTaGUncyBhIHdvbmRlcmZ1bCBhY3RyZXNzIGJ1dCB0aGlzIGlzIGFuIHVuZm9ydHVuYXRlbHkgdW5iYWxhbmNlZCBwZXJmb3JtYW5jZSwgbGFja2luZyB0aGF0IGVzc2VudGlhbCBxdWFsaXR5IGZpbG0gYWN0b3JzIG11c3QgbWFzdGVyIG9mIGNhdGNoaW5nIHRoZSBjYWRlbmNlIG9mIHRoZSBzY3JlZW5wbGF5IGFuZCBtYWludGFpbmluZyBpdCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBkaXNqb2ludGVkIG1hZG5lc3MgdGhhdCBpcyBhIGZpbG0gc2hvb3QuPGJyIC8+PGJyIC8+SSBkb24ndCByZWFsbHkgd2FudCB0byBibGFtZSBNaXNzIEJlbmluZyBvciBtb3N0IG9mIHRoZSBvdGhlciBwZXJmb3JtZXJzICh3ZWxsLCBHd3luZXRoIFBhbHRyb3cgaGFzIG5vIGV4Y3VzZSBmb3IgaGVyIG11enp5IHdvcmspLCBob3dldmVyLCBiZWNhdXNlIHRoaXMgaXMgYSBob3JyZW5kb3VzIGFkYXB0YXRpb24sIGEgY2xhc3NpYyBjYXNlIG9mIG1pc3RyYW5zbGF0aW9uIChJIGFtIHByZXBhcmVkIHRvIGFzc3VtZS4gSSBoYXZlbid0IHJlYWQgdGhlIGJvb2sgYW5kIGRvbid0IHRoaW5rIEkgd2lsbCBhZnRlciB0aGlzKS4gVGhlIHNjcmlwdCBsYXVuY2hlcyB1cyBpbnRvIHRoZSBtaWRkbGUvbXVkZGxlIG9mIHVuYWNjb3VudGFibGUgYmVoYXZpb3VyIGFuZCBleHRyZW1lIGVtb3Rpb25hbCBhbmdzdCBzcGV3aW5nIGZyb20gbXlzdGlmeWluZyBjaGFyYWN0ZXJzIHdobyBoYXZlIGRldmVsb3BlZCByZWxhdGlvbnNoaXBzIG5laXRoZXIgd2l0aCB1cyBub3IgZWFjaCBvdGhlci4gSXQgcXVpY2tseSBiZWNvbWVzIGEgZ3JvdGVzcXVlbHkgZXhjZXNzaXZlIHRzdW5hbWktbGlrZSBhc3NhdWx0IHRoYXQgc3VsbGllcyBjaGFyYWN0ZXJzIGFuZCBhdWRpZW5jZSBhbGlrZSBhbmQgbGVmdCBtZSBsaWtlIGEgc3Vydml2b3Igc2hha2luZyBteSBoZWFkIGF0IHRoZSBkZXRyaXR1cyBsZWZ0IGF0IHRoZSBlbmQgb2YgZWFjaCByZXBldGl0aXZlIGVwaXNvZGUuIFNob2NrIGFuZCBhd2Ugd291bGQgZGVzY3JpYmUgbXkgcmVhY3Rpb24gdG8gZnJhbnRpYywgYmktcG9sYXIgbW9vZCBzd2luZ3MgYmV0d2VlbiByYW50aW5nIGFuZCBvaC1zby1xdWlldCBzZW5zaXRpdml0eSwgdGhlIGxhdHRlciB0ZWxlZ3JhcGhlZCBieSBvbmUgb2YgdGhlIG1vc3QgaXJyaXRhdGluZywgbWFuaXB1bGF0aXZlLCBkcm9uaW5nIHNvdW5kdHJhY2tzIEkndmUgaGVhcmQgLSB0aGF0IGlzLCB3aGVuIGFsbCB0aGlzIGlzbid0IGJlaW5nIHNldCB0byBsdWRpY3JvdXNseSBpbmNvbmdydW91cyB0b29ucyAtIHBlcmlvZCBzdHVmZiwgeWEga25vdywgYnV0IGNob3NlbiB3aXRoIGFuIGFzdG91bmRpbmcgZGlzcmVnYXJkIGZvciB0aGUgdG9uZSBvZiB0aGUgc2NlbmVzLjxiciAvPjxiciAvPkhvdyB0aGlzIGZpbmUgY2FzdCBnb3QgbWl4ZWQgdXAgaW4gdGhpcyBJIGRvbid0IGtub3cgLSBJIGNhbid0IGJlbGlldmUgdGhleSBzYXcgdGhlIHNjcmVlbnBsYXkgYmVmb3JlIHNpZ25pbmcuIFRoZXkgY2VydGFpbmx5IGFwcGx5IHRoZWlyIHNraWxscyB3aXRoIGNvbW1pdG1lbnQgLSBJIGZlbHQgc28gc29ycnkgZm9yIHRoZSB3b25kZXJmdWwgSmlsbCBDbGF5YnVyZ2ggc2FkZGxlZCB3aXRoIGEgY2FydG9vbiBiYWcgbGFkeSBjb3N0dW1lIGFuZCB3aWcgdHJ5aW5nIHZhaW5seSB0byB3cmVuY2ggc29tZXRoaW5nIG9mIHNpZ25pZmljYW5jZSBmcm9tIHNrZXRjaHkgYW5kIGNsaWNow6lkIGRpYWxvZ3VlLiBJbiBjb250cmFzdCwgc29tZWhvdywgQWxlYyBCYWxkd2luIHJpc2VzIGFib3ZlIHRoZSBtYXRlcmlhbCB0byBkZWxpdmVyIGEgY29uc2lzdGVudCwgbnVhbmNlZCwgcmVhbCBwZXJmb3JtYW5jZS4gQ2FuIHNvbWVib2R5IGdpdmUgdGhpcyBtYW4gYSBsZWFkIHJvbGUgb2Ygc3Vic3RhbmNlLCBwbGVhc2U/IEFuZCBob3cgYWJvdXQgUmFjaGVsIEV2YW4gV29vZCAtIG9yIEpvc2VwaCBGaWVubmVzPyBZb3UnZCB0aGluayB0aGUgaW5kdXN0cnkgY291bGQgbWFrZSBiZXR0ZXIgdXNlIG9mIGhpbSwgYW5kIHdpdGhvdXQgYXBwZWFyaW5nIGFzIGhpcnN1dGUgYXMgRWxsaW90IEdvdWxkIGluIE0uQS5TLkguIDxiciAvPjxiciAvPk15IHZvdGU/IEEgc3RhbmR1cCB0dXJkLCBhbGwgcmlnaHQsIGJ1dCBubyBsaW5rIHdpdGggaGVhdmVuLikAAAAAAADwPwrVBAj/AxD/AyLDBHRvIGNvbW11bmljYXRlIGluIGZpbG0gZXNzZW50aWFsIHRoaW5ncyBvZiBsaWZlIC0gbGlrZSB3aGF0IGlzIGxpZmUsIGRvZXMgaXQgaGF2ZSBhIG1lYW5pbmc/IC0gaXMgc2hlZXIgaW1wb3NzaWJsZS4gT2YgY291cnNlIHBvc3NpYmxlIGFuc3dlcnMgdG8gdGhlc2UgcXVlc3Rpb25zIGFyZSBkZW1vbnN0cmF0ZWQgaW4gZXZlcnkgZmlsbSAoc3RvcnkpLCBidXQgY29tbXVuaWNhdGlvbiBuZWVkcyBhIGRpcmVjdCBhcHBlYWwgdG8gY29uc2Npb3VzbmVzcy4gVGhpcyBoYXBwZW5zIGlmIHRoZSBpbnB1dCBmcm9tIHRoZSBzZW5zZXMgb3ZlcnJ1bGVzIHRoZSAiaW5wdXQiIGZyb20gb3VyIG1pbmQsIGkuZS4gb3VyIHRob3VnaHRzLiBGZXcgZGlyZWN0b3JzIGtub3cgaG93IHRvIGNvbW11bmljYXRlIGVzc2VudGlhbCB0aGluZ3MuIFRhcmtvdnNreSwgaXMgb25lLiBIaXMgIlN0YWxrZXIiIHNob3dzIGltYWdlcyBvZiBleGlzdGVuY2UsIGNvbW11bmljYXRlcyBsaWZlIGFzIGl0IHNob3dzIGl0c2VsZiBhbmQgeWV0IGVzY2FwZXMgeW91ciBtaW5kLiBJIHRoaW5rIERlIFplZSBhbmQgRGUgR3JhYWZmIGRvIHRoZSBzYW1lLikAAAAAAADwPwr4BgiABBCABCLmBnRpbGwgSEJPIGJlZ2FuIHJlcnVubmluZyBpdCB0aGlzIG1vbnRoLiBJIHJlbWVtYmVyIGxhdWdoaW5nIG91dCBsb3VkIGluIHRoZSB0aGVhdGVyIGJhY2sgaW4gMTk5MSwgYW5kIG5vdyBhZ2FpbiBpbiBteSBsaXZpbmcgcm9vbS4gSWYgSSBzZWUgdGhhdCBpdCdzIG9uLCBJIGhhdmUgdG8gd2F0Y2ggaXQuIFRoZXJlJ3MganVzdCBubyBxdWVzdGlvbi4gVGhpcyBpcyBzbyBtdWNoIG1vcmUgZW50ZXJ0YWluaW5nIHRvIG1lIHRoYW4gb3RoZXIsIG1vcmUgcG9wdWxhciBzcG9vZnMgbGlrZSBBaXJwbGFuZSEgKHdoaWNoIEkgcmVhbGx5IGxpa2UsIEJUVykuIENhdGh5IE1vcmlhcnR5IHN0ZWFscyB0aGUgc2hvdyBpbiBteSBvcGluaW9uLiBRdW90ZXMgbGlrZSAiU3VkZGVuIHNwZWVjaCEgVGhlIGxhc3Qgc3ltcHRvbXMgb2YgYnJhaW4gZmV2ZXIhIFNoZSBjb3VsZCBibG93IGF0IGFueSBtb21lbnQhIiBwdXQgbWUgb3ZlciB0aGUgZWRnZS4gQW5kIFdob29waWUgR29sZGJlcmcgaGFzbid0IGJlZW4gdGhpcyBmdW5ueSBzaW5jZSAnSnVtcGluJyBKYWNrIEZsYXNoJy4gS2V2aW4gS2xlaW4sIFNhbGx5IEZpZWxkLCBSb2JlcnQgRG93bmV5IEpyLiBhbGwgdHVybiBpbiBzdXBlcmIgcGVyZm9ybWFuY2VzIGFzIGV4cGVjdGVkLiBJIHN0YXJ0ZWQgb3V0IGdpdmluZyB0aGlzIDkgb3V0IG9mIDEwIHN0YXJzLCBidXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgZm9yIHRoZSB0eXBlIG9mIGZpbG0gaXQncyBzdXBwb3NlZCB0byBiZSwgdGhlcmUgaXNuJ3Qgb25lIHRoaW5nIEknZCBjaGFuZ2Ugb3IgaW1wcm92ZSB1cG9uLiBTbyAxMCBpdCBpcy4gSSBoYXZlIHRvIGdldCB0aGlzIG9uIERWRCwgdGhhdCdzIGp1c3QgYWxsIHRoZXJlIGlzIHRvIGl0LikAAAAAAADwPwqRCQiBBBCBBCL/CHRoaXMsIGlzIE5PVCBvbmUgb2YgdGhvc2UgZmlsbXMgaXQgaXMgb25lIG9mIHRoZSBiaWdnZXN0IHBpZWNlcyBvZiB0cmlwZSBJIGhhdmUgZXZlciBzY2VuZSwgdGhlIGNhbWVyYSB3b3JrIGlzIHRyeWluZyB0byBiZSBmbGFzaHkgYnV0IGl0IHJlYWxseSBqdXN0IGNyYXAgdGhlIHdob2xlIHRoaW5nIGxvb2tzIGxpa2UgdGhlIHJlZCBzaG9lIGRpYXJpZXMsIGJ1dCB3aXRob3V0IHRoZSBzZXgsIHRoZSBvbmx5IHJlYXNvbiBJIGJvdWdodCB0aGlzIHdhcyBJIHdhbnRlZCB0byB0cnkgb3V0IGR2ZCBhbmQgdGhpcyB3YXMgdGhlIGNoZWFwZXN0IG9uZSBJIGNvdWxkIGZpbmQsIHBvc3NpYmx5IHRoZSB3b3JzdCBidXkgb2YgbXkgbGlmZSBhbmQgY291bGQgaGF2ZSBwdXQgeW91IG9mZiBkdmQgZm9yZXZlciwgdGhlIHNvdW5kdHJhY2sgaXMgUkVBTExZIHRhY2t5IGFuZCBtb3N0IG9mIHRoZSBtb3ZpZSBpcyBtYWRlIHVwIG9mIGVuZGxlc3MgcmVwZWF0cyBvZiBjbGlwcyBmcm9tIHRoZSBmaXJzdCB0d28gZmlsbXMsIHdoeSBhbnlvbmUgd291bGQgd2FudCB0byBtYWtlIGEgbW92aWUgYXMgYXdmdWwgYXMgdGhpcyBpcyBiZXlvbmQgbWUsIGlmIHRoZXkgaGFkIHJlYWxseSBhdHRlbXB0ZWQgdG8gbWFrZSBhbiBvcmlnaW5hbCBtb3ZpZSBhbmQgZmFpbGVkIEkgd291bGQgYmUgbmljZXIgaW4gdGhpcyByZXZpZXcgYnV0IHRoZXkgZG9uJ3QgdGhleSBqdXN0IGdvdCB0aGUgcmlnaHRzIHRvIHJlcHJvZHVjZSBzdHVmZiBmcm9tIHRoZSBmaXJzdCB0d28gYW5kIHRoZW4gZWRpdCBpdCBhbmQgcmVwZWF0IGl0IGludG8gdGhpcyBmaWxtIHdpdGggYWJvdXQgbWF5YmUgdW5kZXIgMSAzcmQgb3JpZ2luYWwgZm9vdGFnZSB3aGljaCBpcyBhYm91dCB1cCB0byB0aGUgc3RhbmRhcmRzIG9mIGZpbG0gc2Nob29sIHN0dWRlbnRzLCBETyBOT1QgYnV5IHRoaXMgbW92aWUuIHRoZSBvbmx5IGVudGVydGFpbm1lbnQgdGhpcyBkdmQgY2FuIG9mZmVyIGlzIGlmIHlvdSB3ZXJlIHRvIHN0aWNrIGl0IGluIHRoZSBtaWNyb3dhdmUgYW5kIHdhdGNoIHRoZSBmbGFzaGluZyBsaWdodHMhIFVUVEVSIFVUVEVSIFVUVEVSIFVUVFRFUiB1bmJlbGlldmFibGUgR0FSQkFHRSEgMC8xMCBpZiBvbmx5IHRoZSB2b3Rpbmcgc3lzdGVtIHdvdWxkIGFsbG93IHRoYXQuKQAAAAAAAPA/CvAFCIIEEIIEIt4FdGhpcyB3YXMgdGhlIG1vc3QgcG9pbnRsZXNzIGZpbG0gaSBoYXZlIGV2ZXIgc2VlbiBhcyB0aGVyZSB3YXMgbm8gcGxvdCBhbmQgdGhlIGFjdG9ycyBkaWQgbm90IHNlZW0gdG8gY2FyZS4gOTAlIG9mIHRoZSBmaWxtIGhhZCBhYnNvbHV0ZWx5IG5vIHBsb3Qgd2hhdHNvZXZlciwgaSBsYXVnaGVkIHNvIG11Y2ggbXkgcmlicyBiZWdhbiB0byBhY2hlLiB0aGUgYml0IHdoZXJlIHRoZSBvbGQgbWVuIHdoZW4gdG8gY2FwdHVyZSBSb2JlcnQgRHV2YWxsIHdhcyBsdWRpY3JvdXMuIG9uIGEgZGlyZWN0b3JpYWwgbGV2ZWwgbWFraW5nIGEgbm9pciBmaWxtIGRvZXMgbm90IGludm9sdmUgbG90cyBvZiByYWluaW5nIHNlcXVlbmNlcyBhbmQgcG9pbnRsZXNzIGNsb3NldXBzIG9uIHRoZSBtYWluIGNoYXJhY3Rlci4gdGhpcyBpcyBhIGZhaWxlZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIG5vaXIgdGhyaWxsZXIgYW5kIGluc3RlYWQgYWxpZW5hdGVzIHRoZSB2aWV3ZXIgd2l0aCBpbmNvaGVyZW50IHNjZW5lcy4gc2VlaW5nIGFzIHRoaXMgd2FzIGJhc2VkIG9uIGEgJ21hbnVzY3JpcHQnIGJ5IGpvaG4gR3Jpc2hhbSBpIGRvIG5vdCBjb3VudCB0aGlzIGFzIG9uZSBvZiBoaXMgYm9vayB0byBmaWxtIGFkYXB0YXRpb25zIGFzIGl0IGRpc3BsYXlzIG5vbmUgb2YgdGhlIHN1c3BlbnNlIGFuZCBlbmdhZ2luZyBzdG9yeWxpbmUgYXMgZmlsbXMgc3VjaCBhcyAndGhlIGZpcm0nIG9yICd0aGUgcmFpbm1ha2VyJy4pAAAAAAAA8D8KsxQIgwQQgwQioRR0aGlzIHdhcyB0aGUgbW9zdCBjb3N0bHkgZmlsbSwgd2hlbiBwcm9kdWNlZC4gU2lyIEFsZXhhbmRlciBLb3JkYSBhbmQgSC5HLiBXZWxscyB3ZXJlIGJvdGggZGlzdHJlc3NlZCBieSBpdHMgcG9vciByYXRpbmdzLS0tZm9yIGdvb2QgcmVhc29uLiBpdCB3YXMgYW5kIHJlbWFpbnMgZmFyIGFoZWFkIG9mIGl0cyB0aW1lLiBhc2lkZSBmcm9tIHRoZSBzZWVtaW5nbHkgcG9vciBkaXJlY3Rpb24sIHByb2JhYmx5IGVkaXRpbmcsIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZywgdGhlIHdvcmsgbW92ZXMgYWxvbmcgdG8gYSBzdHVubmluZyBjb25jbHVzaW9uLjxiciAvPjxiciAvPndoZXRoZXIgaXRzIFNpciBSYWxwaCBSaWNoYXJkc29uJ3MgJ0Jvc3MnIHJvbGUsIG9yIGV2ZW4gYmV0dGVyLCBoaXMgd2lmZSdzLCBTaXIgQ2VkcmljJ3MsIGFzIGFkdmVyc2FyeSB0byBzcGFjZS1mYXJpbmcsIFJheW1vbmQgTWFzc2V5J3MgJ0pvaG4gQ2FiYWwnIGNlbnRlciByb2xlLS0tYWxsIGRlbGl2ZXIgbWluZC1ib2dnbGluZyBwZXJmb3JtYW5jZXMuPGJyIC8+PGJyIC8+dGhlIHNjZW5lIHdpdGggbXIuIEtvcmRhJ3MgaW5jb21wYXJhYmxlIHNldCwgb2YgdGhlIHNtYWxsIGdpcmwtY2hpbGQsIHJ1bm5pbmcgb3V0IHRvIGFuIGFic29sdXRlbHkgJ25ldmVyLXRvLWJlLW1hdGNoZWQnIHNjZW5lLCBjb21tZW50aW5nICdMaWZlIGp1c3Qga2VlcHMgZ2V0dGluZyBsb3ZlbGllciBhbmQgbG92ZWxpZXInPyB0aGF0IHN3aWZ0bHkgYnJpbmdzIHRlYXJzIHRvIGFueSBwYXJlbnQvZ3JhbmRwYXJlbnQuIHRoaXMgaXMgbm90IGEgZmlsbSBmb3IgdGhlIHlvdW5nLS11bmxlc3MgJ2V4cGVyaWVuY2VkJyBhbmQgcmF0aGVyIHRob3NlIHdobyBoYXZlIHNlZW4gJ3RoZSBob3Jyb3InIGl0IG9wcG9zZXMuPGJyIC8+PGJyIC8+c3VyZSwgdGhlICdwaG9ueS1wYXJhY2h1dGluZycsIGxvb2tzIGhva2V5LS0td2hpbGUgdXNpbmcgYSAnbWFnbmV0aWMtY2Fubm9uJywgbm93IHRlcm1lZCAnbWFzcy1kcml2ZXInIG1heSBiZSB2aWV3ZWQgYXMgcmlkaWN1bG91cywgdnMuIHJvY2tldHMtLS1naXZlIFNpciBLb3JkYSBhIGJyZWFrLS1Nci4gV2VsbHMgbWFkZSB0aGF0IGNob2ljZS4gYW5kIGF0ICsvLSAkOCBtaWxsaW9uLCB0aGlzIGZpbG0gd2VudCB3YXkgYmV5b25kICdvdmVyLWJ1ZGdldCctLS1zbyBoZSBjb25jZW50cmF0ZWQgb24gd2hhdCBoZSBjb3VsZCBtYW5hZ2UuPGJyIC8+PGJyIC8+dGhlIHRydWUgcG93ZXIgb2YgdGhpcyBHcmVhdGVzdCBvZiBjaW5lbWEgcmVzdHMgaW4gJ0pvaG4gQ2FiYWwncycgZmluYWwgc3RhdGVtZW50IG9mIGh1bWFuIGRlc3RpbnktLS1oaXMgZnJpZW5kICdQYXNzd29ydGh5JyBkb3VidHMgdGhlIHdpc2RvbSBvZiBzcGFjZS1mYXJpbmcsIHNheWluZywgJ1dlJ3JlIHN1Y2ggbGl0dGxlIGFuaW1hbHMuJyBKb2huIENhYmFsJ3MgcHJvcGVyIHJlc3BvbnNlIGlzLChwYXJhcGhyYXNlZCkgJ1llcywgbGl0dGxlIGFuaW1hbHMsIGFuZCBpZiB0aGF0IGlzIGFsbCB3ZSBhcmUsIHdlIG11c3QgbGl2ZSBhbmQgZGllIGFzIHN1Y2guJyB0aGV5IGFyZSBzdGFuZGluZyB1bmRlciBhIGxhcmdlIGFzdHJvbm9taWNhbCB0ZWxlc2NvcGUuIGhlIHN3ZWVwcyBoaXMgaGFuZCBvdmVyIHRoZSBuaWdodCBza3kuICdZZXQgd2UgbWF5IGhhdmUgYWxsIHRoZSBVbml2ZXJzZSwgb3Igbm90aGluZy4nLS0tdGhlbiB0aGUgZmluYWwgY2hvcnVzIGJyZWFrcyBpbi0tLSdXaGljaCBzaGFsbCBpdCBiZT8nLS0tdGhpcyBpcyBub3QgJ1N0YXIgV2FycycsICdCbGFkZSBSdW5uZXInLS0tYW55dGhpbmcgeW91IG1heSBjb25zaWRlciAnR3JlYXQnLS0tdGhpcyBpcyB0aGUgUmVhbCBUaGluZy48YnIgLz48YnIgLz5pIHJlbWluZCBhbGwgb2YgU3RldmVuIEhhd2tpbmcncyBtb3N0IHJlY2VudCBhZGRyZXNzLCB1cG9uIGhpcyBsYXRlc3QgJ01lZGFsIG9mIEhvbm9yJy0tLSdIdW1hbml0eSBtdXN0IGxlYXZlIEVhcnRoLCBvciBkaWUuJy0tLXRoZSB2ZXJ5IGNvcmUgb2YgdGhpcyB3b3JrLS0taSBsb3ZlICdzdGFuZGFyZCBlbnRlcnRhaW5tZW50Jy0tLXlldCB0aGlzICdyZWxpYycsIGZvciB0aGUgd2lzZSB2aWV3ZXIsIG9mZmVycyBmYXIgbW9yZS4gJ1doaWNoIFNoYWxsIEl0IEJlPycgYmUgaW4gdGhlIHByb3BlciAnbW9vZCctLS13aGF0ZXZlciB0aGF0IHRha2VzLS0tdGhpcyB3aWxsIHRha2UgeW91ciBicmVhdGggYXdheS0tLWkgJ2d1YXJvbnRlZSctLS1vdmVyYWxsLCBmb3IgaHVtYW5pdHk/IHRoZSBtb3N0IHNpZ25pZmljYW50IG9mIGNpbmVtYS4gPGJyIC8+PGJyIC8+c2luY2UgcG9zdGluZywgaSBub3RlIG1hbnkgaGF2ZSBjb21tZW50ZWQgb24gdGhlIHBvb3IgJ21lZGlhLXF1YWxpdHknIG9mICdzdXJ2aXZpbmcnIGV4YW1wbGVzLiBpbiB0aGUgODAncyBpIGRldmVsb3BlZCBhICdwcm9wcmlldGFyeScgJ2NvbG9yaXphdGlvbicgcHJvY2VzcyB3aGljaCByZXF1aXJlZCBhICdjbGVhbicgb3JpZ2luYWwuIHRoaXMgbGVkIG1lIHRvIE1pY2hhZWwgS29yZGEsIHdobyBzYWRseSBub3RlZCBhbGwgd2VyZSBnb25lLS0tc28gd2UgbXVzdCByZWxpc2ggd2hhdCByZW1haW5zLS0tJ3NhZCBidXQgdHJ1ZT8nKQAAAAAAAPA/CpgCCIQEEIQEIoYCdGhpcyB3YXMgdGhlIGJlc3QgYm9ubmllIGFuZCBjbHlkZSBtb3ZpZSBpIGhhdmUgc2Vlbi4gaXQgaGFzIG1vcmUgYWNjdXJhdGUgYWNjb3VudHMgb2Ygd2hhdCBoYXBwZW5lZCBhbmQgd2hpbGUgaXQgZG9lc250IGdsb3JpZnkgdGhlaXIgY3JpbWVzIGl0IGNhc3RzIHRoZSBwYWlyIGluIGEgbm9ybWFsIGxpZ2h0LiBpIGdpdmUgdGhpcyBtb3ZpZSBhIDEwLiBpdCBoYXMgZ3JlYXQgYWN0b3JzLHJlYWxpc3RpYyBzY2VuZXMgYW5kIGV4Y2VsbGVudCB3cml0ZXJzLikAAAAAAADwPwrHCQiFBBCFBCK1CXRoaXMgd2FzIHByZXR0eSBiYWQuIHBlZGVzdHJpYW4gd29yayBvciB3b3JzZS4gaSBkb24ndCB0aGluayBpdCB3YXMgaG9tb3Bob2JpYywganVzdCByZWFsbHkgYmFkLiBpZiBhbnl0aGluZyBpdCB3YXMgcmVhbGx5IGFtYXRldXJpc2gsIGxpa2Ugd2hlbiB5b3UncmUgMTQgYW5kIGZpcnN0IGRpc2NvdmVyIGN1cnNlIHdvcmRzIGFuZCBza2luIG1hZ3MuPGJyIC8+PGJyIC8+VGhlIG1haW4gcG9pbnQgb2YgdGhpcyBtb3ZpZSwgdGhlIHJvbWFuY2UsIGZhbGxzIHJlYWxseSBmbGF0LiBJIGNhbid0IGhlbHAgYnV0IHdvbmRlciBpZiB0aGUgd3JpdGVycyBldmVyIGhhZCBhbnkgc2VyaW91cyByZWxhdGlvbnNoaXBzIGJlZm9yZSB0aGlzIG1vdmllLjxiciAvPjxiciAvPnBsb3R0aW5nIGFuZCBwYWNpbmcgYXJlIGhvcnJpYmxlLCBnb2luZyBub3doZXJlIGF0IGFsbC4gb25lIG1pbnV0ZSB3ZSdyZSB3YXRjaGluZyB0aGVzZSBndXlzIGNhdGNoIGNoZWF0ZXJzLCB0aGVuIHdlJ3JlIGF0IGEgZ2F5IGNsdWIsIHRoZW4gd2UncmUgYXQgYSBkYXRlLiBvdXQgb2Ygbm93aGVyZSB0aGUgZ2lybCBhcHBhcmVudGx5IGxpa2VzIGNvbWljcywgYW5kIHRoZW4gdGhleSBzbGVlcCB0b2dldGhlci4gbm9uZSBvZiB0aGlzIGZlZWxzIHJlYWwsIGxpa2UgYW4gZWxlbWVudGFyeSBzY2hvb2wgcHJvZHVjdGlvbiBvZiBTaGFrZXNwZWFyZSBpZiBIYW1sZXQgd2FzIHdyaXR0ZW4gYnkgYSBmcmF0IGJveS48YnIgLz48YnIgLz50aGUgZW5kaW5nIHdhcyBzb21lIGtpbmQgb2YgY3JlZXB5IG92ZXIgdGhlIHRvcCByZXZlbmdlIGZhbnRhc3kgYnkgYSBsb3NlciB3aG8gZ290IGR1bXBlZCBieSBhIGdpcmwuIFVubmVjZXNzYXJ5IGFuZCBhY3R1YWxseSBraW5kIG9mIGRpc3R1cmJpbmcuPGJyIC8+PGJyIC8+U3RpbGwsIHlvdSBoYXZlIHRvIHdhdGNoIGl0LiBXaHk/PGJyIC8+PGJyIC8+QXMgb3RoZXJzIG5vdGVkIHRoZSBkaXJlY3RvcidzIGNvbW1lbnRhcnkgYWN0dWFsbHkgaXMgaGlsYXJpb3VzIC0gd2hhdCBraW5kIG9mIG9mIHByb2Zlc3Npb25hbCB0YWxrcyBhYm91dCAiYmFuZ2luZyIgb3IgImhvb2tpbmcgdXAiIHdpdGggdGhlIGFjdHJlc3Nlcz8gZGlhbG9ndWUgc3Vja2VkLCByZWxhdGlvbnNoaXBzIGxhY2tlZCBjaGVtaXN0cnkuIHlvdSB3aWxsIGJlIG9uIHRoZSBmbG9vciBsYXVnaGluZyBhdCB0aGlzIHByZXRlbnRpb3VzIGphY2thc3MuKQAAAAAAAPA/CpgKCIYEEIYEIoYKdGhpcyB3YXMgb25lIG9mIHRob3NlICQuNTAgY2VudCBkZWFscyBvZiB5b3JlLS0tYW5kIGZhciBtb3JlIGNvbXBsZXggdGhhbiBtb3N0IHJlYWxpemUtLS1hbmQgaXQgd2FzIGluIGNvbG9yISBub3Qgb25seSBhcmUgdGhlIGVmZmVjdHMgZXh0cmFvcmRpbmFyeSwgdnMuIGNyYXAgbGlrZSAnZWFydGggdnMuIHRoZSBmbHlpbmcgc2F1Y2VycyctLS10aGUgcmVhbCAna2lsbGVyJyBpcyB0aGUgJ3VuaXZlcnNhbGl0eSBvZiBwbG90Jy0tLWV2ZXJ5dGhpbmcgaGluZ2VzIG9uIHR3byBwcmluY2lwbGVzLS0tdGhlIGFuY2llbnQgY29uY2VwdCBvZiBhIGhpZGRlbiBpbmNlc3R1b3VzLXRoaW5raW5nIGZhdGhlcidzIGRlc2lyZSBmb3IgaGlzIGRhdWdodGVyLCBhbmQgdGhlIGlkZWEgb2Ygd2hhdCB3b3VsZCBoYXBwZW4gc2hvdWxkIGEgd29ybGQncyB0ZWNoIHJlYWNoIHRoZSBwb2ludCB3aGVyZSBhbGwgY2l0aXplbidzIGRlc2lyZXMgYmVjb21lIG1hbmlmZXN0LjxiciAvPjxiciAvPm5lZWRsZXNzIHRvIHNheSBpZiBldmVyeW9uZSB3ZSB3aXNoZWQgZGVhZCBnZXRzIGRlYWQsIG5vdCBtYW55LCBpZiBhbnkgbGVmdC0tLWFuZCB0aGF0IGJlY2FtZSB0aGUgZmF0ZSBvZiB0aGUgJ2ZvcmJpZGRlbicgcGxhbmV0J3MgcG9wdWxhY2UtLS1yYXRoZXIgbW9kZXJuLCBhY3R1YWxseS4gdW5mb3J0dW5hdGVseSB0aGUgJ2dlYXInIG9mICdUaGUgS3JlbGwnLS0td2FzdGVkIGJ5IGlnbm9yYW5jZSwgcmVtYWlucywgYW5kICdNb3JwaGV1cycsIHRoZSBpbmNlc3R1b3VzIGZhdGhlciwga25vd3MgaG93IHRvIGFjY2VzcyBzdWNoIHRlY2gtLS1hbmQgZG9lcyBzbywgdG8gcHJldmVudCBsb3NpbmcgaGlzIGRhdWdodGVyIHRvIGFub3RoZXIuIGFuY2llbnQgcGxvdCwgYmVhdXRpZnVsbHkgcmVuZGVyZWQuPGJyIC8+PGJyIC8+YW5kIGNvbnNpZGVyaW5nIGl0cyBhZ2UsIGl0IHJlbWFpbnMgYSBzdHVubmluZyBzdXNwZW5zZSwgYWN0aW9uLCBodW1hbi1lbW90aW9uIGNsYXNzaWMtLS1hbmQgdmlzdWFsbHkgdmVyeSBtb2Rlcm4tLS1kb24ndCBwYXNzIHRoaXMgb25lIHVwLS0taXQgcHJlc2FnZXMgYWxsIG1vZGVybiBzY2ktZmktLS1hbmQgaXRzIHBzY3ljaG9sb2dpY2FsIGNvbnRlbnQgZWxldmF0ZXMgaXQsIGJleW9uZCBhbnkgZ2VucmUtLS1hIHRpbWVsZXNzIHdvcmstLS08YnIgLz48YnIgLz5hbmQgdGhlIHNvdW5kdHJhY3QhIHlvdSB3aWxsIHNlZS9oZWFyIG5vIHB1cmUgJ3N5bnRoJyBhbmQgcGVyZmVjdGx5IHN5Y2hlZCBNb29nIGJhY2tncm91bmQtLS1hICdub3QgbWlzcyctLS0pAAAAAAAA8D8KpAcIhwQQhwQikgd0aGlzIHdhcyBvbmUgb2YgdGhlIHdvcnN0IG1vdmllcyBJJ3ZlIGV2ZXIgc2Vlbi4gSSdtIHN0aWxsIG5vdCBzdXJlIGlmIGl0IHdhcyBzZXJpb3VzLCBvciBqdXN0IGEgc2F0aXJlLiBPbmUgb2YgdGhvc2UgbW92aWVzIHRoYXQgdXNlcyBldmVyeSBzdHVwaWQgd2hvIGR1bm5pdCBjbGljaMOpIHRoZXkgY2FuIHRoaW5rIG9mLiBBcnJycmdoLjxiciAvPjxiciAvPkRvbiBKb2huc29uIHdhcyBwcmV0dHkgZ29vZCBpbiBpdCBhY3R1YWxseS4gQnV0IG90aGVyd2lzZSBpdCBzdWNrZWQuIEl0IHdhcyBvdmVyIDEwIHllYXJzIGFnbyB0aGF0IEkgc2F3IGl0LCBidXQgaXQgc3RpbGwgaHVydHMgYW5kIHdvbid0IHN0b3AgbGluZ2VyaW5nIGluIG15IGJyYWluLiA8YnIgLz48YnIgLz5UaGUgbGFzdCBsaW5lIGluIHRoZSBtb3ZpZSByZWFsbHkgc3VtcyB1cCBob3cgc3R1cGlkIGl0IGlzLiBJIHdvbid0IHJ1aW4gaXQgZm9yIHlvdSwgc2hvdWxkIHlvdSB3YW50IHRvIHRlbXB0IGZhdGUgYnkgdmlld2luZyB0aGlzIG1vdmllLiBCdXQgSSBnYXJhbnRlZSB5b3UgYSAqbmdoeWEqIG1vbWVudCBhdCB0aGUgZW5kLCB3aXRoIGEgZmV3IGluIGJldHdlZW4uIElmIHlvdSBoYXZlIG5vdGhpbmcgYmV0dGVyIHRvIGRvLCBhbmQgeW91IGxpa2UgdG8gcG9pbnQgYW5kIGxhdWdoLCB0aGVuIG1heWJlIGl0IG1pZ2h0IGJlIHdvcnRoIHlvdXIgd2hpbGUuIEFkZGl0aW9uYWxseSwgaWYgeW91J3JlIGZvcmNlZCB0byBnbyBvbiBhIGRhdGUgd2l0aCBzb21lb25lIHlvdSByZWFsbHkgZG9uJ3QgbGlrZSwgc3VnZ2VzdCB3YXRjaGluZyB0aGlzIG1vdmllIHRvZ2V0aGVyLCBhbmQgdGhleSdsbCBwcm9iYWJseSBsZWF2ZSB5b3UgYWxvbmUgYWZ0ZXIgdGhleSBzZWUgaXQuIFRoYXQncyBhIGZhaXIgcHJpY2UgdG8gcGF5LCBJIGd1ZXNzLikAAAAAAADwPwrmAgiIBBCIBCLUAnRoaXMgd2FzIG9uZSBvZiB0aGUgbW9zdCBtb3ZpbmcgbW92aWVzIGkgaGF2ZSBldmVyIHNlZW4uIGkgd2FzIGFib3V0IDEyIHllYXJzIG9sZCB3aGVuIGkgd2F0Y2hlZCBpdCBmb3IgdGhlIGZpcnN0IHRpbWUgYW5kIHdoZW5ldmVyIGl0IGlzIG9uIFRWIGkgbXkgZXllcyBhcmUgZ2x1ZWQgdG8gaXQuIHRoZSBhY3RpbmcgYW5kIHBsb3QgYXJlIGFtYXppbmcuIGl0IHNlZW1zIHNvIHRydWUgdG8gcmVhbGl0eSBhbmQgaXQgdG91Y2hlcyBvbiBzbyBtYW55IGNvbnRyb3ZlcnNpYWwgdG9waWNzLiBpIHJlY29tbWVuZCB0aGlzIG1vdmllIHRvIGFueW9uZSBpbnRlcmVzdGVkIGluIGEgZ29vZCBkcmFtYS4pAAAAAAAA8D8KvgUIiQQQiQQirAV0aGlzIHdhcyBvbmUgb2YgdGhlIGZ1bm5pZXN0IGFuZCBpbmZvcm1hdGl2ZSBzaG93cyB0aGF0IEkgaGF2ZSBldmVyIHNlZW4uIFRoaXMgaXMgYSBNVVNUIHNlZSBmb3IgYW55b25lIG92ZXIgdGhlIGFnZSBvZiAxNi4gdGhpcyBzaG93IGhhZCBtZSBhbmQgbXkgMiBib3lzIGxhdWdoaW5nIG91dCBsb3VkIGZyb20gdGhlIGJlZ2lubmluZy4gSSBkb24ndCBrbm93IGlmIGV2ZXJ5dGhpbmcgb24gdGhlIHNob3cgd2FzIHRydWUgYnV0IHRoZSB3YXkgaXQgd2FzIHByZXNlbnRlZCBsZWZ0IGxpdHRsZSBkb3VidCB0aGF0IE1yIFd1aGwgd2FzIG5vdCBvbmx5IHZlcnkga25vd2xlZGdlYWJsZSBidXQgaGUgYWxzbyBoYWQgYSBibGFzdCBwcmVzZW50aW5nIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIHZlcnkgbHVja3kgY29sbGVnZSBraWRzIHdobyB3ZXJlIGluIGF0dGVuZGFuY2UuIElmIE1yIFd1aGwgZXZlciBkZWNpZGVzIHRvIGRvIHRoaXMgZm9ybWF0IGFnYWluIHRoZXkgd2lsbCBoYXZlIHRvIHJlbnQgYSBidWlsZGluZyB0aGUgc2l6ZSBvZiB0aGUgR2VvcmdpYSBEb21lIHRvIGhvbGQgYWxsIHRoZSBwZW9wbGUgd2hvIHdpbGwgd2FudCB0byBzZWUgaXQuIEkgYWdyZWUgd2l0aCB0aGUgaWRlYSBvZiBtYWtpbmcgdGhpcyBhIEhCTyBzZXJpZXMuIEl0IHdvdWxkIGhhdmUgYW4gYW1hemluZyBmb2xsb3dpbmcpAAAAAAAA8D8KwQcIigQQigQirwd0aGlzIHdhcyBtYWRlIGluIHRoYXQgYmVsb3ZlZCBhZ2Uga25vd24gYXMgdGhlIDgwcyBhbmQgc2hvdCBpbiBteSBob21ldG93biBvZiBOZXcgWW9yayBDaXR5LiBhY3R1YWxseSwgdGhpcyBoYXMgYmVjb21lIG9uZSBvZiBteSBmYXZvcml0ZSBiIHNjaS1maSBtb3ZpZXMuIE9oLCBzdXJlLCBpdCByZWFsbHkgc3RpbmtzIHRvIGhpZ2ggaGVsbCwgYnV0IHRoZXJlJ3Mgc28gbXVjaCB0byBtYWtlIGZ1biBvZiwgbGF1Z2gsIGFuZCBlbmpveSB0aGF0IGl0IGJlY29tZXMgbW9yZSB0b2xlcmFibGUgYWZ0ZXIgZXZlcnkgdmlld2luZy48YnIgLz48YnIgLz5TdWNoIGFzOjxiciAvPjxiciAvPlRyeSB0byBmaW5kIHRoZSBzaW1pbGFyaXRpZXMgYmV0d2VlbiB0aGlzIGFuZC4uLndlbGwsIE9LLCB0aGVyZSBpcyBub3RoaW5nIHNpbWlsYXJseSBiYWQgYXMgdGhpcy4gV2VsbCwgZXhjZXB0IENhc3RsZSBvZiBGdU1hbmNodS48YnIgLz48YnIgLz5Tb2NrIHB1cHBldHMgY2FuIGJlIGRhbmdlcm91cyB0byB5b3VyIGhlYWx0aDxiciAvPjxiciAvPkNyZWF0ZSBzdXBlbnNlIGJ5IGRlc2NyaWJpbmcgdGhyb3VnaCB2b2ljZSBvdmVyIHJhdGhlciB0aGFuIHNob3dpbmcgYW55IGltYWdlcnk8YnIgLz48YnIgLz5IYXZlIGxlYWRpbmcgdmlsbGFpbmVzcyAiVmFsZXJpYSIgKHBsYXllZCB3b25kZXJmdWxseSBieSBBbmdlbGlrYSBKYWdlcikgZGVsaXZlciBzb21lIG9mIHRoZSBtb3N0IHJpdmV0aW5nIGxpbmVzIGV2ZXIhITxiciAvPjxiciAvPkxvdHMgb2YgbWVuIGFuZCB3b21lbiBpbiBwb3N0IGFwb2NhbHlwdGljIGZhc2hpb24gKGFrYSBsZWF0aGVyIGJpa2luaXMsIGxvaW4gY2xvdGhzLCBhbmQgZGVhZCBhbmltYWwgZnVyKTxiciAvPjxiciAvPkRvIGJlIGhvcnJpZmllZCBieSB0aGUgZW5kITxiciAvPjxiciAvPiBJJ20gb2ZmIHRvIGhhdmUgYSBzYWxhZC4gVG9vZGxlcyEhKQAAAAAAAPA/Cp4ECIsEEIsEIowEdGhpcyB3YXMgYWJzb2x1dGVseSB0aGUgbW9zdCB0cmFnaWMgcGlsZSBvZiBjaW5lbWEgdG8gd2hpY2ggaSBoYXZlIGV2ZXIgYm9ybiB3aXRuZXNzLiBub3Qgb25seSB3YXMgdGhlIG5hbWUgYSBjb21wbGV0ZSBtaXNub21lci0tc2luY2UgdGhlIGZpbG0gaGFzIG5leHQgdG8gbm90aGluZyB0byBkbyB3aXRoIHBpcmFuaGFzLS1idXQgdGhlIGFjdGluZyBpcyBhcyBob2xsb3cgYW5kIHN0YWxlIGFzIHRoZSBhdHRlbXB0IHRvIGFjdHVhbGx5IG1ha2Ugc29tZSBraW5kIG9mIHBsb3QuIHdoZW4geW91IHdhdGNoIHRoaXMgZmlsbSB5b3UgY2Fubm90IGhlbHAgYnV0IHNwZW5kIGV2ZXJ5IHdha2luZyBzZWNvbmQgcXVlc3Rpb25pbmcgd2hlbiB5b3UndmUgaGFkIGVub3VnaCBhbmQgaXQncyB0aW1lIHRvIHR1cm4gaXQgb2ZmLiB1bmZvcnR1bmF0ZWx5IGkgd2FpdGVkIHVudGlsIHRoZSBlbmQgaW4gbXkgY2FzZS4gdGhhdCdzIHR3byBob3VycyBvZiBteSBsaWZlIHRoYXQgaSB3aWxsIG5ldmVyIGJlIGFibGUgdG8gcmVjbGFpbS4pAAAAAAAA8D8KjAIIjAQQjAQi+gF0aGlzIHdhcyBhIHZlcnkgZ29vZCBtb3ZpZSBpIHdpc2hlZCBpIGNvdWxkIGZpbmQgaXQgaW4gdmhzIHRvIGJ1eSxpIHJlYWxseSBlbmpveWVkIHRoaXMgbW92aWUgaSB3b3VsZCBkZWZpbmFldGx5IHJlY29tbWVuZCB0aGlzIG1vdmllIHRvIHdhdGNoIGkgd291bGQgbGlrZSB0byBzZWUgaXQgYWdhaW4gYnV0IGNhbiBuZXZlciBmaW5kIGl0IGluIHR2LCBpdCB3b3VsZCBiZSB3ZWxsIHdvcnRoIHRoZSB0aW1lIHRvIHdhdGNoIGl0IGFnYWluKQAAAAAAAPA/Cu8MCI0EEI0EIt0MdGhpcyB3YXMgYSB0aG91Z2h0ZnVsIGFuZCB3ZWxsLXNob3QgYW5kIGRpcmVjdGVkIFRWIG1vdmllIHRoYXQgdG9vayBvbiBhIGh1Z2Ugc3ViamVjdCB3aXRoIHByZWNpc2lvbiBhbmQgaW50ZWxsaWdlbmNlLCBhbmQgZ2l2ZXMgaXQgYSBmaWxtIHRyZWF0bWVudCB0aGF0IHdvdWxkIGxvb2sgZ3JlYXQgb24gYSBiaWdnZXIgc2NyZWVuIC0tIHRoZSBwYWxldHRlIGlzIGEgbGl0dGxlIG11dGVkIGZvciBUVi4gaWYgeW91J3JlIGxvb2tpbmcgZm9yIGEgd2FyIGFjdGlvbiBmaWxtIG9yICJib3NuaWEgbGl0ZSIsIHRoaXMgaXNuJ3QgZm9yIHlvdSAtLSBpdCdzIGFib3V0IGFuIG9yZGluYXJ5IHdvbWFuIHdobyB0b29rIG9uIGFuIGV4dHJhb3JkaW5hcnkgY2hhbGxlbmdlIGZvciBodW1hbml0eS4gaWYgeW91IHdhbnQgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgY29uZmxpY3QgYW5kIGhvdyB0aGUgd29yayBvZiBvbmUgd29tYW4gaW5mbHVlbmNlZCB0aGUgd29ybGQgaW4gYSBtYXNzaXZlIHdheSwgd2F0Y2ggdGhpcyBmaWxtIHdoZW4gaXQgY29tZXMgeW91ciB3YXkuIGkgZG9uJ3Qgc2VlIHRoYXQgYSBsb3Qgb2Ygb3RoZXIgVFYgZmlsbXMgaGF2ZSBkZWFsdCB3aXRoIHRoZSBpc3N1ZSBvZiBnZW5vY2lkZSBhbmQgZXRobmljIGhhdHJlZCBhdCB0aGlzIGxldmVsLiB0aGUgc3RvcnkgYXZvaWRzIG9idmlvdXMgZGVtb25pemF0aW9uIG9mICJ0aGUgYmFkIGd1eXMiLCBhbmQgaW5zdGVhZCBzaG93cyB0aGUgZGVuaWFsIGFuZCBldmVyeWRheSBoYXRyZWQgdGhhdCByZXN1bHRlZCBpbiBkZWF0aHMgb2YgdGhvdXNhbmRzLiBpIHdhcyBtb3ZlZCBhdCBzZXZlcmFsIHBvaW50cywgYW5kIG5vdCBpbiBzb21lIG1hbmlwdWxhdGl2ZSBIb2xseXdvb2Qgd2F5IHdpdGggZHJpdmluZyBtdXNpYyBhbmQgZmxhc2h5IG1pc2UtZW4tc2NlbmUsIGJ1dCBhbGxvd2VkIHRvIGRpc2NvdmVyIHRoZSBob3Jyb3IgYW5kIGltcGxpY2F0aW9ucyBhbG9uZyB3aXRoIHRoZSBjaGFyYWN0ZXJzLiB0aGlzIGlzIGEgZmlsbSBicmF2ZSBlbm91Z2ggdG8gbGV0IHRoZSBjb250ZW50IHNwZWFrIGZvciBpdHNlbGYsIGFuZCBrZWVwIHRoZSB2aXN1YWxzIHVuZGVyc3RhdGVkIHRvIHN1cHBvcnQgaXQgd2l0aCBkaWduaXR5LjxiciAvPjxiciAvPnRoZSBhY3RvcnMgZG8gYSBoZWxsdXZhIGpvYiBhdCBicmluZ2luZyB0aGUgaW50ZW5zZSBkcmFtYXRpYyBzY2VuZXMgdG8gbGlmZS4gdGhlIHNjZW5lcyB3aGVyZSB2aWN0aW1zIGdpdmUgdGhlaXIgdGVzdGltb255IGJlZm9yZSB0aGUgd2FyIHRyaWJ1bmFsIGFyZSBwb3dlcmZ1bCwgYW5kIFdlbmR5IENyZXdzb24sIFN0aXBlIEVyY2VnIGFuZCBIZWlubyBGZXJjaCBhcmUgZXhjZWxsZW50LiBXaWxsaWFtIEh1cnQncyBCcml0aXNoIGFjY2VudCBpcyBhd2Z1bCAtLSBubyBvbmUgZWxzZSBoYXMgZ2l2ZW4gaGltIGEgY2hhbmNlIHRvIHBsYXkgYSBCcml0LCBhbmQgd2hlbiBoZSBmaW5hbGx5IGhhcyBpdCwgaGUgYmxvd3MgaXQhIC0tIGFuZCBhbHRob3VnaCBKb2huIENvcmJldHQncyBib2R5IHdhcyBib3JuIHRvIHBsYXkgYSBzb2xkaWVyL2NvbW1hbmRvLCBoZSdzIGEgbGl0dGxlIHRvbyBnZWUtd2hpeiBuaWNlLCBhbHRob3VnaCBoZSBkb2VzIGEgZ29vZCBqb2IuKQAAAAAAAPA/Cr8GCI4EEI4EIq0GdGhpcyB3YXMgYSByZWFsIGd1aWx0IHBsZWFzdXJlIC4uLiBpIHNhdyB0aGUgdHJhaWxlciBhbmQgYWxsIHRoZSBhZHZlcnRpc2luZywgc28gaSBmaWd1cmVkICd3aHkgbm90IGNoZWNrIG91dCB0aGlzIHZoMSBtb3ZpZT8nIGFuZCwgYXMgdGhleSB1c2VkIHRvIHNheSBvbiB0LnYuLCAnaSBjYW4ndCBiZWxpZXZlIGkgd2F0Y2hlZCB0aGUgd2hvbGUgdGhpbmchJyBxdWlubiBhbmQgaGFycmlzIHdlcmUgYmVsaWV2YWJsZSBiZWF0bGUgYm95cywgYW5kLCBhbHRob3VnaCB0aGUgYWNjZW50cyB3ZXJlIHNvcnQgb2Ygb3Zlci10aGUtdG9wIGFuZCBkaWZmaWN1bHQgdG8gZGVjaXBoZXIgYXQgdGltZXMsIGkgZm91bmQgdGhlIGRpYWxvZ3VlIGJlbGlldmFibGUgYXMgd2VsbC4gdGhlIGZpbG0gdG91Y2hlZCB1cG9uIHRoZSB0ZW51b3VzIHJlbGF0aW9uc2hpcCBvZiBsZW4vbWMgYW5kIHNob3dlZCBob3csIGRlZXAgZG93biwgdGhleSB3ZXJlIHNpbXBseSB0d28gZ3V5cyB3aG8gZ3JldyB1cCBjbG9zZSB0b2dldGhlciBhbmQgc2hhcmVkIGEgcGFzc2lvbiBmb3IgbXVzaWMgLSBjb21pbmcgYXQgaXQsIHRob3VnaCwgd2l0aCBkaWZmZXJlbnQgc2V0cyBvZiBpc3N1ZXMgYW5kIHBlcnNvbmFsIG5lZWRzLiB5b3UgZmluZCB5b3Vyc2VsZiB3aXNoaW5nIHRoZXknZCBob3BwZWQgaW4gdGhlIGNhYiB0byBzbmwgZm9yIGFuIGltcHJvbXB0dSByZXVuaW9uIHRoYXQgd291bGQgaGF2ZSBrbm9ja2VkIHRoZSB3b3JsZCdzIHNvY2tzIG9mZiwgYnV0IHlvdSBhbHNvIGdhaW4gYSBncmVhdGVyIGFwcHJlY2lhdGlvbiBmb3Igd2h5IHRoZXkgZGlkbid0KQAAAAAAAPA/CrcBCI8EEI8EIqUBdGhpcyB3YXMgYSBnZXQgdXAgYW5kIGdvIGhvcnJvciBtb3ZpZSB3aXRoIGFuIGludGVsbGlnZW50IGNhc3QgYW5kIGEgZGlyZWN0b3Igd2l0aCBncmVhdCB2aXNpb24gdG8gcmVhbGx5IGNhcHR1cmUgdGhlIG1vb2Qgb2YgdGhlIHN0b3J5IGkgaGlnaGx5IHJlY29tbWVuZCB0aGlzIG1vdmllKQAAAAAAAPA/CpYECJAEEJAEIoQEdGhpcyB3YXMgYSBmYXZvcml0ZSBDaHJpc3RtYXMgU3BlY2lhbCB0aGF0IEkgd2lzaCB0aGF0IHRoZXkgd291bGQgcmVsZWFzZSBvbiB2aHMgb3IgZHZkICwgc2luY2UgbXkgMzMgUlBNIGdvdCBsb3N0LGFuZCBhbnkgY2Fzc2V0dGVzIEkgbWFkZSBhcmUgYWxzbyBsb25nIGdvbmUuPGJyIC8+PGJyIC8+SSBhbSBub3QgZXZlbiBhIGJpZyBKb2huIERlbnZlciBmYW4gYnV0IHdhcyB2ZXJ5IGltcHJlc3NlZCB3aXRoIHRoZSBtdXNpYyAsIHdoaWNoIHdhcyBtb3N0bHkgdHJhZGl0aW9uYWwgZmF2b3JpdGVzIHdpdGggYSBtdXBwZXQgc3BpbiAoIGVzcCBMaXR0bGUgU3QuIE5pY2sgISApIEl0IGFsc28gY29udGFpbmVkIGEgZmV3IGxpdHRsZSBrbm93biBzb25ncyAoIG9yaWdpbmFsID8gKS48YnIgLz48YnIgLz5FdmVuIHRob3VnaCBpdCB3YXMgZG9uZSBhdCB0aGUgZW5kIG9mIHRoZSAnNzAncyB0aGlzIHNob3cgaGFkIGEgdGltZWxlc3MgZmVlbCB0byBpdC4gSG9waW5nIHRvIGZpbmQgYSBjb3B5IHNvb24gISEhKQAAAAAAAPA/CqEFCJEEEJEEIo8FdGhpcyB3YXMgYSBmYW50YXN0aWMgZXBpc29kZS4gaSBzYXcgYSBjbGlwIGZyb20gaXQgb24gWW91VHViZSwgYW5kIGkgdm93ZWQgdGhhdCBzaG91bGQgaXQgZXZlciBzaG93IG9uIFRWLCBpIHdvdWxkIGdsdWUgbXlzZWxmIHRvIHRoZSBzZXQgaW4gb3JkZXIgdG8gd2F0Y2guIGkgd291bmQgdXAgd2F0Y2hpbmcgaXQgd2l0aCBhIGZyaWVuZCBvZiBtaW5lLCB3aG8gaGFwcGVucyB0byBiZSBnYXksIGFuZCB0aGUgdHdvIG9mIHVzIGNyaWVkIGF0IHRoZSBlbmQuIHRoaXMgd2FzIGEgdHJ1bHkgd2VsbC13cml0dGVuLCBoZWFydGZlbHQgZXBpc29kZSBvZiB0aGUgZm9yYmlkZGVuIGxvdmUgYmV0d2VlbiB0d28gY29wcyB3aG8sIGkgZmVsdCwgcmVhbGx5IHdlcmUgKGluIENvb3AncyB3b3JkcykgInRoZSBMdWNreSBPbmVzIi4gaXQgaXMgZXBpc29kZXMgbGlrZSB0aGlzIG9uZSB0aGF0IHJlYWxseSBtYWtlIENvbGQgQ2FzZSBvbmUgb2YgdGhlIG1vc3QgY2FwdGl2YXRpbmcgYW5kIG11Y2gtbG92ZWQgd29ya3Mgb2YgdGVsZXZpc2lvbiBtYWdpYyBvbiBDQlMuIGkgYW54aW91c2x5IGF3YWl0IG1vcmUgZXBpc29kZXMsIGFuZCBhIHJlLXJ1biBvZiAiRm9yZXZlciBCbHVlIiBiZWNhdXNlIGkgd2lsbCBhbHdheXMgd2F0Y2ggaXQgYWdhaW4gYW5kIGFnYWluLikAAAAAAADwPwrHBgiSBBCSBCK1BnRoaXMgd2FzIGEgZmFidWxvdXMgYWRhcHRhdGlvbiBvZiBKYW5lIEV5cmUuIHRoZSBvbmx5IHByb2JsZW0gaSBoYWQgd2l0aCBpdCB3YXMgdGhhdCBpIGRpZG4ndCBsaWtlIFplbGFoIENsYXJrZS4gaSB0aG91Z2h0IHNoZSB3YXMgdG9vIG9sZCBhbmQgbWFkZSBKYW5lIHNlZW0gbXVjaCB0byB0aW1pZC4gaW4gdGhlIGJvb2sgSmFuZSBzZWVtZWQgbGlrZSBhIG11Y2ggc3Ryb25nZXIgY2hhcmFjdGVyLiBpIHdhcyByZWFsbHkgYW5ub3llZCBieSB0aGlzIHBvcnRyYXlhbCBvZiBoZXIuIHRoZSBwYXJ0IHdoZXJlIGl0J3MgdGhlIG1vcm5pbmcgYWZ0ZXIgUm9jaGVzdGVyIGFza3MgaGVyIHRvIG1hcnJ5IGhpbSBhbmQgc2hlIHJ1bnMgdXAgdG8gaGltIGFuZCBodWdzIGhpbSBhbHdheXMgbWFrZXMgbWUgbGF1Z2guIGkgdGhpbmsgdGhleSBtYWRlIGEgYmFkIGNob2ljZSBpbiBjYXN0aW5nIGhlci4gYnV0IERhbHRvbiB3YXMgYWJzb2x1dGVseSB3b25kZXJmdWwgYXMgUm9jaGVzdGVyLiBoZSBtYWtlcyB0aGlzIHZlcnNpb24gb2YgSmFuZSBFeXJlIHdvcnRoIHNlZWluZy4gYW5vdGhlciB0aGluZyB0aGF0IG1hZGUgdGhpcyB2ZXJzaW9uIG5vdCBxdWl0ZSAxMDAlIHdhcyB0aGUgcXVhbGl0eSBvZiBmaWxtLiBpIGtub3cgaXQgd2FzIG1hZGUgaW4gdGhlIGVpZ2h0aWVzIGZvciBUVi4gaWYgaXQgaGFkIGJlZW4gYSBmZWF0dXJlIGZpbG0sIGFuZCBiZXR0ZXIgcXVhbGl0eSwgaXQgd291bGQgaGF2ZSBiZWVuIHBlcmZlY3QuIG15IG1haW4gY29tcGxhaW50IGhvd2V2ZXIsIGlzIHRoYXQgWmVsYWggQ2xhcmtlIHdhcyBkZWZpbml0ZWx5IHRvbyBvbGQuKQAAAAAAAPA/Cv0BCJMEEJMEIusBdGhpcyB2aWRlbyBpcyAxMDAlIHJldGFyZGVkLiBiZXNpZGVzIHRoZSBicmFpbiBjZWxsIGtpbGxpbmcgYWN0aW5nIGFuZCBwbG90LCBpdCdzIHdheSB0b28gbG9uZy4gZG9uJ3Qgd2FzdGUgeW91ciBtb25leSBhdCB0aGUgdmlkZW8gc3RvcmUuIGkgYWN0dWFsbHkgd2FzIG1hZCB0aGF0IGkgc2F0IHRocm91Z2ggdGhpcyBnYXJiYWdlIGFuZCBzcGVudCBtb25leSBvbiBpdC4ganVzdCBhYnNvbHV0ZWx5IGF3ZnVsLikAAAAAAADwPwqcAgiUBBCUBCKKAnRoaXMgdG9vayBtZSBiYWNrIHRvIG15IGNoaWxkaG9vZCBpbiB0aGUgMTk1MCAncyBzbyBjb3JueSBidXQganVzdCBmYWIgbm8gb25lIGV2ZXIgY291bGQgcGxheSBGTEFTSCBHT1JET04gbGlrZSBMQVJSWSBCVVNURVIgQ1JBQkJFLCBqdXN0IGdyZWF0LiBpIGhhdmUgdHdvIG1vcmUgc2VyaWVzIHRvIHZpZXcgZmxhc2ggZ29yZG9uJ3MgdHJpcCB0byBtYXJzIGFuZCBmbGFzaCBnb3Jkb24gY29ucXVlcnMgdGhlIHVuaXZlcnNlIGNhbm5vdCB3YWl0PGJyIC8+PGJyIC8+KQAAAAAAAPA/Cv8GCJUEEJUEIu0GdGhpcyBzaG93IGp1c3Qgc3Vja3MuIGkgZG9uJ3QgdGhpbmsgaSBldmVuIG5lZWQgdG8gc2F5IGl0IG9yIHdoeSBiZWNhdXNlIGp1ZGdpbmcgYnkgdGhlIG51bWJlciBvZiBjb21tZW50cyBhbHJlYWR5IGkgYW0ganVzdCByZXBlYXRpbmcgZXZlcnl0aGluZy4ga2V5cyB0byB0aGUgdmlwIGlzIGxpa2UgdHVybmluZyBvbiB5b3VyIFRWIGFuZCBoYXZpbmcgaXQgdGhyb3cgcG9vIGF0IHlvdS4gdGhhdCBpcyBleGFjdGx5IHdoYXQgaXQgaXMgbGlrZSBpIGFtIG5vdCBldmVuIGV4YWdnZXJhdGluZyBldmVuIGEgbGl0dGxlIGJpdC4gdGhlc2UgZ3V5cyBhcmUgc28gc3R1cGlkLCBub3QgZnVubnkgYW5kIG5vdCBzbW9vdGggd2l0aCB0aGUgbGFkaWVzIHRoYXQgaXQncyBub3QgZXZlbiBmdW5ueS1jYXN1ZS1pdHMtc3R1cGlkLiBpIHNhdCB0aHJvdWdoIGZvdXIgZXBpc29kZXMgYW5kIGkgd2FudCBteSB0d28gaG91cnMgYmFjay4gd2hlcmUgZG8gdGhleSBmaW5kIHRoZSBjb250ZXN0YW50cyBiZWNhdXNlIHRoZXkgYXJlIG9idmlvdXNseSBkZWZpY2llbnQgbWVudGFsbHkuIGlmIGkgd2FzIHRoZSBtYW4gd2hvIGNhbWUgdXAgd2l0aCB0aGlzIGlkZWEgZm9yIGEgc2hvdyBhbmQgcHV0IGl0IG9uIFRWIGkgd291bGQgZG8gdGhlIHdvcmxkIGEgZmF2b3VyIGFuZCBqdW1wIG9mZiB0aGUgdGFsbGVzdCBidWlsZGluZyBpIGNvdWxkIGZpbmQuIGhvdyBkb2VzIGdhcmJhZ2UgbGlrZSB0aGlzIGdldCBvbiBUVj8gZXNwZWNpYWxseSB0aGUgY29tZWR5IG5ldHdvcmsgc2hvdWxkbid0IGEgc2hvdyBvbiBzb21ldGhpbmcgY2FsbGVkIHRoZSBjb21lZHkgbmV0d29yayBhdCBsZWFzdCBiZSBhIGNvbWVkeSBzaG93IG9yIG1heWJlIGJlIGZ1bm55IHNvIG9mdGVuPykAAAAAAADwPwqNBQiWBBCWBCL7BHRoaXMgc2hvdyBpcyBwcmV0dHkgYWxyaWdodCBhbmQgZnVuIHRvIHdhdGNoLCBpdHMgYSBncmVhdCBEaXNuZXkgY2hhbm5lbCBzaG93cyBhbmQgc29tZXRpbWVzIGVudGVydGFpbmluZy48YnIgLz48YnIgLz5JIHJlYWxseSBlbmpveWVkIHRoZSBmaXJzdCBzZWFzb24gYnV0IGkgaGF0ZWQgdGhlIHNlY29uZCBhbmQgdGhpcmQgc2Vhc29ucy4gVGhpcyBzaG93IGhhcyBjb21wbGV0ZWx5IGNoYW5nZWQgYXJvdW5kLiBJbiB0aGUgZmlyc3Qgc2Vhc29uIGl0IHdhcyBtb3JlIGFib3V0IHNjaWVuY2UgYW5kIGFuaW1hbHMsIGFsbCB0aGF0IGlzIGdvbmUgbm93IGluIHRoZSBzZWFzb24gYW5kIHRoaXJkIHNlYXNvbi4gSXRzIG1vcmUgYWJvdXQgaGVyIGxpZmUgYW5kIGRhdGluZy4gRXZlciBzaW5jZSB0aGF0IGdheSBraWQgKEJlbikgY2FtZSBhbG9uZywgdGhpcyBzaG93IGhhcyBzdWNrZWQuIFRoZSB3cml0ZXJzIHRvb2sgYSBwZXJmZWN0bHkgZ29vZCBraWQgc2hvdyBhbmQgY2hhbmdlZCBpdCB0byBhIGNyYXBweSB0ZWVuIGNvbWVkeS4gRGlzbmV5IHRvb2sgYSB0dXJuIGZvciB0aGUgd29yc2UuIEkgY2FudCBzdGFuZCB0byB3YXRjaCB0aGUgbmV3ZXN0IGVwaXNvZGVzIGFueW1vcmUsIHRoZXkncmUgYWxsIGdhcmJhZ2UuKQAAAAAAAPA/CqQFCJcEEJcEIpIFdGhpcyBzaG93IGlzIG9uZSBvZiB0aGUgd29yc3Qgc2hvd3Mgb2YgQUxMIFRJTUUhIGFic29sdXRlbHkgbm8gb3JpZ2luYWwgam9rZXMgYW5kIHRoZXkncmUgYWx3YXlzIGEgeWVhciBsYXRlLiBsaWtlIGluIDIwMDkgdGhleSB3aWxsIGZpbmFsbHkgc2F5IHNvbWV0aGluZyBhYm91dCBNaWNoYWVsIFZpY2sncyBkb2dmaWdodHMuIGFsbCBvZiB0aGUgY2FzdCBtZW1iZXJzIGFyZSBwZW9wbGUgd2hvIHdhbnRlZCB0byBiZSBvbiBTLk4uTCBidXQgaGFkIHRvIGdvIHRvIHRoZSBsb3dlc3Qgb2YgdGhlIGxvdywgbWFkIFRWLml0cyBhbiBob3VyIG9mIG1hZCBtYWdhemluZSBqb2tlcyB3aXRjaCBhcmVuJ3QgZnVubnkgdG8gYmVnaW4gd2l0aCwgdG9sZCBieSB0ZXJyaWJsZSBKb2huIFN0ZXdhcnQgd2FubmEgYmVlcy4gc28gaWYgeW91IGhhdmUgYW55IHByb2JsZW0gdGVsbCBtZSBpZCBsb3ZlIHRvIGhlYXIgdGhlIG9waW5pb24gb2YgdGhlIDMgcGVvcGxlIHdobyB3YXRjaCB0aGlzIHNob3cuIGZhbWlseSBndXkgcHV0IGl0IHdlbGwgIk9zYW1hIGJpbiBMYWRpbiB3YXMgaGlkaW5nIGluIHRoZSBvbmUgcGxhY2Ugbm8gb25lIHdvdWxkIGxvb2ssIHRoZSBjYXN0IG9mIG1hZCBUVi4gVGhlcmUgaXMgYSByZWFzb24gd2h5IG5vIG9uZSB3YXRjaGVzIHRoZSBzaG93LikAAAAAAADwPwqiCAiYBBCYBCKQCHRoaXMgc2hvdyBpcyBqdXN0IHBsYWluIGF3ZnVsLiBJIGxpa2VkIHRvIHdhdGNoIERyYWtlIGFuZCBKb3NoLCB3aGljaCB3YXMgZ3JlYXQsIGFuZCBiZWZvcmUgdGhhdCBUaGUgQW1hbmRhIHNob3csIGFsc28gZnVubnksIGJ1dCB0aGlzIGlzIGp1c3QgQVdGVUwuIGluIG15IG9waW5pb24gd2F0Y2hpbmcgdGhpcyBmZWx0IGxpa2Ugd2F0Y2hpbmcgdGhvc2UgLS0tIG1vdmllcyBmcm9tIFNlbHR6YmVyZywgcGFpbmZ1bCBhbmQgdW5jbGVhdmVyLiB0aGlzIGlzIGFib3V0IDMgZHVtYkAkJCBraWRzIHdobyBtYWtlIGEgY3JhcHB5IHdlYi1zaG93ICh3aGlsZSBzdGVhbGluZyB0aGUgaG9sZSBJdGhpbmcpIHdoaWxlIHRoZWlyIHJldGFyZGVkIGJyb3RoZXIgaXMgbWFraW5nIHNjdWxwdHVyZXMgKGhlIGhhcyBubyBsaWZlKS4gdGhlIGNhc3QgaXMgY3JhcCwgTWVnYW4gZnJvbSBkcmFrZSBhbmQgam9zaCBpcyBjYXJseSAoQUhISEhISCEpYSB1Z2x5IGIhdGNoIGlzIHNhbSBhbmQgc29tZSBraWQgdGhleSBwdWxsZWQgb2ZmIHRoZSBzdHJlZXQgcGxheXMgZnJlZC4gYWxsIGkgc2F3IGZyb20gdGhpcyAodWdnKSBhcmUgcmFuZG9tICJqb2tlcyIgdGhhdCBpbmNsdWRlIHRoZSBicm90aGVyIG1ha2luZyBhIGNsYXktbWF0aW9uIGZpbG0sIGhlIGFsc28gcGxheWVkIGFuIGFyY2FkZSBnYW1lIGNhbGxlZCBQQUMtcmF0IChnZW5pb3VzKSwgU2FtIGFuZCBDYXJseSBiZWluZyByZXRhcmRzIG9uIHRoZWlyIHdlYiBzaG93LCBhbmQgRnJlZCBiZWluZyBhIGRvcmsuIHRoZSBvbmx5IGVwaXNvZGUgYSBzYXcgKGNhbnQgcmVtZW1iZXIgdGhlIHRpdGxlKSB3aGVyZSBGcmVkIGdldHMgYmFkIGx1Y2sgYnkgbm90IGZvcmV3YXJkaW5nIGFuIGVtYWlsLmkgZmluZCB2aWRlb3Mgb24geW91dHViZSBmdW5uaWVyIHRoYW4gdGhpcyBqdW5rLiBhbmQgd2h5IHRoZSBoZWxsIGRvIHRoZXkgZ2V0IHlvdXR1YmUgamFja0AkJCBmcmVkLCBnZXQgQVZHTiB0byBjYW5jZWwgdGhlIHNob3cgd2l0aCBoaXMgcG90dHkgbW91dGguIGp1c3Qgc2tpcCB0aGlzIHNob3cuKQAAAAAAAPA/CpsICJkEEJkEIokIdGhpcyBzaG93IGlzIGF3ZnVsLiBubyBjb21lZHksIG5vIHBsb3Qgbm8gZ29vZCBjaGFyYWN0ZXJzLiBBbWVyaWNhIGFyZSB5b3UgYmxpbmQgZ2l2ZSB0aGUgYXdhcmQgdG8gcmVhbCBzaG93cy4gaSBoYXRlIHRoaXMgc2hvdyBhbG9uZyB3aXRoIDMwIHJvY2suIGhvbmVzdGx5IEknbSBzbyBnbGFkIHRoZXkgY2FuY2VsZWQgdGhpcyBzaG93LiB0aGFuayB5b3UgQ0JTLiBrZWVwIHR3byBhbmQgYSBoYWxmIG1lbiwga2VlcCBDaHJpc3RpbmUsIGtlZXAgcnVsZXMgb2YgZW5nYWdlbWVudCBrZWVwIGhvdyBpIG1lZXQgeW91ciBtb3RoZXIgd2hpY2ggcmVhbGx5IGlzbid0IGZ1bm55IGJ1dCBhIGxvdCBmdW5uaWVyIHRoYW4gdGhpcy4gdGhpcyBzaG93IGlzIGEgcmlwIG9mZiBvZiBmcmllbmRzLiB3aXRoIHRoZSBzYW1lIGRpcmVjdG9yIHNvIHRoYXRzIG9rYXkuIGJ1dCBrZWVwIHRoaXMgc2hvdyBnb25lIGFuZCBuZXZlciBicmluZyBpdCBiYWNrLiBuZXZlciBldmVyIGV2ZXIgZXZlci4gdGhlIG9ubHkgcmVhc29uIGkgZGlkbid0IGdpdmUgaXQgYSAxIHJhdGluZyBpcyBiZWNhdXNlIGl0IGtlZXAgbXkgYXdha2UgaW5zdGVhZCBvZiBhc2xlZXAuIHRob3NlIGFyZSB0aGUgdHlwZXMgb2YgbW92aWVzIG9yIFRWIHNob3dzIHRoYXQgaSBnaXZlIGEgb25lLiB0aGUgb25seSByZWFzb24gaSB3YXMgc3RpbGwgYXdha2Ugd2FzIGJlY2F1c2Ugb2YgdGhlIGF1ZGllbmNlcyBsYXVnaHRlciBhbmQgaSB3YXMgbG9va2luZyBmb3J3YXJkIHRvIHRoZSBuZXh0IHNob3cuIGkgcmVhbGx5IHdpc2ggdGhpcyBzaG93IHdhcyBmdW5ueSBzb3JyeSBidXQgbXkgb3BpbmlvbiBzdHVwaWQuIHZlcnkgc3R1cGlkLiBpIGRvbid0IHNlZSB3aHkgZXZlcnlvbmUgbG92ZXMgaXQuIG15IG9waW5pb24gYWdhaW4uIGJ1dCBpIGFsc28gZmluZCBiaWcgYmFuZyB0aGVvcnkga2luZGEgc3R1cGlkLiBteSBiYWQgc21hcnQuIHRoZSBjbGFzcyBieWUgYnllIG5vdyBpIGhhdmUgYSBzbWlsZSBhbmQgaXQgaXMgbm90IGZyb20gd2F0Y2hpbmcgeW91ciBzaG93LikAAAAAAADwPwq/BQiaBBCaBCKtBXRoaXMgc2hvcnQgZmlsbSB0cmFpbGVyIGlzIGJhc2ljYWxseSBhYm91dCBTdXBlcm1hbiBhbmQgQmF0bWFuIHdvcmtpbmcgdG9nZXRoZXIgYW5kIGZvcm1pbmcgYW4gdW5lYXN5IGFsbGlhbmNlLm9idmlvdXNseSx0aGUgdHdvIGNoYXJhY3RlcnMgaGF2ZSB2YXN0bHkgZGlmZmVyaW5nIHZpZXdzIG9uIGhvdyB0byBkZWFsIHdpdGggY3JpbWUgYW5kIHdoYXQgY29uc3RpdHV0ZXMgcHVuaXNobWVudC5pdCdzIGEgbG90IG9mIGZ1biB0byBzZWUgdGhlc2UgdHdvIGljb25pYyBjaGFyYWN0ZXJzIHRyeSB0byBnZXQgYWxvbmcuaSB3b24ndCBnbyBpbnQgdG8gdGhlIHN0b3J5bGluZSBoZXJlLmJ1dCBpIHdpbGwgZ2V0IGludG8gdGhlIGFjdGluZyx3aGljaCBpcyB0ZXJyaWZpYy5ldmVyeW9uZSBpcyB3ZWxsIGNhc3QudGhlIHR3byBhY3RvcnMgcGxheWluZyBTdXBlcm1hbiBhbmQgQmF0bWFuIGFyZSB3ZWxsIHN1aXRlZCB0byB0aGVpciBjaGFyYWN0ZXJzLnRoZSBzYW1lIGZpbG1tYWtlcnMgdGhhdCBtYWRlIEJhdG1hbjogRGVhZCBFbmQgYW5kIEdyYXlzb24gYWxzbyBtYWRlIHRoaXMgc2hvcnQgZmlsbS5vZiB0aGUgdGhyZWUsaSBwcm9iYWJseSBsaWtlZCB0aGlzIG9uZSB0aGUgbGVhc3QsYnV0IGkgc3RpbGwgdGhvdWdodCBpdCB3YXMgd2VsbCBkb25lLmZvciBtZSxXb3JsZCdzIGZpbmVzdCBpcyBhIDcvMTApAAAAAAAA8D8K6AUImwQQmwQi1gV0aGlzIHJlYWxseSBpcyBhbiAib2theSIgc2VyaWVzLi4gZXZlcnlvbmUgaW4gaXQgaXMgcHJldHR5IGdvb2QuIGJ1dCBpIGp1c3QgY2FuJ3QgdGFrZSBSZWJhLiBzaGUncyB0cnlpbmcgdG8gYmUgZnVubnkgYnV0IHNoZSBqdXN0IGlzbid0IGFuZCB0aGVuIHNoZSBnb3QgYSBzdHVwaWQgYWNjZW50ISEgaWYgdGhleSB0b29rIGhlciBvdXQgb2YgdGhlIHNob3cgaSB3b3VsZCBsb3ZlIHRvIHNlZSBpdCBldmVyeSBkYXkuLjxiciAvPjxiciAvPmkgaGF2ZSBiZWVuIHdhdGNoaW5nIHRoZSBzaG93IGluIDEwIG1pbiBub3cgYW5kIGFzIGkgc2FpZCBiZWZvcmUsIFJlYmEgSVMgZGVzdHJveWluZyB0aGUgc2hvdy4gaG93ZXZlciB0aGUgMjAgeWVhciBvbGQgZ3V5IChkb250IGtub3cgaGlzIG5hbWUpIGJ1dCBoZSdzIHNvb29vIGZ1bm55LCBhbmQgaGUncyByZWFsbHkgc2F2aW5nIGl0IGFsbC4uPGJyIC8+PGJyIC8+c28gaGVyZSdzIHRoZSByZWNpcGUgdG8gZ2V0IGEgZ3JlYXQgc2hvdy4ga2ljayBSZWJhIG9mIGl0IGFuZCB0aGVuIHB1dCB0aGUgMjAgeWVhciBvbGQgZ3V5IGludG8gdGhlIGxlYWQgcm9sZS48YnIgLz48YnIgLz5pIHJlYWxseSBob3BlIHNvbWVvbmUgb3V0IHRoZXJlIGFncmVlcyB3aXRoIG1lIGFuZCB0aGlua3MgKGxpa2UgbWUpIHRoYXQgdGhleSBzaG91bGQga2ljayBSZWJhIG9mIHRoZSBzaG93IGFuZCBwdXQgc29tZW9uZSBlbHNlIGluIHRoZSBsZWFkIHJvbGUpAAAAAAAA8D8K5gMInAQQnAQi1AN0aGlzIHBhcnRpY3VsYXIgdGl0bGUgaXMgdmVyeSBpbnRlcmVzdGluZy4gdGhlIHdob2xlIG1vdmllIHdhcyBsaWtlIHdhdGNoaW5nIGEgbmluamEgUlBHLCB3aGljaCBpcyByZWFsbHkgY29vbC4gdGhyZWUgbWFnaWNhbCBzd29yZHMsIHRocmVlIGNsYW5zLCBhIGhvcnJpYmxlIGRlbW9uLCBhIHBvbGl0aWNhbCBwb3dlciwgeW90b2RlbiBoYXMgaXQgYWxsLiB0aGUgYW5pbWF0aW9uIGlzIGRlY2VudCwgYnV0IGEgbGl0dGxlIGdyYWlueSwgdGhlIHN0b3J5IGlzIHRvcCBub3RjaCwgYW5kIHRoZSBmaWdodCBzY2VuZXMgYXJlIHJlYWwgY29vbC4gb25lIHRoaW5nIHRoYXQgcmVhbGx5IGxvb2tzIGdvb2QgaW4gdGhpcyBtb3ZpZSBhcmUgdGhlIG1vbnN0ZXJzLiB0aGV5IGFyZSBwcmV0dHkgZnJlYWt5LiBpZiB5b3UgbGlrZWQgYmxvb2QgcmVpZ24gYW5kIG5pbmphIHNjcm9sbCwgeW90b2RlbiBpcyB0aGUgb25lIHRvIHNlZS4pAAAAAAAA8D8KowUInQQQnQQikQV0aGlzIG9uZSBvZiB0aGUgYmVzdCBjZWxlYnJpdHkncyByZWFsaXR5IHNob3dzIGEgZXZlciBzYXcuIHdlIGNhbiBzZWUgdGhlIGNvbmNlcnRzIHdlIGNhbiBzZWUgdGhlIGxpZmUgb2YgQnJpdG5leSwgaSBsb3ZlIHRoZSBmaXZlIGVwaXNvZGVzLiBpIHdhcyBhbHdheXMgYmVpbmcgc3VycHJpc2VkIGJ5IEJyaXRuZXkgYW5kIHRoZSBzdWJqZWN0cyBvZiB0aGUgc2hvdyBpIHRoaW5rIHRoYXQgc29tZSBwZW9wbGUgZG9uJ3Qgd2F0Y2ggdGhlIHNob3cgYXQgYWxsIHdlIGNhbiBob3cgYSBncmVhdCBwZXJzb24gc2hlIGhpcy4gc2hlIGhpcyByZWFsbHkgZnVubnkgcmVhbGx5IGdlbnRsZSBhbmQgc2hlIGxvdmVzIGhlciBmYW5zIGFuZCB3ZSBjYW4gc2VlIGhvdyBzaGUgbG92ZXMgaGVyIHdvcmsuIGkganVzdCBkb24ndCBnaXZlIGEgMTAgYmVjYXVzZSBvZiBrLWZlZCBoZSBoaXMgYSByZWFsIGplcmsgaGUgZG9lc24ndCBzZWVtIHRvIGxpa2UgQnJpdG5leSBhdCBhbGwuIEkgdGhleSBtYWtlIGEgc2Vjb25kIHNlYXNvbiBvZiB0aGlzIGdyZWF0IHNob3cgYmVjYXVzZSBpdCBzaG93cyBhdCBzb21lIHBlb3BsZSBob3cgQnJpdG5leSByZWFsbHkgaXMuIEdvIEJyaXRuZXkgeW91ciB0aGUgYmVzdCBhbmQgeW91IHdpbGwgbmV2ZXIgbGVhdmUgb3VyIGhlYXJ0cy4pAAAAAAAA8D8KuAUIngQQngQipgV0aGlzIG9uZSBpcyBvdXQgdGhlcmUuIE5vdCBtdWNoIHRvIHNheSBhYm91dCBpdCBleGNlcHQgdGhhdCBpdCBkZWFscyB3aXRoIGEgcmFyZWx5IHRvdWNoZWQgdG9waWMgaW4gZmlsbXMgb2YgYmVhc3RpYWxpdHkuIEkgY2FuIHNlZSB3aHkgdGhpcyBmaWxtIHdhcyBiYW5uZWQgZm9yIHNvIGxvbmcsIHRoZSB0b3BpY3MgZGVhbHQgd2l0aGluIHRoZSBmaWxtIGFyZSBzdGlsbCBhIGxpdHRsZSB0YWJvbyBmb3IgbW9zdCBvZiB0aGUgd29ybGQgd2lsbCBzYXkgdGhlIGVyb3RpY2lzbSBpbiB0aGUgZmlsbSBpcyB3ZWxsIGRlc2VydmVkIGFuZCBmaXRzIGluIHdpdGggdGhlIG1vb2Qgb2YgdGhlIGZpbG0uIEl0J3MgYSBnb29kIGZpbG0gdGhhdCBpcyB3ZWxsIGFjdGVkIGFuZCBzZXJ2ZXMgYSBwdXJwb3NlIC4uLnRvIHNob2NrIHRoZSB2aWV3ZXIgYW5kIGNyb3NzIGJvdW5kYXJpZXMgdGhhdCB3ZSBkb24ndCBzZWUgdG8gb2Z0ZW4gaW4gZmlsbXMuIEkgY2FtZSBhY3Jvc3MgdGhpcyBmaWxtIG9uIHRoZSBuZXQgdGhhdCBJIHRob3VnaHQgSSBtaWdodCBjaGVjayBvdXQuIEkgZW5qb3llZCB0aGUgZmlsbSBhcyBpdCBpcyB0aG91Z2h0IHByb3Zva2luZyBhbmQgc29tZXdoYXQgZXJvdGljIGF0IHRoZSBzYW1lIHRpbWUuIFNvbWV0aGluZyB5b3UgZG9uJ3QgcmFyZWx5IHNlZSBpbiBmaWxtcyB0b2RheS4pAAAAAAAA8D8KyQUInwQQnwQitwV0aGlzIG9uZSBpcyBhYm91dCBhIGhvbWljaWRlIGRldGVjdGl2ZSB3aG8gYmF0dGxlcyBhIGNvdXBsZSBvZiB5b3VuZyByaWNoIGtpZHMgd2hvIGhhdmUgbm90aGluZyBiZXR0ZXIgdG8gZG8gdGhhbiBwbGFuIGFuIGludHJpY2F0ZSBtdXJkZXIgYW5kIGNvdmVyIGl0IHVwLCB0aGV5IHNlZW0gdG8gb3V0d2l0IHRoZSBwb2xpY2UgZm9yY2Ugc2VlbWluZ2x5IGF0IHdpbGwuIHRoZXkgdGF1bnQgdGhlIGRldGVjdGl2ZSBieSBwbGFudGluZyBjbHVlcyBhbmQgbGVhZGluZyB0aGVtIG9mZiBvbiBhIHdpbGQgZ29vc2UgY2hhc2UuIHRoaXMgb25lIGhhcyBhIGRlY2VudCBwbG90IHdpdGggYSBmZXcgZ29vZCB0d2lzdHMgYXQgdGhlIGVuZCBvZiB0aGUgbW92aWUsIFNhbmRyYSBCdWxsb2NrIGRvZXMgYSBmaW5lIGpvYiBpbiB0aGlzIG9uZSBhcyBhIHdvbWFuIG9uIHRoZSBlZGdlLCBub3Qgc3VyZSBvZiBoZXJzZWxmIGFuZCBiYXR0bGluZyBoZXIgaW5uZXIgZGVtb25zLCBzaGUgY2FuJ3Qgc2VlbSB0byBrZWVwIGEgbWFuIGluIGhlciBsaWZlLCBlc3BlY2lhbGx5IHBhcnRuZXJzLCB0aGV5IHNlZW0gdG8ga2VlcCBsZWF2aW5nIGhlciBmb3Igc29tZSByZWFzb24uIEFsdG9nZXRoZXIgdGhpcyBpc24ndCBhIGJhZCBmaWxtLCBpdCBrZWVwcyB5b3UgZ3Vlc3NpbmcgYWxsIHRoZSB3YXkgdGhlIHZlcnkgc2hvY2tpbmcgZW5kaW5nLikAAAAAAADwPwrjAwigBBCgBCLRA3RoaXMgbW92aW5nIHdhcyBpbnRyaWd1aW5nIGFuZCBhYnNvcmJpbmc7IGhvd2V2ZXIsIHRoZSBzdG9yeSB3YXMgYSBsaXR0bGUgY2hvcHB5IGFuZCBoYXJkIHRvIGZvbGxvdyBhdCB0aW1lcy4gQWx0aG91Z2ggdGhlIHR3byBwcmluY2lwYWwgYWN0b3JzIGRpZCBhIGdyZWF0IGpvYiwganVzdCBzZWVpbmcgU2VubiBQZW5uIGFjdGluZyB3aXRoIGV2ZXJ5IGZpYmVyIG9mIGhpcyBiZWluZyBhbmQgc3RlYWxpbmcgZXZlcnkgZnJhbWUgbWFkZSB0aGlzIGEgdmVyeSBtZW1vcmFibGUgbW92aWUuIExhdGVyIG1vdmllcyBoYXZlIHJldmVhbGVkIGhpbSB0byBiZSBhIG5vdCBqdXN0IG9uZS1yb2xlIGFjdG9yOiBoZSBhbHNvIHNob3dlZCBjb21lZGljIGZsYWlyIGluIFN3ZWV0IGFuZCBMb3dkb3duLiBTdXJwcmlzaW5nbHkgdGFsZW50ZWQgYW5kIG5vdCB0aGUgbGlnaHQtd2VpZ2h0IEkgdXNlZCB0byB0aGluayBoZSB3YXMuLykAAAAAAADwPwr0AQihBBChBCLiAXRoaXMgbW92aWVzIGlzIHJlYWxseSBzcGVjaWFsICEgaXQncyBhYm91dCBhIHlvdW5nIGZyZW5jaCB3aG8gZ28gaW4gQmFyY2Vsb25hIChzcGFpbikgaW4gb3JkZXIgdG8gc3R1ZHkgYW5kIGluIGJhcmNsZW9uYSBoZSBtZWV0cyBvdGhlciB5b3VuZ3MgZXVyb3BlZWFuIGxpa2UgaGltLiBUaGlzIGZpbG0gaGUncyB0aGUgRVVST1BFQU4gTU9WSUVTIG9mIHRoZSBZRUFSIHNvIGdvIHdhdGNoIGl0ICEpAAAAAAAA8D8K4QQIogQQogQizwR0aGlzIG1vdmllLCBpIHdvbid0IGNhbGwgaXQgYSAiZmlsbSwiIHdhcyBiYXNpY2FsbHkgYWJvdXQgbm90aGluZyBhbmQgZnVuY3Rpb25lZCBtb3N0bHkgZm9yIHRoZSBwb3B1bGFyIGFjdHMgb2YgdGhlIHRpbWUuIHllYWggdGhlIHdhciB3YXMgb24gZnVsbCBzd2luZyAocHVuIGludGVuZGVkKSwgYW5kIHRoaXMgbW92aWUgZ2F2ZSB0aGUgdHJvb3BzIGFuZCBvdXIgYXVkaWVuY2VzIGEgdHJlYXQuPGJyIC8+PGJyIC8+YnV0IGxldCdzIGhhdmUgc29tZXRoaW5nIHdpdGggYSBiaXQgbW9yZSBzdWJzdGFuY2UuPGJyIC8+PGJyIC8+bG92ZWQgc2VlaW5nIGEgeW91bmcgQnVkZHkgUmljaCBvbiB0aGUgZHJ1bXMuIHRoZSBtdXNpYyB3YXMgZ29vZCB0aHJvdWdob3V0LjxiciAvPjxiciAvPmJ1dCBvbmUgY2FtZW8gYWZ0ZXIgYW5vdGhlciBnZXRzIG9sZCBmYXN0LjxiciAvPjxiciAvPmkgZGlkbid0IGV2ZW4gcmVjb2duaXplIFplcm8gTW9zdGVsISBzbyBpZiB5b3UncmUgb25lIGZyb20gdGhlICJncmVhdGVzdCBnZW5lcmF0aW9uLCIgYXMgdGhleSBzYXksIHlvdSdsbCBkZWZpbml0ZWx5IGVuam95IHRoaXMuLi48YnIgLz48YnIgLz5tb3ZpZS4pAAAAAAAA8D8K6wYIowQQowQi2QZ0aGlzIG1vdmllIHdhc3RlZCBteSB0aW1lLiBpIHNhdyBvbmx5IHBhcnQgb2YgaXQgYW5kIGkgd2FzIGNyeWluZyBhYm91dCB0aGUgd2FzdGVkIHRpbWUgdGhhdCBpIGNvdWxkIG9mIHNwZW50IGRvaW5nIHNvbWV0aGluZyBwcm9kdWN0aXZlIGFuZCB1c2VmdWwgdG93YXJkcyB0aGlzIGVhcnRoLiBmb3IgZXZlcnlvbmUgdGhhdCBoYXMgd2F0Y2hlZCB0aGlzIG1vdmllIG1vcmUgdGhhbiBvbmNlLCBpIGFtIGJsYW1pbmcgdGhlbSBmb3IgZ2xvYmFsIHdhcm1pbmcgYXMgdGhlIHRoZSBhbW91bnQgb2YgYmxhY2sgYmFsbG9vbnMgdGhhdCBnb3QgZW50ZXJlZCBpbnRvIHRoZSBlYXJ0aCBmcm9tIHRoaXMgcGllY2Ugb2YgY3JhcCB3ZXJlIG5vdCBuZWVkZWQgYW5kIGlmIHRoZXkgY2FtZSBmcm9tIGEgZGlmZmVyZW50IG1vdmllLCBpIHdvdWxkIGhhdmUgZm9yZ2l2ZW4gdGhlbS4gcm9iaW4gV2lsbGlhbXMgbG93ZXJlZCBoaXMgc3RhbmRhcmRzIHRvIGFjdHVhbGx5IHBhcnRpY2lwYXRlIGZvciBtb3JlIHRoYW4gMTAgc2Vjb25kcyBpbiB0aGlzIGZpbG0gYW5kIFRpbSBSb2JiaW5zLCBob3cgaGUgd2VudCBmcm9tIHRoaXMgZmlsbSB0byB0aGUgc2hhd2hzYW5rIHJlZGVtcHRpb24sIGkgaGF2ZSBubyBpZGVhLiBwbGVhc2UgZG8gbm90IHdhdGNoIHRoaXMgbW92aWUgZm9yIHRoZSBzYWZldHkgb2YgdGhlIGVhcnRoLiBzdG9wIHJlbGVhc2luZyBibGFjayBiYWxsb29ucyBpbnRvIHRoZSBlYXJ0aCBmcm9tIGEgZmlsbSB0aGF0IHRoZXkgc2hvdWxkIGhhdmUgbmV2ZXIgZnVuZGVkIG9yIHJlbGVhc2VkLiBwbGVhc2UgYnVybiBhbGwgY29waWVzIGJlZm9yZSBhbnlvbmUgZWxzZSBoYXMgdG8gd2F0Y2ggdGhpcyBjcmFwLikAAAAAAADwPwrbAgikBBCkBCLJAnRoaXMgbW92aWUgd2Fzbid0IGdvb2QuIGkgdGhvdWdodCBpdCdkIGJlIGEgY3V0ZSBkaXNuZXkgbW92aWUganVzdCBsaWtlIHRoZSBvcmlnaW5hbC4gd3JvbmcuIGl0IHdhcyBhd2t3YXJkIGZvciBjaHJpc3RpbmEgcmljY2ksIHdob20gaSBleHBlY3Qgc28gbXVjaCBtb3JlIHRoYW4gdGhpcywgeW91IGNvdWxkIGp1c3QgdGVsbCBieSB3YXRjaGluZy4gaSB0aGluayBkb3VnIGUuIGRvdWcgZGlkIHRoZSBiZXN0IGhlIGNvdWxkLiBzaXQgNSB5ZWFyIG9sZHMgaW4gZnJvbnQgb2YgdGhlIHRoaXMsIGFueSBvbGRlciwgYW5kIHRoZXkgbWlnaHQgc3RhcnQgdG8gZmFsbCBhc2xlZXAuKQAAAAAAAPA/CtsFCKUEEKUEIskFdGhpcyBtb3ZpZSB3YXMgdGVycmlibGUuIGkgdGhvdWdodCB3aXRoIGFsbCB0aGUgc29tZSB3aGF0IGRlY2VudCBhY3RvcnMsIGl0IHdvdWxkIGJlIGJldHRlci4gZG9uJ3Qgd2FzdGUgeW91ciB0aW1lLiBFdmEgbG9uZ29yaWEgcGFya2VyIHdhcyBhd2Z1bC4gc2hlIHNob3VsZCBzdGljayB0byBkZXNwZXJhdGUgaG91c2V3aXZlcy4gUGF1bCBSdWRkIGlzIGJlY29taW5nIGEgQiBhY3Rvci4gdGhlIG1lc3MgaGUgbWFkZSBpbiB0aGUgbW92aWUgaSBjb3VsZCBuZXZlciBiZSB5b3VyIHdvbWFuIHdhcyB0aGUgZXBpdG9tZSBvZiB3aGF0IGknbSBzYXlpbmcuIGFuZCBsYWtlIGJlbGwgc2hlIHdhcyBjdXRlIGJ1dCBkZWZpbml0ZWx5IGluIG5lZWQgb2Ygc29tZSBtb3JlIGFjdGluZyBsZXNzb25zLiB3YXRjaCBqdXN0IGxpa2UgaGVhdmVuIHdpdGggUmVlc2UgV2l0aGVyc3Bvb24uLi5pdCB3YXMgYSB0YWQgYmV0dGVyLiBvciBhbnkgb3RoZXIgZ2hvc3QgbW92aWUuIHlvdSB3aWxsIGJlIGdyYXRlZnVsIHRvIG5vdCBoYXZlIHdhc3RlZCB5b3VyIHByZWNpb3VzIHRpbWUuIFBTIGkgbG92ZSB5b3UgaXMgYWxzbyBhIGdvb2QgZnJvbSBiZXlvbmQgdGhlIGdyYXZlIHJvbWFuY2UhIHRpbWUgdG8gc3RhcnQgd2F0Y2hpbmcgbW92aWVzIHJhdGVkIG92ZXIgNyBvdXQgb2YgMTAgYW5kIGxpc3RlbiB0byB0aGUgcGVvcGxlIHdobyBoYXZlIGFscmVhZHkgc2VlbiBpdC4pAAAAAAAA8D8K8AUIpgQQpgQi3gV0aGlzIG1vdmllIHdhcyBzbyBnYXkgbGlrZSBpdHMgYSBtb20gYW5kIHNvbiBjYXQgdGhhdCBoYXZlIHNleCwgdGhleSBhbHNvIGdldCBzY2FyZWQgb2YgbGl0dGxlIGtpdHR5IGNhdHMuIHRoZXkgZ2V0IHNldCBvbiBmaXJlIGJ5IHRoZW0uIHRoZSBtb20gY2F0IGFsaWVuIHRoaW5nIGtpbGxzIGEgZ3V5IGJ5IHN0YWJiaW5nIGhpbSBpbiB0aGUgYmFjayB3aXRoIGFuIGVhciBvZiBjb3JuPyB0aGV5IGFyZSBidWxsZXQgcHJvb2YuIGludmlzaWJsZS4gYW5kIHdoYXQgbm90LiB0aGUgc3RhciBvZiB0aGUgbW92aWUsIENsb3ZpcywgaXMgdGhlIGNvcHMgY2F0LCBDbG92aXMgbGVhZHMgdGhlIGNvcHMgdG8gZmluZCB0aGUgbW9tIGFsaWVuLCBhbmQgYWZ0ZXIgdGhlIG1vbSBraWxscyB0aGUgY29wcywgQ2xvdmlzIGtpbGxzIHRoZSBtb20gYnkgZWF0aW5nIGhlciBoZWFkIHRoZW4gc2hlIGNhdGNoZXMgb24gZmlyZS4gdGhpcyBtb3ZpZSBzdWNrcy4gaXQgd2FzIHdheSB3YXkgbW9yZSBmdW5ueSB0aGFuIGl0IHdhcyBzY2FyeSwgaXQgd2Fzbid0IGV2ZW4gc2Nhcnl0IGF0IGFsbC4gdGhlIGdpcmwgaGl0cyB0aGUgYWxpZW4gb24gdGhlIGhlYWQgd2l0aCBhIGNhbWVyYSwgaXQga25va3MgaGltIG91dC4gc2hlIHRoZW4gZ29lcyBhbmQgaHVncyBoZXIuIHRoZSB0aGVuIGdyYWJzIGhlciBhbmQgYmVnaW5zIHRvIHJhcGUgaGVyLiBvbmNlIGFnYWluLCBDbG92aXMgY29tZXMgdG8gdGhlIHJlc2N1ZSkAAAAAAADwPwq0CwinBBCnBCKiC3RoaXMgbW92aWUgd2FzIHJlYWxseSBiYWQuIGl0IGhhcyB0aGF0IHF1YWxpdHkgdGhhdCBhIGxvdCBvZiBpbmRpZSBtb3ZpZXMgaGF2ZTogbW9tZW50cyBvZiBodW1vciBmaWxsZWQgd2l0aCBsb25nIHNwYWNlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IGJvcmluZy4gQW55IGRpZS1oYXJkIEJBTSBtYWdlcmEgZmFuIHdpbGwgcHJvbGx5IGxpa2UgdGhpcyBtb3ZpZSwgYnV0IHRoZW4gYWdhaW4gdGhhdHMgcHJvYmFibHkgdGhlIG9ubHkgcGVyc29uIHdobyB3b3VsZCBzZWUgaXQuIHNvbWVvbmUgZ2F2ZSBtZSB0aGlzIG1vdmllIHRvIHdhdGNoIGtub3dpbmcgaSBhbSBhIGZhbiBvZiBKYWNrYXNzIGFuZCB3YXMgYSBmYW4gb2Ygdml2YSBsYSBiYW0sIGJlZm9yZSB0aGUgc2NyaXB0ZWQgbmF0dXJlIG9mIHRoYXQgc2hvdyB3b3JlIHRoaW4uIFRvIGV4cGxhaW4gd2h5IHRoaXMgbW92aWUgZG9lc24ndCB3b3JrIGkgc2hvdWxkIGp1c3Qgc2F5IHRoZSBwcmVtaXNlIGl0c2VsZiBpcyBwbGF5ZWQgb3V0PGJyIC8+PGJyIC8+YSBndXkgd2hvIGlzIHdpdGggYSBnaXJsIHdobyBpcyBob3JyaWJsZSB0byBoaW0uIEFuZCBwcmV0dHkgbXVjaCB0aGUgd2hvbGUgbW92aWUgeW91J3ZlIGdvdCB0aGlzIFJ5YW4gRHVubiBndXkgd2hpbmluZyBhbmQgQmFtIG1hZ2VyYSBza2lwcGluZyBhcm91bmQgbGlrZSBhIG1lcnJ5IG1pc2NoaWVmIG1ha2VyLiBEaWNhbWlsbG8ncyBwZXJmb3JtYW5jZSBpcyBzdHJhbmdlIGF0IGJlc3QuIEl0J3MgYSBodW1vcm91cyBsaXR0bGUgbm9uc3BlY2lmaWMgQ2FuYWRpYW4gZnJlbmNoIGFjY2VudCB0aGF0IHByZXR0eSBtdWNoIGlzIHRoZSBleHRlbnQgb2YgaGlzIHBlcmZvcm1hbmNlIChiYXNpY2FsbHkgZnVubnkgZm9yIDUgbWludXRlcyBhbmQgdGhlbiBpdHMgbGlrZSAnb2sgeW91J3JlIHByZXRlbmRpbmcgdG8gYmUgZm9yZWlnbiBlbm91Z2ggYWxyZWFkeSIpPGJyIC8+PGJyIC8+TWF5YmUgaXQgd291bGQgd29yayBpZiB0aGV5IHdlcmUgZ29pbmcgZm9yIHBhcm9keSBidXQgYWxsIHRoZXkgc3VjY2VlZCBpbiBkb2luZyBpcyBtYWtpbmcgYSBtb3ZpZSB3aXRoIGFuIElRIG9mIHplcm8uIEkgbG92ZSB0b2lsZXQgaHVtb3IgYXMgbXVjaCBhcyB0aGUgbmV4dCBndXksIGJ1dCB0aGlzIGlzbid0IGV2ZW4gbG93YnJvdyBpdHMganVzdCBzdHVwaWQuIEl0cyBsaWtlIHRoZSBvbmx5IGh1bW9yIHRvIGJlIGdvdHRlbiBmcm9tIHRoaXMgbW92aWUgaXMgY29tcGxldGVseSBpbnNpZGUgYW5kIHRoZSBhdWRpZW5jZSwgZXZlbiB0aG9zZSBzYXZ2eSB0byBNYWdlcmEgYW5kIGNvbXBhbnksIGFyZSBsZWZ0IG91dCBvZiB0aGUgam9rZS48YnIgLz48YnIgLz5OZXh0IHRpbWUgbWFnZXJhIGlzIGhhbmRlZCBhIHNhY2sgZnVsbCBvZiBtb25leSBsZXQncyBob3BlIGhlIGRvZXNuJ3QgYmxvdyBpdCBvbiBzb21lIGxvdXN5IHBldCBwcm9qZWN0KQAAAAAAAPA/CqAFCKgEEKgEIo4FdGhpcyBtb3ZpZSB3YXMgcmF0aGVyIGF3ZnVsIFZpcHVsIFNoYWgncyBsYXN0IG1vdmllIHdhcyBnb29kIHRoaXMgb25lIHdhcyBqdXN0IGJhZCBhbHRob3VnaCBpdCdzIGEgZ29vZCBzdG9yeSBhbmQgaXMgaGFuZGxlZCBpbiBhIGdyZWF0IHdheSBBYXRpc2ggS2FwYWRpYSB3aG8gYWRhcHRlZCB0aGlzIG1vdmllIGZyb20gYW5vdGhlciBndWphcmF0aSBwbGF5ICJBdmpvIFdhaGFsYSBGYXJpIE1hbGlzaHUiIG1hZGUgYSBnb29kIGJ1dCBzbG93IHBpYW5mdWwgMiBhbmQgYSBoYWxmIGhvdXJzIHRvIHdhdGNoIHRoZXJlIGFyZSBhIGxvdCBvZiBmbGF3cyBpbiB0aGlzIG1vdmllIGJ1dCBpdCdzIHN0aWxsIGEgZW50ZXJ0YWluZXIgc29uZ3MgYXJlIHJhdGhlciBibGVha2VkIG91dCBhbmQgZG9uJ3Qgd29yayB3ZWxsIGJ1dCB0aGV5J3JlIHN0aWxsIGdvb2Qgb3ZlcmFsbCBub3QgYSBtb3ZpZSB5b3Ugd291bGQgZW50aHVzaWFzdGljYWxseSB3YXRjaCBpdCdzIHN0aWxsIGEgc3RvcnkgdG8gdGFrZSBpbiB0byBhY2NvdW50IGFuZCBpdCdzIGdvb2QgaWYgeW91J3JlIHRoZSByZWxhdGlvbnNoaXAgdHlwZSBwcmV0dHkgZ29vZCBtb3ZpZSB3aXRoIGxvYWRzIG9mIGZsYXdzIGFuZCBodW1vciB0aGF0J3MgcmVhbGx5IG5vdCBuZWVkZWQgZXZlbiBvbmUgYml0KQAAAAAAAPA/CtkCCKkEEKkEIscCdGhpcyBtb3ZpZSB3YXMgb25lIG9mIHRoZSBiZXN0IGRpc25leSBtb3ZpZXMgaSd2ZSBldmVyIHNlZW4uIGdyZWF0IGZvciB0aGUgZW50aXJlIGZhbWlseSB0byB3YXRjaC4gdGhlIGlkZWFzIG1heSBiZSBhIGxpdHRsZSBmYXItZmV0Y2hlZCwgYnV0IGl0J3MgYSBmZWVsLWdvb2QgY29tZWR5IGFuZCB0aGUgYWN0aW5nIGlzIGdyZWF0LiBsb3ZlIHRoZSBsaXR0bGUgYm95LCBqLnAuIGFuZCBhY2FkZW15IGF3YXJkIHdpbm5lciBhZHJpZW4gYnJvZHkncyBwYXJ0IG1heSBoYXZlIGJlZW4gdmVyeSBzaG9ydCwgYnV0IHZlcnkgbWVtb3JhYmxlLiBoaWdobHkgcmVjb21tZW5kZWQuKQAAAAAAAPA/Ct8FCKoEEKoEIs0FdGhpcyBtb3ZpZSB3YXMganVzdCBwbGFpbiBkdW1iIGkgZG8gbm90IHRoaW5rIGl0IHdhcyBzY2FyeSBhdCBhbGwgaSB3ZW50IGluIGhvcGluZyB0byBiZSBzaG9ja2VkIGFuZCBzY2FyZWQgYnV0IHdhcyBtb3N0bHkgbGF1Z2hpbmcgc29tZSBvZiB0aGUgc2NlbmVzIHdlcmUganVzdCB0byBmYWtlIGFuZCB0aHJvd24gdG9nZXRoZXIgYmxvb2Qgc2NlbmVzIHdlcmUgZXh0cmVtZWx5IG92ZXIgY2cgYW5kIHNvbWUgb2YgdGhlIG11dGFudHMgd2VyZSByaWRpY3Vsb3VzbHkgZ2F5IGxvb2tpbmcgaXQgYWxzbyBzdWNrZWQgYmVjYXVzZSB0aGUgYWN0aW5nIHdhcyBqdXN0IHBsYWluIGhvcnJpYmxlIHUgdGhpbmsgdGhleSBjb3VsZCBnZXQgc29tZSBnb29kIGFjdG9ycyBhbmQgbW9zdCBvZiB0aGUgY2hhcmFjdGVycyBpIGhhdGVkIGp1c3QgYmVjYXVzZSBob3cgc3R1cGlkIGFuZCBsYW1lIHRoZXkgYWN0ZWQgZXZlbiB0aG91Z2ggdGhleSB3ZXJlIHN1cHBvc2VkIHRvIGJlIGluIHRoZSBtaWxpdGFyeSBpIGdldCB0byB3YXRjaCBtb3ZpZXMgZm9yIGZyZWUgYW5kIHNlZW4gbWFueSBwZW9wbGUgd2Fsa2luZyBvdXQgaW0gZ3Vlc3NpbmcgYmVjYXVzZSBpdCB3YXMgc28gZHVtYiBraW5kYSBnbGFkIGkgZGlkbid0IGhhdmUgdG8gcGF5IGZvciBpdCBpbiBzaG9ydCBEVU1CIEFTUyBNT1ZJRSBkb24ndCBzZWUgaXQuLi5idXQgdGhlbiBhZ2FpbiB0aGF0cyBteSBvcGluaW9uKQAAAAAAAPA/CrQFCKsEEKsEIqIFdGhpcyBtb3ZpZSB3YXMgaW5jcmVkaWJseSBzdHVwaWQgd2l0aCBtZWFuaW5nIHdoYXQgc28gZXZlci4gaSBmZWxsIGJhZCBmb3IgYWxsIHRoZSBhY3RvcnMgYW5kIGFjdHJlc3NlcyB0aGF0IHJ1aW5lZCB0aGVyZSBjYXJlZXIgdG8gYmUgaW4gdGhpcyBzdHVwaWQgbW92aWUuIHRoZSBlbnRpcmUgbW92aWUgd2FzIGJhc2VkIG9uIGhvdyB1bnJlYWxpc3RpYyB0aGV5IGNvdWxkIG1ha2UgaXQsIHRvIG1ha2UgbGl0dGxlIGxpa2UgaXQgd2hpY2ggbWFkZSBpdCBldmVuIHN0dXBpZGVyLiBldmVuIHNvbWUgb2YgdGhlIG5hbWVzIHdlcmUgdW5yZWFsaXN0aWMuIHRoZSBmaWxtIGlzIGZ1biB0byB3YXRjaCB3aGljaCBpcyB3aHkgaXQgaGFkIDIgb3V0IG9mIDEwIHN0YXJzLiB0aGlzIGlzIHByb2JhYmx5IHRoZSAzcmQgc3R1cGlkZXN0IG1vdmllIGV2ZXIgbWFkZS4gaSBnb3QgcmVhbGx5IG1hZGUgYWZ0ZXIgaSByZWFsaXplZCB0aGF0IGl0IGhhZCBtb3N0bHkgYWR1bHQgYWN0b3JzIGluIGl0IHlldCBpbiB3YXMgYSBraWQgbW92aWUuIHRoZSBtb3N0IHVwc2V0dGluZyBvbmUgd2FzIERhbm55IFRyZWpvIGEgaG9ycm9yIG1vdmllIGFjdG9yIHdobyBpcyBhbHdheXMgZGlydHkuIHRoZSBvdGhlciBhY3RvcnMgd2VyZSBwcmV0dHkgbXVjaCBjbGVhbiBhcyBmYXIgYXMgaSdtIGNvbmNlcm5lZC4pAAAAAAAA8D8KwwUIrAQQrAQisQV0aGlzIG1vdmllIHdhcyBob3JyaWJsZS4gSSBjb3VsZCBiYXJlbHkgc3RheSBhd2FrZSB0aHJvdWdoIGl0LiBJIHdvdWxkIG5ldmVyIHNlZSB0aGlzIG1vdmllIGFnYWluIGlmIEkgd2VyZSBwYXllZCB0by4gVGhlIHNvLWNhbGxlZCBob3Jyb3Igc2NlbmVzIGluIGl0IHdlcmUgaW5jcmVhZGFibHkgcHJlZGljdGFibGUgYW5kIG92ZXIgcGxheWVkLiBUaGVyZSB3YXMgcmVhbGx5IG5vdGhpbmcgYWJvdXQgdGhpcyBtb3ZpZSB0aGF0IHdvdWxkIGhhdmUgbWFkZSBpdCBvcmlnaW5hbCBvciB3b3J0aCB0aGUgJDcuNTAgSSBwYXllZCB0byBzZWUgaXQuIERvbid0IGdvIHNlZSBpdCwgZG9uJ3QgcmVudCBpdCwgZG9uJ3QgcmVhZCBhYm91dCBpdCBvbmxpbmUgYmVjYXVzZSBhbnkgb2YgdGhlc2UgdGhpbmdzIHdvdWxkIGJlIGEgY29tcGxldGUgd2FzdGUgb2YgeW91ciB0aW1lLiBTYXJhaCBNaWNoZWxsZSBHZWxsZXIgZ2F2ZSBhIGxhY2tsdXN0ZXIgcGVyZm9ybWFuY2UgYW5kIHJlYWxseSBzaG91bGQgYmUgYXNoYW1lZCBvZiBoZXJzZWxmIGZvciBzdWxseWluZyBoZXIgZ29vZCBuYW1lIHdpdGggdGhpcyBtb3ZpZS4gU2hhbWUgb24geW91IFNhcmFoIGZvciBiZWluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBob3JyaWJsZSwgaG9ycmlibGUgbW92aWUuIEhvcnJpYmxlIG1vdmllLCBubyBuZWVkIHRvIGV2ZXIgc2VlIGl0LikAAAAAAADwPwrJBgitBBCtBCK3BnRoaXMgbW92aWUgd2FzIGZhbnRhc3RpYyBncmVhdCBtb3ZpZSBhbGwgdGhyb3VnaCBzY2FyeSBhcyBoZWxsLiBhbmQgaSBtZWFuIGl0IGZyZWFrZWQgbWUgb3V0IGFzIG11Y2ggYXMgcHVsc2UgYW5kIElUIGFuZCB0aGUgb21lbiBldGMuIGJ1dCB3aXRoIGEgZ3JlYXQgbW92aWUgY29tZXMgYSBjcmFwIGVuZGluZyByaWdodD8gUklHSFQhIHRoaXMgbW92aWVzIGVuZGluZyB3YXMgcGF0aGV0aWMgc3R1ZmYuIGkgbWVhbiBhIGdob3N0IHR1cm5lZCBiYWNrIHRpbWUgaW4gYSBjaGlja3MgaG91c2UgYW5kIGl0IHRoaW5rcyBub3cgaSBoYXZlIGRvbmUgdGhhdCBpdCBtZWFucyBpIGNhbiBjYWxsIGhlciBhbmQgaXRsbCBiZSB0aGUgcmlnaHQgdGltZSBjYXVzZSBzaGUgdGhpbmtzIGl0IGlzLiByaWdodD8gd3JvbmcuIG15IGFzcyEgaSBkb24ndCBjYXJlIGlmIHRoZSBnaG9zdCBpcyBTYXRhbiwgaXQganVzdCBkb2Vzbid0IGhhcHBlbi4gaXRzIGEgbW92aWUgeWVzIGJ1dCBtb3N0IGV2aWwgbW92aWVzIG9yIHByYWlzZWQgbW92aWVzIGxpa2UgdGhpcyBhcmUgbWVhbnQgdG8gbWFrZSBzZW5zZSBidXQgaXQgZGlkbid0LiBpdCBqdXN0IHNob3dlZCB1cyB3aGF0IGkganVzdCBzYWlkIGFuZCBwZW9wbGUgZG9uJ3QgdGhpbmsgYW55dGhpbmcgb2YgaXQuIGNhbiBzb21lb25lIHBsZWFzZSB0ZWxsIG1lIHdoeSB5b3UgYWxsIGhhdmVuJ3Qgbm90aWNlZCB0aGF0IHBhdGhldGljIHBhcnQuIHRoZSBtb3ZpZSBmb3IgbWUgZW5kZWQgaW4gdGhlIGhvc3BpdGFsIGFuZCB0aGF0IGlzIGFsbC4gY2hlY2sgb3V0IG51bWJlciAzIGl0cyBtdWNoIG1vcmUga2ljayBhc3MpAAAAAAAA8D8K0QoIrgQQrgQivwp0aGlzIG1vdmllIHdhcyBkb3ducmlnaHQgYXdmdWwuIG1vc3Qgb2YgdGhlIGNvbWVkaWMgc2NlbmVzIHNlZW0gc3RhbGUgYW5kIHRyaXRlLCBhbmQgcG9zc2libHkgdGhlIGZ1bm5pZXN0IHNjZW5lIGluIHRoZSBtb3ZpZSBoYWQgYWxyZWFkeSBiZWVuIGdpdmVuIGF3YXkgaW4gcHJldmlld3MuIHRoZSBlbnRpcmUgcHJlbWlzZSBvZiB0aGUgbW92aWUgaXMgc28gdW5iZWxpZXZhYmxlIGFuZCByaWRpY3Vsb3VzIGl0cyBoYXJkIHRvIHJlYWxseSBnZXQgaW50byBpdC4gdGhlIGFjdG9ycyB0aGVtc2VsdmVzIHBvcnRyYXkgdGhlIG1vc3QgdW5yZWFsaXN0aWMgY2hhcmFjdGVycy4gaXRzIG5vdCBqdXN0IHRoZSBmYWN0IHRoYXQgdGhlIG1vdmllcyBzbyBoYXJkIHRvIHN3YWxsb3csIGJ1dCBpdHMgaG93IHRoZXkga2VlcCBmb3JjaW5nIGl0IGRvd24geW91ciB0aHJvYXQgZXhwZWN0aW5nIHlvdSB0byBkdW1iIGRvd24gYW5kIGFjY2VwdCBpdC4gdGhlIHBsb3QgaXRzZWxmIGlzIHNvIHNoYWxsb3cgYW5kIGVhc3kgdG8gcHJlZGljdC4gYm95IHNvbWVob3cgZ2V0cyByZWplY3RlZCBmcm9tIGV2ZXJ5IHNjaG9vbCBoZSBhcHBsaWVkIHRvKGkgc3VwcG9zZSBoZSBjb21wbGV0ZWx5IGZvcmdvdCBhYm91dCBhdHRlbmRpbmcgY29tbXVuaXR5IGNvbGxlZ2UpIGFuZCBkZWNpZGVzIHRvIGNyZWF0ZSBoaXMgb3duIHNjaG9vbCBmb3IgZmVsbG93IHJlamVjdHMuIGFsbCBnb2VzIHdlbGwgZm9yIGF3aGlsZSB1bnRpbCB0aGUgdmFsaWRpdHkgb2YgaGlzIHNjaG9vbCBjb21lcyBpbnRvIHF1ZXN0aW9uLiBhbGwgdGhlIHdoaWxlIHRoZSBkb3JreSBjaGFyYWN0ZXIgbWFuYWdlcyB0byB3b28gaGlzIGJlYXV0aWZ1bCBuZWlnaGJvciBpbnRvIGZhbGxpbmcgZm9yIGhpbSB3aXRoIGhpcyB3aXR0eSBzYXJjYXNtLCB3aGljaCBhcHBhcmVudGx5IGlzIGEgc2tpbGwgb25seSBoZSBwb3NzZXNzZXMuIHRoZW4gY29tZXMgdGhlIGZpbmFsIHN0cnVnZ2xlIHdpdGggdGhlIHN0dWRlbnRzIHNvbWVob3cgYWxsIGJvbmRpbmcgdG9nZXRoZXIgYW5kIGZpZ2h0aW5nIGZvciB0aGUgc3Vydml2YWwgb2YgdGhlIHNjaG9vbC4gb2YgY291cnNlIHRoZSBtYWluIGNoYXJhY3RlciB0aGVuIHBlcnN1YWRlcyB0aGUgc3RhdGUgYm9hcmQgb2YgZWR1Y2F0aW9uIHRvIGFsbG93IGhpcyBzY2hvb2wgdG8gc3RheSBhbGl2ZSB3aXRoIHNvbWUgImluc3BpcmF0aW9uYWwiIHNwZWVjaC4gdGhpcyBtb3ZpZSB3b3VsZCBoYXZlIGJlZW4gbW9yZSBmdW4gdG8gd2F0Y2ggaWYgaSB3YXMgdW5kZXIgdGhlIGFnZSBvZiAxNiBhbmQgc3RpbGwgaWdub3JhbnQgb2YgYWxsIGNvbGxlZ2UgbWF0dGVycyBhbmQgaXNzdWVzLikAAAAAAADwPwr9BQivBBCvBCLrBXRoaXMgbW92aWUgd2FzIGRlZmluaXRlbHkgdGhlIHdvcnN0IG1vdmllIGkndmUgc2VlbiBpbiBteSBlbnRpcmUgbGlmZSwgYW5kIGkndmUgc2VlbiBzb21lIHByZXR0eSBiYWQgbW92aWVzLiBpIGRpZG4ndCBsaWtlIHRoZSB3YXkgdGhpcyBtb3ZpZSB3YXMgZmlsbWVkLiBhbGwgb2YgdGhlIGFjdG9ycyBhcmUgdW5rbm93biwgYW5kIGl0IGxvb2tzIGFzIHRob3VnaCBhIGJ1bmNoIG9mIGZyaWVuZHMgZ290IHRvZ2V0aGVyIGFuZCBkZWNpZGVkIHRvIGZpbG0gdGhlaXIgb3duIG1vdmllLiBidXQgaXQncyBhYnNvbHV0ZWx5IGhvcnJpYmxlLiBpJ3ZlIG5ldmVyIHNlZW4gYSB3b3JzZSBtb3ZpZS4gdGhlIHN0b3J5IGlzIHNvIGZha2UsIGFuZCBpIGp1c3QgZm91bmQgdGhhdCBpdCB0b29rIGEgcmVhbGx5IGxvbmcgdGltZSB0byBnZXQgdG8gdGhlIGVuZCBvZiB0aGUgbW92aWUuIHRoZXJlIHdhcyBubyBwbG90LCBpdCBsb29rZWQgYXMgdGhvdWdoIGl0IHdhc24ndCBwbGFubmVkIG91dCBiZWZvcmUgdGhleSBzdGFydGVkIGZpbG1pbmcuIHRoZSBzdG9yeSBpcyB0b28gd2VpcmQuIGkgZGlkbid0IGxpa2UgaG93IHNsb3cgaXQgdG9vayB0byBnZXQgdG8gdGhlIHBvaW50IG9mIHRoZSBtb3ZpZS4gdGhlcmUgd2FzIG5vIHBvaW50IGluIGV2ZW4gZmlsbWluZyB0aGlzIG1vdmllLiBpZiB5b3UncmUgY29uc2lkZXJpbmcgd2F0Y2hpbmcgdGhpcyBtb3ZpZSwgZG9uJ3QuIHlvdSdyZSBqdXN0IHdhc3RpbmcgeW91ciB0aW1lLikAAAAAAADwPwq0CAiwBBCwBCKiCHRoaXMgbW92aWUgd2FzIGNsZWFybHkgZG9uZSBwb29ybHkgYW5kIGluIGEgcnVzaC4gSSByZWFsaXplIHRoYXQgdGhlIGZ1bmRpbmcgZm9yIGFueSBzdWNoIG1vdmllIGlzIGhhcmQgdG8gY29tZSBieS4gSG93ZXZlciBpZiB0aGUgcGxvdCBoYWQgYW55IGtpbmQgb2Ygb3JpZ2luYWwgc3Vic3RhbmNlIHNvbWVvbmUgd291bGQgaGF2ZSBzZWVuIHRoYXQgaXQgZ290IHRoZSBuZWNlc3NhcnkgZnVuZGluZywgdGhpcyB3YXMgbm90IHRoZSBjYXNlIGFuZCBtb3ZpZXMgbGlrZSB0aGlzIGFyZSBub3QgbmVjZXNzYXJ5IHRoZW1zZWx2ZXMgYW5kIGhhdmUgbm8gcHVycG9zZSBpbiBleGlzdGluZy4gVGhlIHBsb3QgZm9yIHRoaXMgbW92aWUgaGFzIGJlZW4gZG9uZSBhbmQgZG9uZSBiZXR0ZXIgaSBtaWdodCBhZGQsIG1hbnkgdGltZXMgYmVmb3JlLiBUaGVyZSBpcyBubyByZWFzb24gdG8gbWFrZSBhIG1vdmllIHRoYXQgaGFzIG5vIGNoYW5jZSBpbiBjb21wZXRpbmcgd2l0aCBhbnkgb3RoZXJzLiBpIHdhcyBpbmZvcm1lZCBieSBteSBjb21wdXRlciB0aGF0IGkgbmVlZCBhIG1pbmltdW0gb2YgdGVuIGxpbmVzIHRvIHN1Ym1pdCBteSBjb21tZW50IHNvIHRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGp1c3QgYnVsbCB0byBmaWxsIGluIHNwYWNlLiBJbiBteSBvcGluaW9uIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFueXRoaW5nIGVsc2UgdG8gYmUgc2FpZCBhYm91dCB0aGlzIGZpbG0uIHdoYXQgaSd2ZSBzYWlkIGlzIHBsZW50eSBhbmQgaWYgeW91IHdhc3RlZCBlbm91Z2ggdGltZSByZWFkaW5nIHRoaXMgcmV2aWV3LCB0aGFuIGZvciBHb2QncyBzYWtlIGRvbid0IHdhc3RlIG1vcmUgdGltZSB3YXRjaGluZyB0aGlzIG1vdmllLiBUaGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyBpZiB5b3UgYXJlIHRoZSBraW5kIG9mIHBlcnNvbiB3aG8gbGlrZXMgd2F0Y2hpbmcgY3JhcHB5IG1vdmllcyB0aGF0IGdldCBwbGF5ZWQgb24gdGhlIHdvbWVucyBlbnRlcnRhaW5tZW50IG5ldHdvcmsgYXQgMjowMCBhLm0uIGluIHRoYXQgY2FzZSBnbyBhaGVhZCBzZWUgd2hhdCBpIGNhcmUuKQAAAAAAAPA/CqgJCLEEELEEIpYJdGhpcyBtb3ZpZSB3YXMgYmFubmVkIGluIGVuZ2xhbmQ/IHdoeT8gdG9tIHNhdmluaSwgZ2VvcmdlIHJvbWVybywgZGFyaW8gYXJnZW50bywgbHVjaW8gZnVsY2kgYW5kIG90aGVycyBoYWQgZG9uZSBmYXIgd29yc2UgYmVmb3JlIGFuZCBoYXZlIGNvbnRpbnVlZCB0byBzbyBzaW5jZS4uLjxiciAvPjxiciAvPnRoaXMgbW92aWUgaGFzIGFsbCB0aGUgYmFzaWMgZWxlbWVudHMgb2YgYSBkZWNlbnQgNzBzIG9yIGVhcmx5IDgwJ3MgaG9ycm9yIGZpbG0uIGdvb2QgbG9va2luZyBnaXJscyAod2hvIGNhbid0IGFjdCB0byBzYXZlIHRoZWlyIGxpdmVzLCBieSB0aGUgd2F5KSwgYSB0ZXJyaWJsZSBsaWdodG5pbmcgc3Rvcm0gd2l0aCBhIHRvcnJlbnRpYWwgZG93bnBvdXIsIGEgc2N5dGhlLCBhIGNyYXp5IGJyb3RoZXIgd2FuZGVyaW5nIGFyb3VuZCB0aGUgZmFtaWx5IGVzdGF0ZSwgYW5kIGFjdHVhbGx5IGEgcHJl
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment