diff --git a/.github/workflows/ReleaseAWSS3.yml b/.github/workflows/ReleaseAWSS3.yml
index 937a0240..db4da875 100644
--- a/.github/workflows/ReleaseAWSS3.yml
+++ b/.github/workflows/ReleaseAWSS3.yml
@@ -14,10 +14,10 @@ jobs:
- name: Checkout
uses: actions/checkout@v3
- - name: Use Node.js 18.x
+ - name: Use Node.js 20.x
uses: actions/setup-node@v3
with:
- node-version: '18.x'
+ node-version: '20.x'
- name: Install Dependencies
working-directory: ./darc-docs
diff --git a/README.md b/README.md
index c459905e..fe82a4bb 100644
--- a/README.md
+++ b/README.md
@@ -6,9 +6,21 @@ The project is currently in the early stages of development and is not yet ready
English | [简体中文](./README_cn.md) | [日本語](./README_ja.md)
+## Star History
+
+[](https://star-history.com/#project-darc/darc&Date)
+
+
## Join our community
Telegram: [https://t.me/projectdarc](https://t.me/projectdarc)
+Discord: [https://discord.gg/QzKbTHVgGG](https://discord.gg/QzKbTHVgGG)
+
+## Whitepaper
+
+English: [darc-whitepaper.pdf](https://github.com/Project-DARC/DARC-whitepaper/blob/release/darc-whitepaper.pdf)
+
+Chinese(中文版): [darc-whitepaper-cn.pdf](https://github.com/Project-DARC/DARC-whitepaper/blob/release/darc-whitepaper-cn.pdf)
## What is DARC?
@@ -68,7 +80,7 @@ can add a new plugin and corresponding voting rule to the DARC VM contract:
add_voting_rule( // add a voting rule (as index 5)
[
{
- voting_class: [1], // voting token class: 1, level-1 token ownners (board of directors) are required to vote
+ voting_class: [1], // voting token class: 1, level-1 token owners (board of directors) are required to vote
approve_percentage: 99, // 99% voting power is required to approve
voting_duration: 3600, // voting duration: 1 hour (3600 seconds)
execute_duration: 3600, // pending duration for execution: 1 hour (3600 seconds)
@@ -497,7 +509,7 @@ Since Hardhat and OpenZeppelin are used, the project can be built using the foll
friendly.
```shell
- cd darc-protocal
+ cd darc-protocol
npm install
```
diff --git a/README_cn.md b/README_cn.md
index fe4f34d9..737e7c98 100644
--- a/README_cn.md
+++ b/README_cn.md
@@ -462,7 +462,7 @@ add_storage(['QmcpxHN3a5HYnPurtuDs3jDfDSg1LPDe2KVBUG4RifcSbC']);
`pnpm` 是一个较新的包管理器,相较于 npm 具有一些优势。它更快、更高效,并且节省磁盘空间。
```shell
- cd darc-protocal
+ cd darc-protocol
npm install
```
diff --git a/README_ja.md b/README_ja.md
index d6cdfc28..9c02f062 100644
--- a/README_ja.md
+++ b/README_ja.md
@@ -466,7 +466,7 @@ Hardhat と OpenZeppelin を使用しているので、プロジェクトは以
`pnpm` は新しいパッケージマネージャーで、npm よりも優れている点がいくつかある。より速く、より効率的で、ディスクスペースに優しいです。
```shell
- cd darc-protocal
+ cd darc-protocol
npm install
```
diff --git a/darc-docs/docs/By-law Script/Getting Started.md b/darc-docs/docs/By-law Script/Getting Started.md
index 210ab4c7..f4189b50 100644
--- a/darc-docs/docs/By-law Script/Getting Started.md
+++ b/darc-docs/docs/By-law Script/Getting Started.md
@@ -7,6 +7,380 @@ import TabItem from '@theme/TabItem';
# Getting Started
-## What is By-law Script?
+### By-law Script = JavaScript + Operator Overloading
-By-law Script is the first programming language for describing the operations and rules for a DARC-based crypto company.
\ No newline at end of file
+By-law Script is the first programming language for describing the operations and rules for a DARC-based crypto company. It is a domain-specific language (DSL) that is designed to be easy to read and write, and to be used by non-programmers. It is based on JavaScript, and adds operator overloading to make it easier to write and read.
+
+### Setup
+
+There are two ways to write and execute By-law Script programs. The first is to use the By-law Script IDE at [https://darc.app](https://darc.app), which is a web-based IDE that allows you to write, compile, and execute By-law Script programs.
+
+The second is to use the darcjs SDK, which is a command-line tool that allows you to write By-law Script programs in a text editor and then compile and execute them.
+
+To install darcjs, you can use npm:
+
+
+
+
+```shell
+npm install darcjs
+```
+
+
+
+
+```shell
+yarn add darcjs
+```
+
+
+
+
+```shell
+pnpm install darcjs
+```
+
+
+
+
+Then you can import darcjs and use `transpileAndRun()` to compile and execute By-law Script programs.
+
+```javascript
+import { transpileAndRun, ethers } from 'darcjs';
+
+await transpileAndRun(
+
+ // By-law Script code
+ `
+ batch_transfer_tokens(
+ [Address_B], // the addresses of the recipients
+ [0], // the token index
+ [100]); // the amounts
+ `,
+
+ // signer
+ new ethers.Wallet(
+ YOUR_PRIVATE_KEY,
+ new ethers.providers.JsonRpcProvider( YOUR_JSON_RPC_PROVIDER_URL )
+ ),
+
+ // DARC address
+ "0x123...",
+
+ // DARC version
+ DARC_VERSION.Latest
+);
+```
+
+### Your first By-law Script program
+
+Here is a simple By-law Script program that defines the common stock of a company. Each share of common stock has voting weight 1 and dividend weight 1. This token class is called `token_0`, and the token index is 0.
+
+```javascript
+batch_create_token_classes(
+ ['token_0'], // token names
+ [0], // token index
+ [1], // voting weights
+ [1]); // dividend weights
+```
+
+Next let's issue 1000 shares of `token_0` to the company's founder, 500 shares to Address_A, 400 shares to Address_B, and 100 shares to Address_C.
+
+```javascript
+cosnt Address_A = "0x123...";
+cosnt Address_B = "0x51c...";
+cosnt Address_C = "0x374...";
+batch_mint_tokens(
+ [ Address_A, Address_B, Address_C], // the addresses of the recipients
+ [0,0,0], // the token index
+ [500,400,100]); // the amounts
+```
+
+Then Address_A executes the following By-law Script on this DARC to transfer 100 shares of `token_0` to Address_B.
+
+```javascript
+batch_transfer_tokens(
+ [Address_B], // the addresses of the recipients
+ [0], // the token index
+ [100]); // the amounts
+```
+
+As a customer, Address_D needs to pay 1000000 wei to the DARC for the service. The following By-law Script is executed by Address_D.
+
+```javascript
+pay_cash(
+ 1000000, // the amount = 1000000 wei
+ 0, // the payment type = 0, the default native token
+ 1); // the dividendable flag, 1 means the payment is dividendable
+```
+
+Finally, Address_C wants to issue dividends to all token holders. The following By-law Script is executed by Address_C.
+
+```javascript
+offer_dividends();
+```
+
+### Package operations into a program
+
+The above examples of code all execute single operations. For a program, it can contain multiple operations, and all operations will be executed sequentially, one after another. The advantage of doing this is that if an operator needs to execute a program and the program consists of multiple operations, it is necessary to ensure that all operations contained in this program are successfully approved for execution by voting, or the entire program is rejected as a whole.
+
+Here is the translation of the example you provided:
+
+**Address_E decides to invest in DARC. The investment agreement needs to complete four tasks**:
+
+1. Address_E pays 50000000 wei as venture capital.
+2. Address_E will receive 10000 shares of level-0 tokens (common stock).
+3. Address_E will receive 1 share of level-1 tokens (board seat).
+4. Address_E will receive 20000 shares of level-2 tokens (dividendable-only stock)."
+
+
+For the aforementioned four operations, we aspire for either all four operations to be simultaneously approved and successfully executed, or all four operations to be simultaneously rejected with none executed. For investor Address_E, it is absolutely undesirable to have a scenario where a single-operation program pays 50000000 wei to DARC, followed by the subsequent rejection of the three operations by the DARC manager. Therefore, in this scenario, the four operations must be bundled into a single program. If this program requires voting, the entire program must undergo the voting process. Upon rejection, Address_E will neither acquire shares nor a board seat, and the cash will be refunded to Address_E.
+
+Below is a complete By-law Script Program containing the four operations mentioned above:
+
+```javascript
+// pay 50000000 wei to DARC
+pay_cash(
+ 50000000, // the amount = 50000000 wei
+ 0, // the payment type = 0, the default native token
+ 0); // the dividendable flag, 0 means the payment is non-dividendable
+
+// mint 10000 shares of level-0,
+// 1 share of level-1,
+// and 20000 shares of level-2 tokens to Address_E
+batch_mint_tokens(
+ [Address_E, Address_E, Address_E], // the addresses of the recipients
+ [0, 1, 2], // the token index
+ [10000, 1, 20000]); // the amounts
+
+```
+
+This script encapsulates all the operations into a single program, ensuring that they are either all approved and executed successfully or all rejected without any execution. If the program requires voting, it must undergo the voting process as a whole. If rejected, Address_E will not obtain shares, a board seat, nor pay the cash, which will be refunded to Address_E.
+
+
+### Write By-law Script, just like writing JavaScript
+
+By-law Script is based on JavaScript, so most of the syntax and grammar are the same as JavaScript, including the use of variables, constants, and functions.
+
+Below is a batch script that paying cash to different addresses with different amounts. The amount is saved in a map, and the payment is executed in a loop.
+
+```javascript
+const balance = new Map(
+ [
+ [address_X1, 1000000],
+ [address_X2, 2000000],
+ [address_X3, 3000000],
+ [address_X4, 4000000]
+ ]
+);
+
+for (const [address, amount] of balance) {
+ batch_add_withdrawable_balances( // if you don't want to package all operations into a batch operation
+ [address], // the addresses of the recipients
+ [amount]); // the amounts
+}
+```
+
+### Remember to add notes to the program
+
+When you write a By-law Script program, it is important to add notes to the program to explain the purpose of the program. This is especially important when the program requires voting. The notes will be displayed to the voters during the voting process, and will help them to understand the purpose of the program and make a decision.
+
+By adding notes, you can just call the `setNote()` function in any place of the program. Below is an example of adding notes to the program.
+
+```javascript
+setNote("Investment agreement for Address_E");
+```
+
+### Your first Plugin-as-a-Law
+
+Plugin is the core mechanism of DARC and serves as its legal framework. All rules within DARC are based on the plugin system. By-law Script supports operator overload to make the composition and design of plugins simpler and more convenient. In By-law Script, each plugin is an object body. Below is the simplest example:
+
+```javascript
+const plugin_0 = {
+ returnType: NO, // return type: NO
+ level: 3, // level 3
+ votingRuleIndex: 0, // voting rule index, if voting is required
+ notes: "disable all operations", // the notes of the plugin
+ bIsEnabled: true, // the plugin is enabled. this is the default value
+ bIsBeforeOperation: true, // if the plugin is executed before the operation
+ conditionNodes: boolean_true() // condition: always true
+},
+```
+
+In the above plugin, we define conditionNodes with only one node, which is the object TRUE() we created. This plugin signifies that before any program or operation is executed, this plugin will be triggered. The returnType of this plugin is NO, indicating that whenever this plugin is triggered, it will be rejected. Therefore, when this plugin is successfully deployed in DARC, if no plugin of a higher level than level 3 is triggered to allow execution, then any operation will be rejected.
+
+
+One of the most important features of By-law Script is its ability to use operator overloading to write condition nodes. Each condition node is an expression with parameters, and condition nodes are a series of expressions connected by logical operators such as AND, OR, and NOT. Therefore, by supporting operator overload at the transpiler level, developers can easily write condition nodes as triggering conditions for plugins.
+
+Below is an example of composing plugins with condition nodes using operator overloading. It contains four plugins, establishing a set of rules for address_A to maintain a 20% non-dilutable ownership of the company's shares.
+
+```javascript
+const plugin_before_op_1 = {
+ returnType: SANDBOX_NEEDED, // return type: SANDBOX_NEEDED
+ level: 4, // level 3
+ votingRuleIndex: 0, // voting rule index, if voting is required
+ notes: "minting tokens should be checked", // the notes of the plugin
+ bIsEnabled: true, // the plugin is enabled. this is the default value
+ bIsBeforeOperation: true, // if the plugin is executed before the operation
+ conditionNodes:
+ // if the operation is minting tokens or creating token classes
+ (operation_equals(EnumOpcode.BATCH_MINT_TOKENS) |
+ operation_equals(EnumOpcode.BATCH_PAY_TO_MINT_TOKENS))
+
+ // and the token index is in range [0, 3], which means the token index is 0, 1, 2, or 3
+ & batch_op_any_token_class_in_range(0, 3)
+}
+
+const plugin_after_op_1 = {
+ returnType: NO,
+ level: 6,
+ votingRuleIndex: 0,
+ notes: "address_A must holds at least 20% of total voting and dividend weight",
+ bIsEnabled: true,
+ bIsBeforeOperation: false, // after-operation plugin
+ conditionNodes:
+
+ // if the address_A's voting weight percentage is less than 20%
+ // or the address_A's dividend weight percentage is less than 20%
+ address_voting_weight_percenrage_less_than(address_A, 20)
+ | address_dividend_weight_percenrage_less_than(address_A, 20)
+}
+
+const plugin_before_op_2 = {
+ returnType: NO,
+ level: 6,
+ votingRuleIndex: 0,
+ notes: "no one can disable before-op plugin 1,2,3 or after-op plugin 1",
+ bIsEnabled: true,
+ bIsBeforeOperation: true, // before-operation plugin
+ conditionNodes:
+
+ operation_equals(EnumOpcode.BATCH_DISABLE_PLUGINS)
+ &
+ ( disable_any_before_op_plugin_index_in_list([1,2,3])
+ | disable_any_after_op_plugin_index_in_list([1]) )
+ & not(operator_address_equals(address_A))
+}
+
+const plugin_before_op_3 = {
+ returnType: YES_AND_SKIP_SANDBOX,
+ level: 7,
+ votingRuleIndex: 0,
+ notes: "only address_A can disable before-op plugin 1,2,3 and after-op plugin 1",
+ bIsEnabled: true,
+ bIsBeforeOperation: true, // before-operation plugin
+ conditionNodes:
+ operation_equals(EnumOpcode.BATCH_DISABLE_PLUGINS)
+ &
+ ( disable_any_before_op_plugin_index_in_list([1,2,3])
+ | disable_any_after_op_plugin_index_in_list([1]) )
+ & operator_address_equals(address_A)
+}
+```
+
+In the example provided, we have defined four plugins:
+
+1. The first plugin marks any operation as SANDBOX_NEEDED if it is either batch_mint_tokens or batch_pay_to_mint_tokens, and the token level is 0, 1, 2, or 3. This plugin ensures that any addition to the supply of tokens at these levels must undergo sandbox checks.
+
+2. The second plugin marks any operation as NO if, after the execution of any program, the total voting or total dividend rights of address_A fall below 20% in the sandbox. This ensures that address_A retains anti-dilution ownership of 20% of the total shares, regardless of how other operators increase share issuance.
+
+3. The third plugin directly rejects any operation that is batch_disable_plugins, and the disabled plugin indexes are 1, 2, 3 in the before-operation plugin list, or 1 in the after-operation plugin list, and the operator address is not equal to address_A. This plugin ensures that no one other than address_A can disable this set of four plugins, thereby securing the 20% non-dilutable ownership of address_A.
+
+4. The fourth plugin allows any operation that is batch_disable_plugins, and the disabled plugin indexes are 1, 2, 3 in the before-operation plugin list, or 1 in the after-operation plugin list, and the operator address is equal to address_A. This plugin ensures that this set of four plugins can be disabled by anyone other than address_A, allowing address_A to waive the anti-dilution feature of its ownership by disabling these four plugins.
+
+After the plugin is defined, it can be added to the plugin list of the DARC. Below is an example of adding the above four plugins to the plugin list of the DARC. Make sure that the existing before-operation plugin list only contains 1 plugin, and the existing after-operation plugin list also only contains 1 plugin.
+
+```javascript
+batch_add_and_enable_plugins(
+ [plugin_before_op_1, plugin_after_op_1, plugin_before_op_2, plugin_before_op_3]);
+```
+
+### How does operator overloading work in By-law Script?
+
+There are three types of condition nodes in the By-law Script, all of which are inherited from the base class `Node`
+
+1. Expression, a condition node that is a single expression with parameters, without any child nodes, such as `operator_address_equals(inputAddress)`.
+2. Logical operators(`and`, `or`, `not`), a condition node that is a series of expressions connected by logical operators.
+3. Boolean constants(`boolean_true`, `boolean_false`), a condition node that is a boolean constant.
+
+The transpiler of By-law Script supports operator overloading for the base `Node` type with bit-and `&` and bit-or `|`, and will be overloaded to the logical operators `and` and `or` respectively.
+
+For example, the following expression:
+
+```javascript
+expression1() & (expression2() | expression3() ) & expression4()
+```
+
+will be transpiled and overloaded to:
+
+```javascript
+and(
+ expression1(),
+ or(expression2(), expression3()),
+ expression4()
+)
+```
+
+Since each lower-case function is actually the wrapper of the constructor of the corresponding object, the above code is equivalent to the following code:
+
+```javascript
+new AND(
+ new Expression1(),
+ new OR(new Expression2(), new Expression3()),
+ new Expression4()
+)
+```
+
+And when the condition nodes are set to plugin, the runtime will automatically serialize the tree-like structure of the condition nodes to the list of nodes(if the type of condition nodes value is `Node`), which is the actual format of the condition nodes in the plugin for DARC interface. The above example will be transpiled to (in pseudo-code):
+
+```javascript
+[
+ // node index 0: the root node, the AND node
+ {
+ nodeType: "LOGICAL_OPERATOR",
+ logialOperator: "AND",
+ childList: [1, 2, 5]
+ },
+
+ // node index 1: expression 1
+ {
+ nodeType: "EXPRESSION",
+ expression: "expression1"
+ param: {}
+ childList: []
+ },
+
+ // node index 2: OR node
+ {
+ nodeType: "LOGICAL_OPERATOR",
+ logialOperator: "OR",
+ childList: [3, 4]
+ },
+
+ // node index 3: expression 2
+ {
+ nodeType: "EXPRESSION",
+ expression: "expression2"
+ param: {}
+ childList: []
+ },
+
+ // node index 4: expression 3
+ {
+ nodeType: "EXPRESSION",
+ expression: "expression3"
+ param: {}
+ childList: []
+ },
+
+ // node index 5: expression 4
+ {
+ nodeType: "EXPRESSION",
+ expression: "expression4"
+ param: {}
+ childList: []
+ }
+]
+```
+
+In this way, the transpiler of By-law Script supports operator overloading for the condition nodes, and runtime generate the actual format of the condition nodes in the plugin for DARC interface.
diff --git a/darc-specs/condition_expression.md b/darc-docs/docs/DARC Protocol/Condition Nodes.md
similarity index 90%
rename from darc-specs/condition_expression.md
rename to darc-docs/docs/DARC Protocol/Condition Nodes.md
index de5f3125..307e0cac 100644
--- a/darc-specs/condition_expression.md
+++ b/darc-docs/docs/DARC Protocol/Condition Nodes.md
@@ -1,6 +1,108 @@
-# Condition Expression Table
+---
+sidebar_position: 3
+---
-## Notes
+# Condition Nodes
+
+### What is a Condition Node?
+
+Plugins are the laws of the DARC protocol. Each plugin contains an array of condition nodes and a return type. Each condition node can be a condition expression, a logical operator, or a boolean value. The condition array can be reconstructed into a logical tree, representing the trigger conditions of the plugin.
+
+Each expression node is composed with a opcode(condition node ID) and one or a few parameters. The struct of the node parameter is defined as follows:
+
+```
+struct NodeParam {
+ string[] STRING_ARRAY;
+ uint256[][] UINT256_2DARRAY;
+ address[][] ADDRESS_2DARRAY;
+ bytes BYTES;
+}
+```
+
+### Logical Operators
+
+There are three logical operators in the DARC protocol: `AND`, `OR`, and `NOT`. The `AND` operator returns true if all of its children are true. The `OR` operator returns true if any of its children are true. The `NOT` operator returns true if its child is false. There must be at least one child for the `AND` and `OR` operators, and only one child for the `NOT` operator.
+
+In both By-law Script and darc.js SDK, you can use the `and()`, `or()`, and `not()` wrapper functions to create the logical operators, for example:
+
+In darc.js SDK:
+
+```ts
+import {and, or, not, AND, OR, NOT} from 'darcjs';
+
+const conditionTree = and(
+ or(
+ expression1(),
+ expression2()
+ ),
+
+ expression3(),
+
+ not(
+ expression4()
+ )
+);
+
+// or using the class constructor
+const conditionTree = new And(
+ new OR(
+ expression1(),
+ expression2()
+ ),
+
+ expression3(),
+
+ new NOT(
+ expression4()
+ )
+);
+```
+
+In By-law Script:
+
+```ts
+const conditionTree = and(
+ or(
+ expression1(),
+ expression2()
+ ),
+
+ expression3(),
+
+ not(
+ expression4()
+ )
+);
+
+// or using the class constructor
+const conditionTree = new AND(
+ new OR(
+ expression1(),
+ expression2()
+ ),
+
+ expression3(),
+
+ new NOT(
+ expression4()
+ )
+);
+```
+
+Also you can use `|` for `OR`, `&` for `AND`, and `!` for `NOT` in By-law Script, and these operators will be parsed into the corresponding condition nodes. For example, the above By-law Script can be written as:
+
+```ts
+const conditionTree =
+ expression1() &
+ ( expression2() | expression3() ) &
+ ( ! expression4() );
+```
+
+### Boolean Values
+
+There are two boolean values in the DARC protocol: class `TRUE` and class `FALSE`, or wrapper function `boolean_true()` and `boolean_false()`. They are used to represent a boolean node in the condition tree.
+
+### Condition Expression
1. There are multiple batch-operations, including:
- Batch Mint Tokens
@@ -26,11 +128,13 @@
- Batch Pay to Transfer Tokens
- Batch Burn Tokens and Refund
-For more details, please refer to [DARC Instruction Set Opcode Table(opcode.md)](opcode.md)
+For more details, please refer to [DARC Instruction Set Opcode Table(opcode.md)](OpCodes.md)
2. Placeholders are reserved for future use.
-3. the range [staringValue, endingValue] is inclusive. For example, if the range is [1, 3], then the value 1, 2, 3 are all included.
+3. The range [staringValue, endingValue] is inclusive. For example, if the range is [1, 3], then the value 1, 2, 3 are all included.
+
+4. In the DARC protocol, all expressions are named with upper case, and in darc.js SDK and By-law Script, all expressions are named with lower case. For example, `OPERATOR_NAME_EQUALS` in the DARC protocol is `operator_name_equals` in darc.js SDK and By-law Script.
| ID | Expression Name | Parameter| Notes| Ready |
|------------|------|------|-------| ---- |
@@ -129,12 +233,12 @@ For more details, please refer to [DARC Instruction Set Opcode Table(opcode.md)]
| 92 | TOKEN_IN_LIST_AMOUNT_LESS_THAN | UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
| 93 | TOKEN_IN_LIST_AMOUNT_IN_RANGE | UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
| 94 | TOKEN_IN_LIST_AMOUNT_EQUALS| UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
-| 95 | Placeholder95 | | |
-| 96 | Placeholder96 | | |
-| 97 | Placeholder97 | | |
-| 98 | Placeholder98 | | |
-| 99 | Placeholder99 | | |
-| 100 | Placeholder100 | | |
+| 95 | ADDRESS_VOTING_WEIGHT_PERCENTAGE_GREATER_THAN| UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address ||
+| 96 | ADDRESS_VOTING_WEIGHT_PERCENTAGE_LESS_THAN | UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address ||
+| 97 | ADDRESS_VOTING_WEIGHT_PERCENTAGE_IN_RANGE | UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address ||
+| 98 | ADDRESS_DIVIDEND_WEIGHT_PERCENTAGE_GREATER_THAN | UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address ||
+| 99 | ADDRESS_DIVIDEND_WEIGHT_PERCENTAGE_LESS_THAN| UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address ||
+| 100 | ADDRESS_DIVIDEND_WEIGHT_PERCENTAGE_IN_RANGE | UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address ||
| 101 | Placeholder101 | | |
| 102 | Placeholder102 | | |
| 103 | Placeholder103 | | |
@@ -214,16 +318,16 @@ For more details, please refer to [DARC Instruction Set Opcode Table(opcode.md)]
| 178 | Placeholder178 | | |
| 179 | Placeholder179 | | |
| 180 | Placeholder180 | | |
-| 181 | ORACLE_CALL_UINT256_RESULT_EQUALS | string oracle, string method, uint256[] args, uint256 expectedValue ||
-| 182 | ORACLE_CALL_UINT256_RESULT_GREATER_THAN | string oracle, string method, uint256[] args, uint256 minValue ||
-| 183 | ORACLE_CALL_UINT256_RESULT_LESS_THAN | string oracle, string method, uint256[] args, uint256 maxValue ||
-| 184 | ORACLE_CALL_UINT256_RESULT_IN_RANGE | string oracle, string method, uint256[] args, uint256 minValue, uint256 maxValue ||
-| 185 | ORACLE_CALL_UINT256_1_LESS_THAN_2 | string oracle, string method, uint256[] args ||
-| 186 | ORACLE_CALL_UINT256_1_GREATER_THAN_2 | string oracle, string method, uint256[] args ||
-| 187 | ORACLE_CALL_UINT256_1_EQUALS_2 | string oracle, string method, uint256[] args ||
-| 188 | ORACLE_CALL_STRING_RESULT_EQUALS | string oracle, string method, string[] args, string expectedValue ||
-| 189 | ORACLE_CALL_STRING_1_EQUALS_2 | string oracle, string method, string[] args ||
-| 190 | ORACLE_CALL_STRING_RESULT_IN_LIST | string oracle, string method, string[] args, string[] expectedValues ||
+| 181 | EXTERNAL_CALL_UINT256_RESULT_EQUALS | ADDRESS_2DARRAY[0][0] externalAddress, BYTES encodedParameters, UINT256_2DARRAY[0][0] value || NOT READY, DO NOT USE
+| 182 | EXTERNAL_CALL_UINT256_RESULT_GREATER_THAN | sADDRESS_2DARRAY[0][0] externalAddress, BYTES encodedParameters, UINT256_2DARRAY[0][0] value || NOT READY, DO NOT USE
+| 183 | EXTERNAL_CALL_UINT256_RESULT_LESS_THAN | ADDRESS_2DARRAY[0][0] externalAddress, BYTES encodedParameters, UINT256_2DARRAY[0][0] value || NOT READY, DO NOT USE
+| 184 | EXTERNAL_CALL_UINT256_RESULT_IN_RANGE | ADDRESS_2DARRAY[0][0] externalAddress, BYTES encodedParameters, UINT256_2DARRAY[0][0] minValue, UINT256_2DARRAY[0][1] maxValue || NOT READY, DO NOT USE
+| 185 | EXTERNAL_CALL_STRING_RESULT_EQUALS | string external, string method, string[] args, string expectedValue || NOT READY, DO NOT USE
+| 186 | Placeholder186 | | |
+| 187 | Placeholder187 | | |
+| 188 | Placeholder188 | | |
+| 189 | Placeholder189 | | |
+| 190 | Placeholder190 | | |
| 191 | Placeholder191 | | |
| 192 | Placeholder192 | | |
| 193 | Placeholder193 | | |
@@ -506,9 +610,9 @@ For more details, please refer to [DARC Instruction Set Opcode Table(opcode.md)]
| 462 | TOKEN_X_OP_ANY_PRICE_LESS_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] price | For three operations: "BATCH_PAY_TO_MINT_TOKENS", "BATCH_PAY_TO_TRANSFER_TOKENS" and "BATCH_BURN_TOKENS_AND_REFUND".
| 463 | TOKEN_X_OP_ANY_PRICE_IN_RANGE | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] startPrice, UINT256_2DARRAY[0][2] endPrice | For three operations: "BATCH_PAY_TO_MINT_TOKENS", "BATCH_PAY_TO_TRANSFER_TOKENS" and "BATCH_BURN_TOKENS_AND_REFUND".
| 464 | TOKEN_X_OP_ANY_PRICE_EQUALS | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] price | For three operations: "BATCH_PAY_TO_MINT_TOKENS", "BATCH_PAY_TO_TRANSFER_TOKENS" and "BATCH_BURN_TOKENS_AND_REFUND".
-| 465 | Placeholder465 | | |
-| 466 | Placeholder466 | | |
-| 467 | Placeholder467 | | |
+| 465 | TOKEN_X_OP_ANY_PRICE_GREATER_THAN_EXTERNAL_VALUE_UINT256 | UINT256_2DARRAY[0][0] tokenClass, ADDRESS_2DARRAY[0][0] externalContractAddress, BYTES abiEncodedParameters | For three operations: "BATCH_PAY_TO_MINT_TOKENS", "BATCH_PAY_TO_TRANSFER_TOKENS" and "BATCH_BURN_TOKENS_AND_REFUND".
+| 466 | TOKEN_X_OP_ANY_PRICE_LESS_THAN_EXTERNAL_VALUE_UINT256 | UINT256_2DARRAY[0][0] tokenClass, ADDRESS_2DARRAY[0][0] externalContractAddress, BYTES abiEncodedParameters | For three operations: "BATCH_PAY_TO_MINT_TOKENS", "BATCH_PAY_TO_TRANSFER_TOKENS" and "BATCH_BURN_TOKENS_AND_REFUND".
+| 467 | TOKEN_X_OP_ANY_PRICE_EQUALS_EXTERNAL_VALUE_UINT256 | UINT256_2DARRAY[0][0] tokenClass, ADDRESS_2DARRAY[0][0] externalContractAddress, BYTES abiEncodedParameters | For three operations: "BATCH_PAY_TO_MINT_TOKENS", "BATCH_PAY_TO_TRANSFER_TOKENS" and "BATCH_BURN_TOKENS_AND_REFUND".
| 468 | Placeholder468 | | |
| 469 | Placeholder469 | | |
| 470 | Placeholder470 | | |
diff --git a/darc-docs/docs/DARC Protocol/Getting Started.md b/darc-docs/docs/DARC Protocol/Getting Started.md
index 64622fff..4a44b7a3 100644
--- a/darc-docs/docs/DARC Protocol/Getting Started.md
+++ b/darc-docs/docs/DARC Protocol/Getting Started.md
@@ -4,9 +4,9 @@ sidebar_position: 1
# Getting Started
-## What is the DARC Protocol?
+### What is the DARC Protocol?
-## Building the source
+### Building the source
Since Hardhat and OpenZeppelin are used, the project can be built using the following commands:
@@ -18,7 +18,7 @@ Since Hardhat and OpenZeppelin are used, the project can be built using the foll
friendly.
```shell
- cd darc-protocal
+ cd darc-protocol
npm install
```
@@ -28,21 +28,37 @@ Since Hardhat and OpenZeppelin are used, the project can be built using the foll
npx hardhat compile
```
-3. Run the Darc test network
+3. Host a local devnet node with hardhat configuration:
```shell
- npm run node
+ npx hardhat node
```
4. Test contracts
```shell
- npx hardhat test
- REPORT_GAS=true npm run test
+ REPORT_GAS=true npx hardhat test --network localhost
```
-5. Deploy contracts
+### Deploy
- ```shell
- npm run deploy
- ```
\ No newline at end of file
+To deploy the DARC protocol, you can use the following commands:
+
+```shell
+npx hardhat run scripts/deploy.js --network
+```
+
+If you want to deploy the DARC protocol to the local devnet, you can use the following command:
+
+
+```shell
+npx hardhat run scripts/deploy.js --network localhost
+```
+
+Make sure you have a local devnet node running before deploying the DARC protocol.
+
+If you want to deploy the DARC protocol to the Ethereum mainnet, you can use the following command:
+
+```shell
+npx hardhat run scripts/deploy.js --network mainnet
+```
diff --git a/darc-docs/docs/DARC Protocol/OpCodes.md b/darc-docs/docs/DARC Protocol/OpCodes.md
index afa6ba97..27bad235 100644
--- a/darc-docs/docs/DARC Protocol/OpCodes.md
+++ b/darc-docs/docs/DARC Protocol/OpCodes.md
@@ -4,7 +4,7 @@ sidebar_position: 2
# OpCodes
-## What is an OpCode?
+### What is an OpCode?
Decentralized Autonomous Regulated Corporation (DARC) is a protocol that enables the creation and management of autonomous entities with built-in governance and regulatory mechanisms. One of the key components of the DARC protocol is the opcode instruction set, which defines the basic operations for managing tokens, money, and law within the system.
@@ -16,44 +16,46 @@ Furthermore, the opcode instruction set includes operations for handling monetar
By defining these operations through opcodes, the DARC protocol ensures consistency, transparency, and security in managing tokens, money, and law within autonomous entities. These instructions form the foundation for the decentralized governance and regulation of corporations, providing a framework for transparent and auditable decision-making processes.
-## Opcode List
-
-| Opcode | Opcode ID | Parameters | Description |
-|------------------------|-----------|--------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|
-| UNDEFINED | 0 | N/A | Invalid Operation |
-| BATCH_MINT_TOKENS | 1 | `toAddressArray`: address[]
`tokenClassArray`: uint256[]
`amountArray`: uint256[] | Batch Mint Token Operation |
-| BATCH_CREATE_TOKEN_CLASSES | 2 | `nameArray`: string[]
`tokenIndexArray`: uint256[]
`votingWeightArray`: uint256[]
`dividendWeightArray`: uint256[] | Batch Create Token Class Operation |
-| BATCH_TRANSFER_TOKENS | 3 | `toAddressArray`: address[]
`tokenClassArray`: uint256[]
`amountArray`: uint256[] | Batch Transfer Token Operation |
-| BATCH_TRANSFER_TOKENS_FROM_TO | 4 | `fromAddressArray`: address[]
`toAddressArray`: address[]
`tokenClassArray`: uint256[]
`amountArray`: uint256[] | Batch Transfer Token From Addr A to Addr B Operation |
-| BATCH_BURN_TOKENS | 5 | `tokenClassArray`: uint256[]
`amountArray`: uint256[] | Batch Burn Token Operation |
-| BATCH_BURN_TOKENS_FROM | 6 | `fromAddressArray`: address[]
`tokenClassArray`: uint256[]
`amountArray`: uint256[] | Batch Burn Token From Addr A Operation |
-| BATCH_ADD_MEMBERSHIP | 7 | `memberAddressArray`: address[]
`memberRoleArray`: uint256[]
`memberNameArray`: string[] | Batch Add Member Operation |
-| BATCH_SUSPEND_MEMBERSHIP | 8 | `memberAddressArray`: address[] | Batch Suspend Member Operation |
-| BATCH_RESUME_MEMBERSHIP | 9 | `memberAddressArray`: address[] | Batch Resume Member Operation |
-| BATCH_CHANGE_MEMBER_ROLES | 10 | `memberAddressArray`: address[]
`memberRoleArray`: uint256[] | Batch Change Member Role Operation |
-| BATCH_CHANGE_MEMBER_NAMES | 11 | `memberAddressArray`: address[]
`memberNameArray`: string[] | Batch Change Member Name Operation |
-| BATCH_ADD_PLUGINS | 12 | `pluginList`: Plugin[] | Batch Add Emergency Agent Operation |
-| BATCH_ENABLE_PLUGINS | 13 | `pluginIndexArray`: uint256[]
`isBeforeOperationArray`: bool[] | Batch Enable Plugin Operation |
-| BATCH_DISABLE_PLUGINS | 14 | `pluginIndexArray`: uint256[]
`isBeforeOperationArray`: bool[] | Batch Disable Plugin Operation |
-| BATCH_ADD_AND_ENABLE_PLUGINS | 15 | `pluginList`: Plugin[] | Batch Add and Enable Plugin Operation |
-| BATCH_SET_PARAMETERS | 16 | `parameterNameArray`: MachineParameter[]
`parameterValueArray`: uint256[] | Batch Set Parameter Operation |
-| BATCH_ADD_WITHDRAWABLE_BALANCES | 17 | `addressArray`: address[]
`amountArray`: uint256[] | Batch Add Withdrawable Balance Operation |
-| BATCH_REVOKE_WITHDRAWABLE_BALANCE | 18 | `addressArray`: address[] | Batch Revoke Withdrawable Balance Operation |
-| BATCH_WITHDRAW_FROM_BALANCE | 19 | `addressArray`: address[]
`amountArray`: uint256[] | Batch Withdraw From Balance Operation |
-| BATCH_PAY_TO_MINT_TOKENS | 20 | `addressArray`: address[]
`tokenClassArray`: uint256[]
`amountArray`: uint256[]
`priceArray`: uint256[] | Batch Pay to Mint Tokens Operation |
-| BATCH_PAY_TO_TRANSFER_TOKENS | 21 | `toAddressArray`: address[]
`tokenClassArray`: uint256[]
`amountArray`: uint256[]
`priceArray`: uint256[] | Pay Some Cash to Transfer Tokens Operation |
-| ADD_EMERGENCY | 22 | `addressArray`: address[] | Add an Array of Addresses as Emergency Agents |
-| RESERVED_ID_23 | 23 | `addressArray`: address[]
`amountArray`: uint256[] | Withdraw Cash from the Contract's Cash Balance |
-| CALL_EMERGENCY | 24 | `addressArray`: address[] | Call Emergency Agents to Handle Emergency Situations |
-| CALL_CONTRACT_ABI | 25 | `contractAddress`: address
`abi`: bytes | Call a Contract with the Given ABI |
-| PAY_CASH | 26 | `amount`: uint256
`paymentType`: uint256
`dividendable`: uint256 | Pay Some Cash |
-| OFFER_DIVIDENDS | 27 | N/A | Calculate Dividends and Offer to Token Holders |
-| RESERVED_ID_28 | 28 | `addressArray`: address[]
`amountArray`: uint256[] | Withdraw Dividends from the Withdrawable Dividends Balance |
-| SET_APPROVAL_FOR_ALL_OPERATIONS | 29 | `address`: address | Set Approval for All Transfer Operations by Address |
-| BATCH_BURN_TOKENS_AND_REFUND | 30 | `tokenClassArray`: uint256[]
| Batch Burn Tokens and Refund |
-| ADD_STORAGE_IPFS_HASH | 31 | `address`: string[] | Add Storage IPFS Hash |
-| VOTE | 32 | `voteArray`: bool[] | Vote for a Voting Pending Program |
-| EXECUTE_PENDING_PROGRAM | 33 | N/A | Execute a Program that has been Voted and Approved |
-
-
-
+### Notes
+
+In DARC protocol, the operations are named with uppercase letters, and in By-law Script and darcjs SDK, the operations are named with lowercase letters. For example, the operation `BATCH_MINT_TOKENS` in DARC protocol are named `batch_mint_tokens` in both By-law Script and darcjs SDK.
+
+| Opcode ID | Opcode Name | Opcode Parameter | Opcode Notes |
+|-----------|----------------------------------------------|----------------------------------------------------------|------------------------------------------------------------|
+| 0 | UNDEFINED | | Invalid Operation |
+| 1 | BATCH_MINT_TOKENS | ADDRESS_2DARRAY[0] toAddressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray | Batch Mint Token Operation |
+| 2 | BATCH_CREATE_TOKEN_CLASSES | STRING_ARRAY[] nameArray, UINT256_2DARRAY[0] tokenIndexArray, UINT256_2DARRAY[1] votingWeightArray, UINT256_2DARRAY[2] dividendWeightArray | Batch Create Token Class Operation |
+| 3 | BATCH_TRANSFER_TOKENS | ADDRESS_2DARRAY[0] toAddressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray | Batch Transfer Token Operation |
+| 4 | BATCH_TRANSFER_TOKENS_FROM_TO | ADDRESS_2DARRAY[0] fromAddressArray, ADDRESS_2DARRAY[1] toAddressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray | Batch Transfer Token From Addr A to Addr B Operation |
+| 5 | BATCH_BURN_TOKENS | UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray | Batch Burn Token Operation |
+| 6 | BATCH_BURN_TOKENS_FROM | ADDRESS_2DARRAY[0] fromAddressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray | Batch Burn Token From Addr A Operation |
+| 7 | BATCH_ADD_MEMBERSHIPS | ADDRESS_2DARRAY[0] memberAddressArray, UINT256_2DARRAY[0] memberRoleArray, STRING_ARRAY memberNameArray | Batch Add Member Operation |
+| 8 | BATCH_SUSPEND_MEMBERSHIPS | ADDRESS_2DARRAY[0] memberAddressArray | Batch Suspend Member Operation |
+| 9 | BATCH_RESUME_MEMBERSHIPS | ADDRESS_2DARRAY[0] memberAddressArray | Batch Resume Member Operation |
+| 10 | BATCH_CHANGE_MEMBER_ROLES | ADDRESS_2DARRAY[0] memberAddressArray, UINT256_2DARRAY[0] memberRoleArray | Batch Change Member Role Operation |
+| 11 | BATCH_CHANGE_MEMBER_NAMES | ADDRESS_2DARRAY[0] memberAddressArray, STRING_ARRAY memberNameArray | Batch Change Member Name Operation |
+| 12 | BATCH_ADD_PLUGINS | Plugin[] pluginList | Batch Add Emergency Agent Operation |
+| 13 | BATCH_ENABLE_PLUGINS | UINT256_ARRAY[0] pluginIndexArray, BOOL_ARRAY isBeforeOperationArray | Batch Enable Plugin Operation |
+| 14 | BATCH_DISABLE_PLUGINS | UINT256_ARRAY[0] pluginIndexArray, BOOL_ARRAY isBeforeOperationArray | Batch Disable Plugin Operation |
+| 15 | BATCH_ADD_AND_ENABLE_PLUGINS | Plugin[] pluginList | Batch Add and Enable Plugin Operation |
+| 16 | BATCH_SET_PARAMETERS | MachineParameter[] parameterNameArray, UINT256_2DARRAY[0] parameterValueArray | Batch Set Parameter Operation |
+| 17 | BATCH_ADD_WITHDRAWABLE_BALANCES | ADDRESS_2DARRAY[0] addressArray, UINT256_2DARRAY[0] amountArray | Batch Add Withdrawable Balance Operation |
+| 18 | BATCH_REDUCE_WITHDRAWABLE_BALANCES | ADDRESS_2DARRAY[0] addressArray, UINT256_2DARRAY[0] amountArray | Batch Reduce Withdrawable Balance Operation |
+| 19 | BATCH_ADD_VOTING_RULES | VotingRule[] votingRuleList | Batch Add Voting Rules Operation |
+| 20 | BATCH_PAY_TO_MINT_TOKENS | ADDRESS_2DARRAY[0] addressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray, UINT256_2DARRAY[2] priceArray, UINT256_2DARRAY[3] dividendableFlag | Batch Pay to Mint Tokens Operation |
+| 21 | BATCH_PAY_TO_TRANSFER_TOKENS | ADDRESS_2DARRAY[0] toAddressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray, UINT256_2DARRAY[2] priceArray, UINT256_2DARRAY[3] dividendableFlag | Pay some cash to transfer tokens Operation (product coins) |
+| 22 | ADD_EMERGENCY | ADDRESS_2DARRAY[0] addressArray | Add an array of address as emergency agents Operation |
+| 23 | RESERVED_ID_23 | | Reserved ID 23 DO NOT USE |
+| 24 | CALL_EMERGENCY | UINT256_2DARRAY[0][0] emergencyAgentIndex | Call emergency agents to handle emergency situations |
+| 25 | CALL_CONTRACT_ABI | ADDRESS_2D[0][0] contractAddress, bytes abi, UINT256_2DARRAY[0][0] value | Call a contract with the given abi Operation |
+| 26 | PAY_CASH | uint256 amount, uint256 paymentType, uint256 dividendable | Pay some cash Operation |
+| 27 | OFFER_DIVIDENDS | | Calculate the dividends and offer to token holders Operation|
+| 28 | RESERVED_ID_28 | | Reserved ID 28 DO NOT USE |
+| 29 | SET_APPROVAL_FOR_ALL_OPERATIONS | ADDRESS_2DARRAY[0][0] targetAddress | Set the approval for all transfer operations by address Operation |
+| 30 | BATCH_BURN_TOKENS_AND_REFUND | UINT256_2D[0] tokenClassArray, UINT256_2D[1] amountArray, UINT256_2D[2] priceArray | Batch Burn tokens and Refund Operation |
+| 31 | ADD_STORAGE_STRING | STRING_ARRAY[0][0] IFPSHash | Add storage IPFS hash to the storage list permanently Operation |
+| 32 | VOTE | bool[] voteArray | Vote for a voting pending program Operation |
+| 33 | EXECUTE_PENDING_PROGRAM | | Execute a program that has been voted and approved Operation |
+| 34 | END_EMERGENCY | | Emergency mode termination Operation |
+| 35 | UPGRADE_TO_ADDRESS | ADDRESS_2DARRAY[0][0] targetAddress | Upgrade the contract to a new contract address Operation |
+| 36 | CONFIRM_UPGRAED_FROM_ADDRESS | ADDRESS_2DARRAY[0][0] fromAddress | Accepting current DARCs to be upgraded from the old contract address Operation |
diff --git a/darc-docs/docs/Overview/Overview.md b/darc-docs/docs/Overview/Overview.md
index 1436f198..19523b3c 100644
--- a/darc-docs/docs/Overview/Overview.md
+++ b/darc-docs/docs/Overview/Overview.md
@@ -1,5 +1,35 @@
# Overview
-## What is DARC?
+### What is DARC?
-Decentralized Autonomous Regulated Corporation(DARC) is a protocol that
\ No newline at end of file
+Decentralized Autonomous Regulated Corporation(DARC) is a virtual machine that written in Solidity. It is a smart contract that can be deployed on Ethereum or EVM-compatible blockchain. It is fully open source and can be used by anyone under the license.
+
+### DARC Project Goals and Features
+
+The ultimate goal of the DARC project is to design a comprehensive, self-regulating corporate governance system that liberates itself from the textual contracts and external regulations imposed by government and legal registrations such as C-corp, LLC, and foundations. It aims to achieve a complete, internal, trustworthy, and programmable plugin system for self-regulation within DARC instances. Therefore, it possesses the following characteristics:
+
+1. Multi-level tokens: DARC can configure multiple levels of tokens, each with its own voting weight and dividend weight. Through various configurations and combinations, tokens at different levels can serve as common stock, class A/B stock, company bonds, board of directors positions, preferred stock, and various other company assets and ownership structures defined by complex rules. Similarly, multi-level tokens can be commodities and services sold by DARC, whether they are fungible or non-fungible tokens.
+
+2. Plugin-as-a-Law: Plugin is the central mechanism of the DARC protocol, governing and establishing all rules within DARC, including the addition, enabling, and disabling of plugins themselves. Plugins define the operations permitted or prohibited within DARC under specific conditions. In the DARC framework, users can set up and add a complete set of plugins to define the daily operations of DARC, including board operations, company bylaws, shareholder agreements, complex investment agreements with various conditions, dividend regulations, employment contracts, procurement contracts, and more. By designing comprehensive and diverse plugins, DARC can be perfected much like real-world company legal contracts, regulating all operations of DARC members such as shareholders, the board of directors, employees, customers, and suppliers.
+
+3. Operation and Program: In the context of the DARC protocol, all operations are abstracted into a series of operations, including opcodes and parameters. Users can design, compile, and run all daily management and operations of DARC, including equity operations, member operations, cash operations, plugin design and maintenance, voting operations, and more, using By-law Script. These scripts are deployed and executed on the DARC virtual machine instance deployed on the blockchain.
+
+### DARC Project Structure
+
+The entire DARC Project ([https://github.com/project-darc](https://github.com/project-darc)) is divided into four parts:
+
+1. DARC Protocol: This is the core component of DARC and serves as the virtual machine that interprets and executes all operations and programs. This part is written and completed in Solidity. Users can choose to deploy the prebuilt DARC binary or modify and compile their own DARC protocol for one-click deployment to an EVM-compatible blockchain.
+
+2. By-law Script: By-law Script is a programming language used to write DARC programs and plugins. The basic syntax of By-law Script is almost identical to JavaScript, and it uniquely supports operator overloading. Therefore, users can easily write complex boolean logic and comprehensive conditional statements. By-law Script is the first programming language designed to write executable and deployable legal code within legal entities.
+
+3. darcjs: darcjs: darcjs is a toolkit and SDK for developers and users to interact with the DARC protocol. With darcjs, users can easily compile and run By-law Script, deploy the DARC protocol on specified EVM-compatible blockchains, or embed core functionalities related to DARC in developer projects, such as payments, voting, asset transfers, legal updates, cash withdrawals, and more.
+
+4. DARC Studio: DARC Studio is a visual web frontend. With DARC Studio, users can easily write and run By-law Script in the browser without installing darcjs. It visualizes various information about deployed DARC instances, such as recent activities, assets, equity distributions, legal documents, and more.
+
+### Community
+
+Telegram: [https://t.me/projectdarc](https://t.me/projectdarc)
+
+Github: [https://github.com/project-darc](https://github.com/project-darc)
+
+Github Discussions: [https://github.com/orgs/Project-DARC/discussions](https://github.com/orgs/Project-DARC/discussions)
\ No newline at end of file
diff --git a/darc-docs/docs/darc.js/Access to a deployed DARC.md b/darc-docs/docs/darc.js/Access to a deployed DARC.md
deleted file mode 100644
index b2bfc9bc..00000000
--- a/darc-docs/docs/darc.js/Access to a deployed DARC.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-sidebar_position: 3
----
-
-# Access to a deployed DARC
-
-To access a deployed DARC on an EVM-compatible blockchain, you need to constrcut a `DARC` object via the `DARC` class, in which the constructor takes the address of the deployed DARC and the signer or provider as parameters. For example:
-
-```ts
-import { ethers } from 'ethers';
-import { darcjs } from 'darcjs';
-
-// Construct a provider via JsonRpcProvider on local devnet node
-const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545/');
-
-// Get the deployed DARC address
-const darc_contract_address = '0x5FbDB2315678afecb367f032d93F642f64180aa3';
-
-// Construct a DARC object
-const myDARC = new darcjs.DARC({
- address: darc_contract_address,
- wallet: signer,
- version: DARC_VERSION.Test,
-});
-```
-
-Then you can use the `darc` object to access the deployed DARC, not only read the data of the DARC, but also run the program on the DARC. For example:
-
-```ts
-// Write a code snippet of DARC program
-let byLawScript =
-`
-// define address 1 and 2 for minting tokens
-const addr1 = '0x0000';
-const addr2 = '0x0001';
-
-// mint tokens to address addr1 and addr2
-batch_mint_tokens(
- [0,0,1,1],
- [1000,1000,2000,2000],
- [addr1, addr2, addr1, addr2]
- );
-
-// enable plugins 3, 4 before sandbox checking operation
-// and disable plugins 5, 6 after sandbox checking operation
-BATCH_ENABLE_PLUGINSs(
- [3,4,5,6],
- [true, true, false, false]
-);
-
-// finally, offer dividends to every token holder
-offer_dividends();
-`
-
-// Compile the code snippet above
-const program = darcjs.transpile(byLawScript);
-
-// Run the compiled program on the DARC deployed on the chain
-const result = await myDARC.entrance(program);
-```
-
-You can also access to a deployed DARC without a signer, but only with a valid provider, and access to all the data of the DARC via functions marked as `pure` or `view` (which does not need a signer to access and read), but cannot run the program on the DARC. For example:
-
-```ts
-import { ethers } from 'ethers';
-import { darcjs } from 'darcjs';
-
-// Construct a provider via JsonRpcProvider on local devnet node
-const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545/');
-
-// Construct a DARC object
-const myDARC_readOnly = new darcjs.DARC({
- address: address,
- provider: provider,
- version: DARC_VERSION.Test,
-});
-
-// Read the member address list of the DARC
-const memberList = await myDARC_readOnly.getMemberList();
-
-// Output the member name via member address
-for (let i = 0; i < memberList.length; i++) {
- const memberInfo = await myDARC_readOnly.getMemberInfo(memberList[i]);
- console.log("The member name of " + memberList[i] + " is " + memberInfo.name);
-}
-```
-
-And below operation will fail because it needs a signer to run the program on the DARC:
-
-```ts
-myDARC_readOnly.run(program); // This will throw an error
-```
\ No newline at end of file
diff --git a/darc-docs/docs/darc.js/Deploy your DARC.md b/darc-docs/docs/darc.js/Deploy your DARC.md
deleted file mode 100644
index c50ca4cc..00000000
--- a/darc-docs/docs/darc.js/Deploy your DARC.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-sidebar_position: 2
----
-
-# Deploy your DARC
-
-To deploy DARC on an EVM-compatible blockchain, you need to use the `deployDARC(DARC_VERSION, signer)` function, in which `DARC_VERSION` is the version of DARC you want to deploy and signer is the signer of the transaction. If you are using the browser environment and want to get the signer from the **MetaMask** wallet, you can use the `getSigner()` function from `ethers.js`, for example:
-
-
-```ts
-import { darcjs } from 'darcjs';
-import { ethers } from 'ethers';
-
-// Get signer from MetaMask wallet
-const signer = (new ethers.providers.Web3Provider(window.ethereum)).getSigner();
-
-// deploy DARC
-const darc_contract_address = await darcjs.deployDARC(
- DARC_VERSION.Test, signer
-);
-```
-
-If you are using the node.js environment, you need to use `ethers.providers` to construct a provider, then use the `ethers.Wallet` class from `ethers.js` to create a signer with a private key, for example:
-
-```ts
-import { ethers } from 'ethers';
-import { darcjs } from 'darcjs';
-
-// Construct the provider via JsonRpcProvider on local devnet node
-const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545/');
-
-// Construct the signer via Wallet class and private key
-const signer = new ethers.Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', provider);
-
-// deploy DARC
-const darc_contract_address = await darcjs.deployDARC(
- DARC_VERSION.Latest, signer
-);
-
-// print the address of the deployed DARC
-console.log("The deployed DARC address: " + darc_contract_address);
-```
\ No newline at end of file
diff --git a/darc-docs/docs/darc.js/Getting Started.md b/darc-docs/docs/darc.js/Getting Started.md
index cbc7d4c7..6bab99ce 100644
--- a/darc-docs/docs/darc.js/Getting Started.md
+++ b/darc-docs/docs/darc.js/Getting Started.md
@@ -7,12 +7,12 @@ import TabItem from '@theme/TabItem';
# Getting Started
-## What is darc.js?
+### What is darc.js?
**darc.js** is a TypeScript/JavaScript library for interacting with the DARC virtual machine for node.js and the browser
environment.
-## Installation
+### Installation
You need to install **ethers.js** with version 5.7.2 or 5.x.x toghether with **darc.js**.
@@ -20,32 +20,32 @@ You need to install **ethers.js** with version 5.7.2 or 5.x.x toghether with **d
```shell
-npm install darcjs ethers@5.7.2
+npm install darcjs
```
```shell
-yarn add darcjs ethers@5.7.2
+yarn add darcjs
```
```shell
-pnpm install darcjs ethers@5.7.2
+pnpm install darcjs
```
-## Usage
+### Usage
To use darc.js supports ESM, import it as follows:
```ts
-import {darcjs} from 'darcjs';
+import * as darcjs from 'darcjs';
```
Or if you are using CommonJS:
@@ -54,3 +54,267 @@ Or if you are using CommonJS:
const darcjs = require('darcjs');
```
+### Deploy your DARC
+
+To deploy DARC on an EVM-compatible blockchain, you need to use the `deployDARC(DARC_VERSION, signer)` function, in which `DARC_VERSION` is the version of DARC you want to deploy and signer is the signer of the transaction. If you are using the browser environment and want to get the signer from the **MetaMask** wallet, you can use the `getSigner()` function from `ethers.js`, for example:
+
+
+```ts
+import { deployDARC, ethers } from 'darcjs';
+
+// Get signer from MetaMask wallet
+const signer = (new ethers.providers.Web3Provider(window.ethereum)).getSigner();
+
+// deploy DARC
+const darc_contract_address = await darcjs.deployDARC(
+ DARC_VERSION.Latest, signer
+);
+```
+
+If you are using the node.js environment, you need to use `ethers.providers` to construct a provider, then use the `ethers.Wallet` class from `ethers.js` to create a signer with a private key, for example:
+
+```ts
+import { deployDARC, ethers } from 'darcjs';
+
+// Construct the provider via JsonRpcProvider on local devnet node
+const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545/');
+
+// Construct the signer via Wallet class and private key
+const signer = new ethers.Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', provider);
+
+// deploy DARC
+const darc_contract_address = await deployDARC(
+ DARC_VERSION.Latest, signer
+);
+
+// print the address of the deployed DARC
+console.log("The deployed DARC address: " + darc_contract_address);
+```
+
+### Access to a deployed DARC(read only)
+
+To access a deployed DARC on an EVM-compatible blockchain, you need to constrcut a `DARC` object via the `DARC` class, in which the constructor takes the address of the deployed DARC and the signer or provider as parameters.
+Also you need to specify the version of the DARC you want to access, and the provider for accessing the EVM-compatible blockchain.
+
+Since you do not need to write anyting to the blockchain or execute any DARC program, you can just use the `provider` to access the DARC, and it is not necessary to use the `signer` for the DARC constructor.
+
+For example:
+
+```ts
+import { DARC, ethers } from 'darcjs';
+
+// Construct a provider via JsonRpcProvider on local devnet node
+const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545/');
+
+// Get the deployed DARC address
+const darc_contract_address = '0x5FbDB2315678afecb367f032d93F642f64180aa3';
+
+// Construct a DARC object
+const myDARC_readOnly = new DARC({
+ address: darc_contract_address,
+ provider: provider,
+ version: DARC_VERSION.Latest,
+});
+
+// Read the member address list of the DARC
+const memberList = await myDARC_readOnly.getMemberList();
+
+// Read the member name via member address
+for (let i = 0; i < memberList.length; i++) {
+ const memberInfo = await myDARC_readOnly.getMemberInfo(memberList[i]);
+ console.log("The member name of " + memberList[i] + " is " + memberInfo.name);
+}
+```
+
+### Access to a deployed DARC(with signer)
+
+If you want to access a deployed DARC on an EVM-compatible blockchain, and run the program or withdraw some cash from the DARC, you need to use the `signer` to construct the `DARC` object via the `DARC` class, in which the constructor takes the address of the deployed DARC, the signer and the version of the DARC you want to access as parameters.
+
+Since the signer contains the private key and provider information, it is not necessary to use the `provider` for the DARC constructor.
+
+Here is an example of how to access a deployed DARC with a signer:
+
+```ts
+import { DARC, ethers } from 'darcjs';
+
+// Construct a provider via JsonRpcProvider on local devnet node
+const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545/');
+
+// Construct the signer via Wallet class and private key
+const signer = new ethers.Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', provider);
+
+
+// Get the deployed DARC address
+const darc_contract_address = '0x5FbDB2315678afecb367f032d93F642f64180aa3';
+
+// Construct a DARC object
+const myDARC = new DARC({
+ address: darc_contract_address,
+ wallet: signer, // pass the signer to the DARC constructor
+ version: DARC_VERSION.Latest,
+});
+
+```
+
+Then you can use the `darc` object to access the deployed DARC, not only read the data of the DARC, but also run the program on the DARC. For example:
+
+```ts
+import {transpileAndRun} from 'darcjs';
+// Write a code snippet of DARC program
+let byLawScript =
+`
+// define address 1 and 2 for minting tokens
+const addr1 = '0x0000';
+const addr2 = '0x0001';
+
+// mint tokens to address addr1 and addr2
+batch_mint_tokens(
+ [0,0,1,1],
+ [1000,1000,2000,2000],
+ [addr1, addr2, addr1, addr2]
+ );
+
+// enable plugins 3, 4 before sandbox checking operation
+// and disable plugins 5, 6 after sandbox checking operation
+batch_enable_plugins(
+ [3,4,5,6],
+ [true, true, false, false]
+);
+
+// finally, offer dividends to every token holder
+offer_dividends();
+`
+
+// Transpile and run the By-law Script program on the DARC deployed on the chain
+const result = await myDARC.transpileAndRun(
+ byLawScript,
+ signer,
+ dart_contract_address,
+ DARC_VERSION.Latest
+);
+```
+
+### Execute a By-law Script program on the DARC
+
+The `transpileAndRun` function is used to execute a By-law Script program on the DARC. It takes the By-law Script program, the signer, the address of the deployed DARC and the version of the DARC as parameters.
+
+Here is an example of how to execute a By-law Script program on the DARC:
+
+```ts
+import {transpileAndRun} from 'darcjs';
+
+// Write a code snippet of DARC program
+let byLawScript =
+`
+batch_transfer_tokens(
+ ["0x0123..."], // the addresses of the recipients
+ [0], // the token index
+ [100]); // the amounts
+`
+
+// Execute the By-law Script program on the DARC deployed on the chain
+const result = await transpileAndRun(
+ byLawScript,
+ signer,
+ dart_contract_address,
+ DARC_VERSION.Latest
+);
+```
+
+The `transpileAndRun` function contains two parts: the first part is to transpile the By-law Script program into the operation list, do parsing for the By-law Script and replace the operator `|`, `&` with condition node constructor `or()`, `and()` respectively, and the second part is to execute the operation list on the DARC, pushing each operation with opcode and parameters into a list, and send the big chunk of object body with all operations to the DARC entrance.
+
+### Execute an operation list via SDK
+
+Also you can execute an operation list on the DARC via the SDK, without the By-law Script syntax. The `executeOperationList` function is used to execute an operation list on the DARC. It takes the operation list, the signer, the address of the deployed DARC and the version of the DARC as parameters. You can just import all the operations and plugins you need from the `darcjs` library, and then use the `executeOperationList` function to execute the operation list on the DARC.
+
+Here is an example in TypeScript about how to execute an operation list via SDK:
+
+```ts
+import {
+ executeOperationList,
+ batch_transfer_tokens,
+ operator_address_equals,
+ batch_add_and_enable_plugins
+} from 'darcjs';
+
+
+const result = executeOperationList(
+ [
+ // first operation: batch transfer tokens
+ batch_transfer_tokens(
+ ["0x0123..."], // the addresses of the recipients
+ [0], // the token index
+ [100]), // the amounts
+
+ batch_add_and_enable_plugins(
+ [
+ {
+ returnType: EnumReturnType.YES_AND_SKIP_SANDBOX, // yes and skip sandbox
+ level: BigInt(103),
+ votingRuleIndex: BigInt(0),
+ notes: "allow operatorAddress == target1 | operatorAddress == target2",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:
+ or(
+ operator_address_equals(target1),
+ operator_address_equals(target2)
+ ).generateConditionNodeList()
+ }
+ ]
+ )
+ ],
+ signer,
+ dart_contract_address,
+ DARC_VERSION.Latest
+);
+
+```
+
+### Development Notes:
+
+To run the test for darcjs, you need to clone the darcjs repository from the GitHub, and then run the test with the following commands:
+
+```shell
+git clone https://github.com/Project-DARC/DARC.git
+```
+
+Then first install the dependencies for `darc-protocol` project
+
+```shell
+cd darc-protocol
+npm install
+```
+
+And start a local devnet node with the following command:
+
+```shell
+npx hardhat node
+```
+
+Then run the test for `darc-protocol` project
+
+```shell
+npx hardhat test
+```
+
+Then switch to the `darcjs` project and install the dependencies for `darcjs` project
+
+```shell
+cd ../darcjs
+pnpm install
+```
+
+And run the test for `darcjs` project
+
+```shell
+pnpm run test
+```
+
+Remember, you need to install `pnpm` before running the test for `darcjs` project, and you can install `pnpm` with the following command:
+
+```shell
+npm install -g pnpm
+```
+
+Also do not forget to initialize the `darc-protocol` project and start a local devnet node before running the test for `darcjs` project.
\ No newline at end of file
diff --git a/darc-docs/docs/darc.js/Run program on DARC.md b/darc-docs/docs/darc.js/Run program on DARC.md
deleted file mode 100644
index c0da4c33..00000000
--- a/darc-docs/docs/darc.js/Run program on DARC.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-sidebar_position: 4
----
-
-# Run program on DARC
\ No newline at end of file
diff --git a/darc-js/README.md b/darc-js/README.md
index 97eb8718..586ed529 100644
--- a/darc-js/README.md
+++ b/darc-js/README.md
@@ -47,7 +47,7 @@ const darc_contract_address = await darcjs.deployDARC(
DARC_VERSION.Test, signer
);
-// acceess the deployed DARC via the DARC contract address
+// access the deployed DARC via the DARC contract address
const myDeployedDARC = new darcjs.DARC({
address: darc_contract_address,
wallet: signer,
diff --git a/darc-js/dist/DARC/DARC.d.ts b/darc-js/dist/DARC/DARC.d.ts
deleted file mode 100644
index 5e75b307..00000000
--- a/darc-js/dist/DARC/DARC.d.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import { ethers } from 'ethers';
-import * as darcBinary from '../darcBinary/darcBinary';
-export type InitParam = {
- address: string;
- version: darcBinary.DARC_VERSION;
- wallet?: ethers.Wallet;
- provider?: ethers.providers.Provider;
-};
-export type TokenInfo = {
- votingWeight: BigInt;
- dividendWeight: BigInt;
- tokenInfo: string;
- totalSupply: BigInt;
-};
-export type MemberInfo = {
- bIsInitialized: boolean;
- bIsSuspened: boolean;
- name: string;
- role: bigint;
-};
-/**
- * The DARC class is used to interact with the DARC contract.
- */
-export declare class DARC {
- private darcContract;
- private darcAddress;
- private darcVersion;
- private wallet;
- private provider;
- /**
- * The constructor of the DARC class.
- * @param param: the init param including the address, version, wallet and/or provider.
- */
- constructor(param: InitParam);
- /**
- * Run the program on the DARC contract.
- * @param program: the program to be run.
- */
- entrance(program: any): Promise;
- /**
- * Below are all DARC's dashboard functions, read parameters from the DARC contract.
- */
- getTokenOwners(tokenClass: BigInt): Promise;
- getTokenInfo(tokenClass: BigInt): Promise;
- /**
- * Return the address of the DARC contract.
- * @returns the address of the DARC contract.
- */
- address(): string;
- /**
- * Return the number of token classes.
- * @returns the number of token classes.
- */
- getNumberOfTokenClasses(): Promise;
- /**
- * Return the balance of the owner for the token class.
- * @param tokenClass the index of the token class.
- * @param owner the address of the owner.
- * @returns the balance of the owner for the token class.
- */
- getTokenOwnerBalance(tokenClass: BigInt, owner: string): Promise;
- /**
- * Get the DARC plugins.
- * @returns the number of token classes.
- */
- getPluginInfo(): Promise;
- /**
- * Get the DARC member list.
- * @returns the DARC member list.
- */
- getMemberList(): Promise;
- getMemberInfo(memberAddress: string): Promise;
-}
-//# sourceMappingURL=DARC.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/DARC/DARC.d.ts.map b/darc-js/dist/DARC/DARC.d.ts.map
deleted file mode 100644
index 2bc22de1..00000000
--- a/darc-js/dist/DARC/DARC.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"DARC.d.ts","sourceRoot":"","sources":["../../src/DARC/DARC.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,0BAA0B,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;CACtC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;GAEG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAAwC;IAExD;;;OAGG;gBACS,KAAK,EAAE,SAAS;IAe5B;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAC,GAAG;IAY1B;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAe1D;;;OAGG;IACH,OAAO,IAAI,MAAM;IAIjB;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlD;;;;;OAKG;IACK,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9E;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAInC;;;MAGE;IACI,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIlC,aAAa,CAAC,aAAa,EAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAIxD"}
\ No newline at end of file
diff --git a/darc-js/dist/DARC/DARC.js b/darc-js/dist/DARC/DARC.js
deleted file mode 100644
index ae55b285..00000000
--- a/darc-js/dist/DARC/DARC.js
+++ /dev/null
@@ -1,126 +0,0 @@
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-import { ethers } from 'ethers';
-import * as darcBinary from '../darcBinary/darcBinary';
-/**
- * The DARC class is used to interact with the DARC contract.
- */
-export class DARC {
- /**
- * The constructor of the DARC class.
- * @param param: the init param including the address, version, wallet and/or provider.
- */
- constructor(param) {
- const { address, version, wallet, provider } = param;
- this.darcAddress = address;
- this.darcVersion = version;
- this.wallet = wallet;
- this.provider = provider;
- if (wallet !== undefined) {
- this.darcContract = new ethers.Contract(address, darcBinary.darcBinary(version).abi, wallet);
- }
- else if (provider !== undefined) {
- this.darcContract = new ethers.Contract(address, darcBinary.darcBinary(version).abi, provider);
- }
- else {
- throw new Error("Either wallet or provider should be provided.");
- }
- }
- /**
- * Run the program on the DARC contract.
- * @param program: the program to be run.
- */
- entrance(program) {
- return __awaiter(this, void 0, void 0, function* () {
- if (this.wallet === undefined) {
- throw new Error("Wallet is not provided for this DARC instance.");
- }
- try {
- yield this.darcContract.entrance(program);
- }
- catch (e) {
- console.log("Error when running the program: " + e);
- }
- });
- }
- /**
- * Below are all DARC's dashboard functions, read parameters from the DARC contract.
- */
- getTokenOwners(tokenClass) {
- return __awaiter(this, void 0, void 0, function* () {
- return yield this.darcContract.getTokenOwners(tokenClass);
- });
- }
- getTokenInfo(tokenClass) {
- return __awaiter(this, void 0, void 0, function* () {
- const result = yield this.darcContract.getTokenInfo(tokenClass);
- //console.log("result: " + JSON.stringify(result));
- const { 0: returnVotingWeight, 1: returnDividendWeight, 2: returnTokenInfo, 3: returnTotalSupply } = result;
- let returnStruct = {
- votingWeight: returnVotingWeight,
- dividendWeight: returnDividendWeight,
- tokenInfo: returnTokenInfo,
- totalSupply: returnTotalSupply,
- };
- return returnStruct;
- });
- }
- /**
- * Return the address of the DARC contract.
- * @returns the address of the DARC contract.
- */
- address() {
- return this.darcAddress;
- }
- /**
- * Return the number of token classes.
- * @returns the number of token classes.
- */
- getNumberOfTokenClasses() {
- return __awaiter(this, void 0, void 0, function* () {
- return yield this.darcContract.getNumberOfTokenClasses();
- });
- }
- /**
- * Return the balance of the owner for the token class.
- * @param tokenClass the index of the token class.
- * @param owner the address of the owner.
- * @returns the balance of the owner for the token class.
- */
- getTokenOwnerBalance(tokenClass, owner) {
- return __awaiter(this, void 0, void 0, function* () {
- return yield this.darcContract.getTokenOwnerBalance(tokenClass, owner);
- });
- }
- /**
- * Get the DARC plugins.
- * @returns the number of token classes.
- */
- getPluginInfo() {
- return __awaiter(this, void 0, void 0, function* () {
- return yield this.darcContract.getPluginInfo();
- });
- }
- /**
- * Get the DARC member list.
- * @returns the DARC member list.
- */
- getMemberList() {
- return __awaiter(this, void 0, void 0, function* () {
- return yield this.darcContract.getMemberList();
- });
- }
- getMemberInfo(memberAddress) {
- return __awaiter(this, void 0, void 0, function* () {
- return yield this.darcContract.getMemberInfo(memberAddress);
- });
- }
-}
-//# sourceMappingURL=DARC.js.map
\ No newline at end of file
diff --git a/darc-js/dist/DARC/DARC.js.map b/darc-js/dist/DARC/DARC.js.map
deleted file mode 100644
index 2c6f4489..00000000
--- a/darc-js/dist/DARC/DARC.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"DARC.js","sourceRoot":"","sources":["../../src/DARC/DARC.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,0BAA0B,CAAC;AAuBvD;;GAEG;AACH,MAAM,OAAO,IAAI;IAOf;;;OAGG;IACH,YAAY,KAAgB;QAC1B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;QACrD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;SAC9F;aAAM,IAAI,QAAQ,KAAK,SAAS,EAAE;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;SAChG;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;SAClE;IACH,CAAC;IAED;;;OAGG;IACG,QAAQ,CAAC,OAAW;;YACxB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;aACnE;YACD,IAAG;gBACD,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAC3C;YACD,OAAM,CAAC,EAAC;gBACN,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,CAAC,CAAC,CAAC;aACrD;QACH,CAAC;KAAA;IAED;;OAEG;IACG,cAAc,CAAC,UAAkB;;YACrC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC5D,CAAC;KAAA;IAEK,YAAY,CAAC,UAAkB;;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAChE,mDAAmD;YACnD,MAAM,EAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,iBAAiB,EAAC,GAAG,MAAM,CAAC;YAE1G,IAAI,YAAY,GAAc;gBAC5B,YAAY,EAAE,kBAAkB;gBAChC,cAAc,EAAE,oBAAoB;gBACpC,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,iBAAiB;aAC/B,CAAC;YAEF,OAAO,YAAY,CAAC;QACtB,CAAC;KAAA;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACG,uBAAuB;;YAC3B,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,CAAC;QAC3D,CAAC;KAAA;IAEH;;;;;OAKG;IACK,oBAAoB,CAAC,UAAkB,EAAE,KAAa;;YAC1D,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;KAAA;IAED;;;OAGG;IACG,aAAa;;YACjB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;QACjD,CAAC;KAAA;IAED;;;MAGE;IACI,aAAa;;YACjB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;QACjD,CAAC;KAAA;IAEK,aAAa,CAAC,aAAoB;;YACtC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAC9D,CAAC;KAAA;CAEF"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/SDK.d.ts b/darc-js/dist/SDK/SDK.d.ts
deleted file mode 100644
index 82f430ff..00000000
--- a/darc-js/dist/SDK/SDK.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-//# sourceMappingURL=SDK.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/SDK.d.ts.map b/darc-js/dist/SDK/SDK.d.ts.map
deleted file mode 100644
index 4e4b97a2..00000000
--- a/darc-js/dist/SDK/SDK.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"SDK.d.ts","sourceRoot":"","sources":["../../src/SDK/SDK.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/SDK.js b/darc-js/dist/SDK/SDK.js
deleted file mode 100644
index e2ba557f..00000000
--- a/darc-js/dist/SDK/SDK.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-//# sourceMappingURL=SDK.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/SDK.js.map b/darc-js/dist/SDK/SDK.js.map
deleted file mode 100644
index 873b4eae..00000000
--- a/darc-js/dist/SDK/SDK.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"SDK.js","sourceRoot":"","sources":["../../src/SDK/SDK.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/instructions.d.ts b/darc-js/dist/SDK/instructions.d.ts
deleted file mode 100644
index b2c03b40..00000000
--- a/darc-js/dist/SDK/instructions.d.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { TokenOperations } from "./struct/token-operation-map";
-import { Plugin } from "./struct/Plugin";
-export declare let operationList: never[];
-declare function withdraw_dividends(): void;
-declare function withdraw_money(amount: number): void;
-declare function withdraw_money_and_send_to_address(amount: number, targetAddress: string): void;
-declare function pay_money(amount: number): void;
-declare function enable_plugin_index(pluginIndex: number): void;
-declare function disable_plugin_index(pluginIndex: number): void;
-declare function add_plugin(currentRestrictionPlugin: Plugin): void;
-declare function add_and_enable_plugin(currentRestrictionPlugin: Plugin): void;
-declare function burn_tokens(tokenID: number, amount: number, targetAddress: string): void;
-declare function batch_transfer_tokens(tokenOperations: TokenOperations): void;
-declare function batch_mint_tokens(tokenOperations: TokenOperations): void;
-declare function batch_burn_tokens(tokenOperations: TokenOperations): void;
-declare function call_emergency(emergency_id: number): void;
-declare function set_parameter(parameter: string, value: string): void;
-declare function add_to_member_list(alias: string, role: string, address: string): void;
-declare function modify_member_list(alias: string, role: string, address: string): void;
-declare function suspend_member_list(address: string): void;
-declare function reactivate_member_list(address: string): void;
-export { withdraw_dividends, withdraw_money, withdraw_money_and_send_to_address, pay_money, enable_plugin_index, disable_plugin_index, add_plugin, add_and_enable_plugin, burn_tokens, batch_transfer_tokens, batch_mint_tokens, batch_burn_tokens, call_emergency, set_parameter, add_to_member_list, modify_member_list, suspend_member_list, reactivate_member_list };
-//# sourceMappingURL=instructions.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/instructions.d.ts.map b/darc-js/dist/SDK/instructions.d.ts.map
deleted file mode 100644
index f8d86e98..00000000
--- a/darc-js/dist/SDK/instructions.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/SDK/instructions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,eAAO,IAAI,aAAa,SAAK,CAAC;AAE9B,iBAAS,kBAAkB,SAE1B;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,QAErC;AAED,iBAAS,kCAAkC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAEhF;AAED,iBAAS,SAAS,CAAC,MAAM,EAAE,MAAM,QAEhC;AAED,iBAAS,mBAAmB,CAAC,WAAW,EAAE,MAAM,QAE/C;AAED,iBAAS,oBAAoB,CAAC,WAAW,EAAE,MAAM,QAEhD;AAED,iBAAS,UAAU,CAAC,wBAAwB,EAAE,MAAM,QAEnD;AAED,iBAAS,qBAAqB,CAAC,wBAAwB,EAAE,MAAM,QAE9D;AAED,iBAAS,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAE1E;AAED,iBAAS,qBAAqB,CAAC,eAAe,EAAE,eAAe,QAE9D;AAED,iBAAS,iBAAiB,CAAC,eAAe,EAAE,eAAe,QAE1D;AAED,iBAAS,iBAAiB,CAAC,eAAe,EAAE,eAAe,QAE1D;AAED,iBAAS,cAAc,CAAC,YAAY,EAAE,MAAM,QAE3C;AAED,iBAAS,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAEtD;AAED,iBAAS,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAEvE;AAED,iBAAS,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAEvE;AAED,iBAAS,mBAAmB,CAAC,OAAO,EAAE,MAAM,QAE3C;AAED,iBAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,QAE9C;AAED,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,kCAAkC,EAAE,SAAS,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,UAAU,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAC,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/instructions.js b/darc-js/dist/SDK/instructions.js
deleted file mode 100644
index 4a581ed9..00000000
--- a/darc-js/dist/SDK/instructions.js
+++ /dev/null
@@ -1,41 +0,0 @@
-// all the included instructions are here, mostly instructions for operations
-// todo: add backend support for current operations
-export let operationList = [];
-function withdraw_dividends() {
-}
-function withdraw_money(amount) {
-}
-function withdraw_money_and_send_to_address(amount, targetAddress) {
-}
-function pay_money(amount) {
-}
-function enable_plugin_index(pluginIndex) {
-}
-function disable_plugin_index(pluginIndex) {
-}
-function add_plugin(currentRestrictionPlugin) {
-}
-function add_and_enable_plugin(currentRestrictionPlugin) {
-}
-function burn_tokens(tokenID, amount, targetAddress) {
-}
-function batch_transfer_tokens(tokenOperations) {
-}
-function batch_mint_tokens(tokenOperations) {
-}
-function batch_burn_tokens(tokenOperations) {
-}
-function call_emergency(emergency_id) {
-}
-function set_parameter(parameter, value) {
-}
-function add_to_member_list(alias, role, address) {
-}
-function modify_member_list(alias, role, address) {
-}
-function suspend_member_list(address) {
-}
-function reactivate_member_list(address) {
-}
-export { withdraw_dividends, withdraw_money, withdraw_money_and_send_to_address, pay_money, enable_plugin_index, disable_plugin_index, add_plugin, add_and_enable_plugin, burn_tokens, batch_transfer_tokens, batch_mint_tokens, batch_burn_tokens, call_emergency, set_parameter, add_to_member_list, modify_member_list, suspend_member_list, reactivate_member_list };
-//# sourceMappingURL=instructions.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/instructions.js.map b/darc-js/dist/SDK/instructions.js.map
deleted file mode 100644
index 3a7e1689..00000000
--- a/darc-js/dist/SDK/instructions.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/SDK/instructions.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,mDAAmD;AAKnD,MAAM,CAAC,IAAI,aAAa,GAAG,EAAE,CAAC;AAE9B,SAAS,kBAAkB;AAE3B,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;AAEtC,CAAC;AAED,SAAS,kCAAkC,CAAC,MAAc,EAAE,aAAqB;AAEjF,CAAC;AAED,SAAS,SAAS,CAAC,MAAc;AAEjC,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB;AAEhD,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB;AAEjD,CAAC;AAED,SAAS,UAAU,CAAC,wBAAgC;AAEpD,CAAC;AAED,SAAS,qBAAqB,CAAC,wBAAgC;AAE/D,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,MAAc,EAAE,aAAqB;AAE3E,CAAC;AAED,SAAS,qBAAqB,CAAC,eAAgC;AAE/D,CAAC;AAED,SAAS,iBAAiB,CAAC,eAAgC;AAE3D,CAAC;AAED,SAAS,iBAAiB,CAAC,eAAgC;AAE3D,CAAC;AAED,SAAS,cAAc,CAAC,YAAoB;AAE5C,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB,EAAE,KAAa;AAEvD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,IAAY,EAAE,OAAe;AAExE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,IAAY,EAAE,OAAe;AAExE,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;AAE5C,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe;AAE/C,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,kCAAkC,EAAE,SAAS,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,UAAU,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAC,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/plugin/ConditionNode.d.ts b/darc-js/dist/SDK/plugin/ConditionNode.d.ts
deleted file mode 100644
index 280b3a11..00000000
--- a/darc-js/dist/SDK/plugin/ConditionNode.d.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { Expression } from "./Expression";
-declare enum ConditionNodeType {
- ExpressionNode = 0,
- LogicalOperatorNode = 1,
- BooleanValueNode = 2
-}
-declare enum LogicalOperatorType {
- AND = 0,
- OR = 1,
- NOT = 2
-}
-declare class ConditionNode {
- type: ConditionNodeType;
- expression: Expression | null;
- logicalOperator: LogicalOperatorType | null;
- expressionParameters: (number | string | bigint)[] | null;
- booleanValue: boolean | null;
- childList: ConditionNode[];
- constructor(type: ConditionNodeType, expression: Expression | null, logicalOperator: LogicalOperatorType | null, expressionParameters: (number | string | bigint)[] | null, booleanValue?: boolean | null);
- serializeToString(): string;
- isValidLogicalOperatorNode(): void;
- isValidExpressionNode(): void;
- isValidBooleanValueNode(): void;
-}
-export { ConditionNode, Expression, ConditionNodeType, LogicalOperatorType };
-//# sourceMappingURL=ConditionNode.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/plugin/ConditionNode.d.ts.map b/darc-js/dist/SDK/plugin/ConditionNode.d.ts.map
deleted file mode 100644
index a6d1c315..00000000
--- a/darc-js/dist/SDK/plugin/ConditionNode.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"ConditionNode.d.ts","sourceRoot":"","sources":["../../../src/SDK/plugin/ConditionNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,aAAK,iBAAiB;IAAG,cAAc,IAAA;IAAE,mBAAmB,IAAA;IAAE,gBAAgB,IAAA;CAAC;AAC/E,aAAK,mBAAmB;IAAE,GAAG,IAAA;IAAE,EAAE,IAAA;IAAE,GAAG,IAAA;CAAC;AAEvC,cAAM,aAAa;IACf,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5C,oBAAoB,EAAE,CAAC,MAAM,GAAC,MAAM,GAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IACtD,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,aAAa,EAAE,CAAM;gBACpB,IAAI,EAAE,iBAAiB,EAC/B,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,eAAe,EAAE,mBAAmB,GAAG,IAAI,EAC3C,oBAAoB,EAAG,CAAC,MAAM,GAAC,MAAM,GAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EACtD,YAAY,GAAE,OAAO,GAAG,IAAW;IAavC,iBAAiB,IAAI,MAAM;IAsL3B,0BAA0B;IA0B1B,qBAAqB;IAiBrB,uBAAuB;CA6B1B;AAGD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/plugin/ConditionNode.js b/darc-js/dist/SDK/plugin/ConditionNode.js
deleted file mode 100644
index c700a0e4..00000000
--- a/darc-js/dist/SDK/plugin/ConditionNode.js
+++ /dev/null
@@ -1,258 +0,0 @@
-// The basic abstact syntax tree node of the expression tree
-// representing the condition of a restriction plugin condition
-import { Expression } from "./Expression";
-var ConditionNodeType;
-(function (ConditionNodeType) {
- ConditionNodeType[ConditionNodeType["ExpressionNode"] = 0] = "ExpressionNode";
- ConditionNodeType[ConditionNodeType["LogicalOperatorNode"] = 1] = "LogicalOperatorNode";
- ConditionNodeType[ConditionNodeType["BooleanValueNode"] = 2] = "BooleanValueNode";
-})(ConditionNodeType || (ConditionNodeType = {}));
-var LogicalOperatorType;
-(function (LogicalOperatorType) {
- LogicalOperatorType[LogicalOperatorType["AND"] = 0] = "AND";
- LogicalOperatorType[LogicalOperatorType["OR"] = 1] = "OR";
- LogicalOperatorType[LogicalOperatorType["NOT"] = 2] = "NOT";
-})(LogicalOperatorType || (LogicalOperatorType = {}));
-class ConditionNode {
- constructor(type, expression, logicalOperator, expressionParameters, booleanValue = null) {
- this.childList = [];
- this.type = type;
- this.expression = expression;
- this.logicalOperator = logicalOperator;
- this.expressionParameters = expressionParameters;
- this.childList = [];
- this.booleanValue = booleanValue;
- // validate the node
- this.isValidLogicalOperatorNode();
- this.isValidExpressionNode();
- }
- serializeToString() {
- const childListString = this.childList.length == 0 ? this.childList.map((child) => child.serializeToString()).join(" ") : null;
- let returnString = "";
- if (this.type === ConditionNodeType.ExpressionNode) {
- returnString += `Expression: ${this.expression}(${this.expressionParameters})`;
- }
- else if (this.type === ConditionNodeType.LogicalOperatorNode) {
- returnString += `LogicalOperator: ${this.logicalOperator}`;
- }
- else if (this.type === ConditionNodeType.BooleanValueNode) {
- returnString += `BooleanValue: ${this.booleanValue}`;
- }
- if (childListString) {
- returnString += ` Child List: ${childListString}`;
- }
- return returnString;
- }
- // operator overloading for '&' operator
- [Symbol.for('&')](rightOperand) {
- // if the current node is an expression node
- if (this.type === ConditionNodeType.ExpressionNode) {
- // if the right operand is an expression node, create a new logical operator node of type OR
- if (rightOperand.type == ConditionNodeType.BooleanValueNode || rightOperand.type == ConditionNodeType.ExpressionNode) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- // if the right operand is a logical operator node, add the current node as the left child of the right operand
- else if (rightOperand.type == ConditionNodeType.LogicalOperatorNode) {
- // if the right operand is an AND operator, add the current node as the child to the child list of the right operand
- if (rightOperand.logicalOperator == LogicalOperatorType.AND) {
- rightOperand.childList.push(this);
- return rightOperand;
- }
- else if (rightOperand.logicalOperator == LogicalOperatorType.OR) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- else if (rightOperand.logicalOperator == LogicalOperatorType.NOT) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- // else throw an exception
- else {
- throw new Error("Invalid logical operator type");
- }
- }
- }
- // if the current node is a logical operator node
- else if (this.type === ConditionNodeType.LogicalOperatorNode) {
- // if the right operand is an expression node, add the right operand as the right child of the current node
- if (this.logicalOperator === LogicalOperatorType.AND) {
- this.childList.push(rightOperand);
- return this;
- }
- // if the right operand is a logical operator node, add the right operand as the right child of the current node
- else if (this.logicalOperator === LogicalOperatorType.OR) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- else if (this.logicalOperator === LogicalOperatorType.NOT) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- }
- else if (this.type === ConditionNodeType.BooleanValueNode) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- throw new Error("Invalid condition node type");
- }
- // operator overloading for '|' operator
- [Symbol.for('|')](rightOperand) {
- // if the current node is an expression node
- if (this.type === ConditionNodeType.ExpressionNode) {
- // if the right operand is an expression node, create a new logical operator node of type OR
- if (rightOperand.type == ConditionNodeType.BooleanValueNode || rightOperand.type == ConditionNodeType.ExpressionNode) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- // if the right operand is a logical operator node, add the current node as the left child of the right operand
- else if (rightOperand.type == ConditionNodeType.LogicalOperatorNode) {
- // if the right operand is an AND operator, add the current node as the child to the child list of the right operand
- if (rightOperand.logicalOperator == LogicalOperatorType.OR) {
- rightOperand.childList.push(this);
- return rightOperand;
- }
- else if (rightOperand.logicalOperator == LogicalOperatorType.AND) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- else if (rightOperand.logicalOperator == LogicalOperatorType.NOT) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- // else throw an exception
- else {
- throw new Error("Invalid logical operator type");
- }
- }
- }
- // if the current node is a logical operator node
- else if (this.type === ConditionNodeType.LogicalOperatorNode) {
- // if the right operand is an expression node, add the right operand as the right child of the current node
- if (this.logicalOperator === LogicalOperatorType.OR) {
- this.childList.push(rightOperand);
- return this;
- }
- // if the right operand is a logical operator node, add the right operand as the right child of the current node
- else if (this.logicalOperator === LogicalOperatorType.AND) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- else if (this.logicalOperator === LogicalOperatorType.NOT) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- }
- else if (this.type === ConditionNodeType.BooleanValueNode) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- throw new Error("Invalid condition node type");
- }
- // if an operator "!" is used, the expression will return a
- // logical operator node with current node as left child, and
- // a null object as right child, and the operator type is "!"
- [Symbol.for('!')]() {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.NOT, null);
- logicalOperatorNode.childList.push(this);
- return logicalOperatorNode;
- }
- // check if the current node is a valid logical operator node,
- // and throw an exception if it is not
- isValidLogicalOperatorNode() {
- if (this.type === ConditionNodeType.LogicalOperatorNode) {
- // check if the logical operator type is null
- if (this.logicalOperator === null) {
- throw new Error("The logical operator type of the current node is null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- // if operator is AND, OR, make sure that child list has at least 2 elements
- if (this.logicalOperator === LogicalOperatorType.AND || this.logicalOperator === LogicalOperatorType.OR) {
- if (this.childList.length < 2) {
- throw new Error("The list of all child nodes has less than 2 elements, which is illegal.\n\
- Current node:\n " + JSON.stringify(this));
- }
- }
- // if operator is NOT, make sure that the child list has only 1 element
- if (this.logicalOperator === LogicalOperatorType.NOT) {
- if (this.childList.length !== 1) {
- throw new Error("Invalid length of child node for NOT operator.\n\
- Current node:\n " + JSON.stringify(this));
- }
- }
- }
- }
- // check if the current node is a valid expression node,
- // and throw an exception if it is not
- isValidExpressionNode() {
- if (this.type === ConditionNodeType.ExpressionNode) {
- // check if the expression type is null
- if (this.expression === null) {
- throw new Error("The expression type of the current expression node is null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- // make sure that the child list is empty
- if (this.childList.length !== 0) {
- throw new Error("Illegal element in child node list of an expression node.\n\
- Current node:\n " + JSON.stringify(this));
- }
- }
- }
- // check if the current node is a valid boolean value node,
- // and throw an exception if it is not
- isValidBooleanValueNode() {
- if (this.type === ConditionNodeType.BooleanValueNode) {
- // check if the boolean value is null
- if (this.booleanValue === null) {
- throw new Error("The boolean value of the current boolean value node is null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- // make sure that the left and right child are null
- if (this.childList.length !== 0) {
- throw new Error("The child list node of current node is not empty for a boolean value node.\n\
- Current node:\n " + JSON.stringify(this));
- }
- // make sure that the expression type is null
- if (this.expression !== null) {
- throw new Error("The expression type of the current boolean value node is not null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- // make sure that the logical operator type is null
- if (this.logicalOperator !== null) {
- throw new Error("The logical operator type of the current boolean value node is not null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- // make sure that the expression parameters is null
- if (this.expressionParameters !== null) {
- throw new Error("The expression parameters of the current boolean value node is not null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- }
- }
-}
-export { ConditionNode, Expression, ConditionNodeType, LogicalOperatorType };
-//# sourceMappingURL=ConditionNode.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/plugin/ConditionNode.js.map b/darc-js/dist/SDK/plugin/ConditionNode.js.map
deleted file mode 100644
index 982a3b51..00000000
--- a/darc-js/dist/SDK/plugin/ConditionNode.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"ConditionNode.js","sourceRoot":"","sources":["../../../src/SDK/plugin/ConditionNode.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,+DAA+D;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,IAAK,iBAA0E;AAA/E,WAAK,iBAAiB;IAAG,6EAAc,CAAA;IAAE,uFAAmB,CAAA;IAAE,iFAAgB,CAAA;AAAA,CAAC,EAA1E,iBAAiB,KAAjB,iBAAiB,QAAyD;AAC/E,IAAK,mBAAkC;AAAvC,WAAK,mBAAmB;IAAE,2DAAG,CAAA;IAAE,yDAAE,CAAA;IAAE,2DAAG,CAAA;AAAA,CAAC,EAAlC,mBAAmB,KAAnB,mBAAmB,QAAe;AAEvC,MAAM,aAAa;IAOf,YAAY,IAAuB,EAC/B,UAA6B,EAC7B,eAA2C,EAC3C,oBAAsD,EACtD,eAA+B,IAAI;QALvC,cAAS,GAAoB,EAAE,CAAC;QAM5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,oBAAoB;QACpB,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAED,iBAAiB;QACb,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/H,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,cAAc,EAAE;YAChD,YAAY,IAAG,eAAe,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC;SACjF;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,mBAAmB,EAAE;YAC1D,YAAY,IAAG,oBAAoB,IAAI,CAAC,eAAe,EAAE,CAAC;SAC7D;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,gBAAgB,EAAE;YACvD,YAAY,IAAG,iBAAiB,IAAI,CAAC,YAAY,EAAE,CAAC;SACvD;QACD,IAAI,eAAe,EAAE;YACjB,YAAY,IAAG,gBAAgB,eAAe,EAAE,CAAC;SACpD;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,wCAAwC;IACxC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,YAA2B;QAE1C,4CAA4C;QAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,cAAc,EAAE;YAEhD,4FAA4F;YAC5F,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,gBAAgB,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,cAAc,EAAC;gBACjH,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;YAED,+GAA+G;iBAC1G,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,mBAAmB,EAAE;gBAEjE,oHAAoH;gBACpH,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,GAAG,EAAE;oBACzD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClC,OAAO,YAAY,CAAC;iBACvB;qBAEI,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,EAAE,EAAE;oBAC7D,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,OAAO,mBAAmB,CAAC;iBAC9B;qBAEI,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,GAAG,EAAE;oBAC9D,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,OAAO,mBAAmB,CAAC;iBAC9B;gBAED,0BAA0B;qBACrB;oBACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;iBACpD;aACJ;SACJ;QAED,iDAAiD;aAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,mBAAmB,EAAE;YAE1D,2GAA2G;YAC3G,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAClC,OAAO,IAAI,CAAC;aACf;YAED,gHAAgH;iBAC3G,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,EAAE,EAAE;gBACtD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;iBACI,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBACvD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;SACJ;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,gBAAgB,EAAE;YACvD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjD,OAAO,mBAAmB,CAAC;SAC9B;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAEnD,CAAC;IAED,wCAAwC;IACxC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,YAA2B;QAE1C,4CAA4C;QAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,cAAc,EAAE;YAEhD,4FAA4F;YAC5F,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,gBAAgB,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,cAAc,EAAC;gBACjH,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;YAED,+GAA+G;iBAC1G,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,mBAAmB,EAAE;gBAEjE,oHAAoH;gBACpH,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,EAAE,EAAE;oBACxD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClC,OAAO,YAAY,CAAC;iBACvB;qBAEI,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,GAAG,EAAE;oBAC9D,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,OAAO,mBAAmB,CAAC;iBAC9B;qBAEI,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,GAAG,EAAE;oBAC9D,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,OAAO,mBAAmB,CAAC;iBAC9B;gBAED,0BAA0B;qBACrB;oBACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;iBACpD;aACJ;SACJ;QAED,iDAAiD;aAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,mBAAmB,EAAE;YAE1D,2GAA2G;YAC3G,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,EAAE,EAAE;gBACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAClC,OAAO,IAAI,CAAC;aACf;YAED,gHAAgH;iBAC3G,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBACvD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;iBACI,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBACvD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;SACJ;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,gBAAgB,EAAE;YACvD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjD,OAAO,mBAAmB,CAAC;SAC9B;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAED,2DAA2D;IAC3D,6DAA6D;IAC7D,6DAA6D;IAC7D,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,8DAA8D;IAC9D,sCAAsC;IACtC,0BAA0B;QACtB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,mBAAmB,EAAC;YACpD,6CAA6C;YAC7C,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,4EAA4E;YAC5E,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,EAAE,EAAC;gBACpG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC;qCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC7C;aACJ;YACD,uEAAuE;YACvE,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,EAAC;gBACjD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAC;oBAC5B,MAAM,IAAI,KAAK,CAAC;qCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC7C;aACJ;SACJ;IACL,CAAC;IAED,wDAAwD;IACxD,sCAAsC;IACtC,qBAAqB;QACjB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,cAAc,EAAC;YAC/C,uCAAuC;YACvC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAC;gBACzB,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,yCAAyC;YACzC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;SACJ;IACL,CAAC;IAED,2DAA2D;IAC3D,sCAAsC;IACtC,uBAAuB;QACnB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,gBAAgB,EAAC;YACjD,qCAAqC;YACrC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,mDAAmD;YACnD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,6CAA6C;YAC7C,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAC;gBACzB,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,mDAAmD;YACnD,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,mDAAmD;YACnD,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAC;gBACnC,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;SACJ;IACL,CAAC;CACJ;AAGD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/plugin/Expression.d.ts b/darc-js/dist/SDK/plugin/Expression.d.ts
deleted file mode 100644
index 1fb38c6d..00000000
--- a/darc-js/dist/SDK/plugin/Expression.d.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export declare enum Expression {
- Operator_Address_Equals = 1,
- Operator_Alias_Equals = 2,
- Operator_Role_Equals = 3,
- Operator_Address_Not_Equals = 4,
- Operator_Alias_Not_Equals = 5,
- Operator_Role_Not_Equals = 6,
- Operator_Address_In_List = 7,
- Operator_Alias_In_List = 8,
- Operator_Role_In_List = 9,
- Operator_Address_Not_In_List = 10,
- Operator_Alias_Not_In_List = 11,
- Operator_Role_Not_In_List = 12,
- Operation_Equals = 1000,
- Operation_Not_Equals = 1001
-}
-//# sourceMappingURL=Expression.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/plugin/Expression.d.ts.map b/darc-js/dist/SDK/plugin/Expression.d.ts.map
deleted file mode 100644
index 8007b566..00000000
--- a/darc-js/dist/SDK/plugin/Expression.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"Expression.d.ts","sourceRoot":"","sources":["../../../src/SDK/plugin/Expression.ts"],"names":[],"mappings":"AAEA,oBAAY,UAAU;IAEpB,uBAAuB,IAAI;IAC3B,qBAAqB,IAAI;IACzB,oBAAoB,IAAI;IACxB,2BAA2B,IAAI;IAC/B,yBAAyB,IAAI;IAC7B,wBAAwB,IAAI;IAC5B,wBAAwB,IAAI;IAC5B,sBAAsB,IAAI;IAC1B,qBAAqB,IAAI;IACzB,4BAA4B,KAAK;IACjC,0BAA0B,KAAK;IAC/B,yBAAyB,KAAK;IAG9B,gBAAgB,OAAO;IACvB,oBAAoB,OAAO;CAI5B"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/plugin/Expression.js b/darc-js/dist/SDK/plugin/Expression.js
deleted file mode 100644
index 3d3de73b..00000000
--- a/darc-js/dist/SDK/plugin/Expression.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// All the expressions that can be used in the by-law script
-export var Expression;
-(function (Expression) {
- // operator identifiers
- Expression[Expression["Operator_Address_Equals"] = 1] = "Operator_Address_Equals";
- Expression[Expression["Operator_Alias_Equals"] = 2] = "Operator_Alias_Equals";
- Expression[Expression["Operator_Role_Equals"] = 3] = "Operator_Role_Equals";
- Expression[Expression["Operator_Address_Not_Equals"] = 4] = "Operator_Address_Not_Equals";
- Expression[Expression["Operator_Alias_Not_Equals"] = 5] = "Operator_Alias_Not_Equals";
- Expression[Expression["Operator_Role_Not_Equals"] = 6] = "Operator_Role_Not_Equals";
- Expression[Expression["Operator_Address_In_List"] = 7] = "Operator_Address_In_List";
- Expression[Expression["Operator_Alias_In_List"] = 8] = "Operator_Alias_In_List";
- Expression[Expression["Operator_Role_In_List"] = 9] = "Operator_Role_In_List";
- Expression[Expression["Operator_Address_Not_In_List"] = 10] = "Operator_Address_Not_In_List";
- Expression[Expression["Operator_Alias_Not_In_List"] = 11] = "Operator_Alias_Not_In_List";
- Expression[Expression["Operator_Role_Not_In_List"] = 12] = "Operator_Role_Not_In_List";
- // operations
- Expression[Expression["Operation_Equals"] = 1000] = "Operation_Equals";
- Expression[Expression["Operation_Not_Equals"] = 1001] = "Operation_Not_Equals";
- // todo: add more operations
-})(Expression || (Expression = {}));
-//# sourceMappingURL=Expression.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/plugin/Expression.js.map b/darc-js/dist/SDK/plugin/Expression.js.map
deleted file mode 100644
index 264faf45..00000000
--- a/darc-js/dist/SDK/plugin/Expression.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"Expression.js","sourceRoot":"","sources":["../../../src/SDK/plugin/Expression.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,MAAM,CAAN,IAAY,UAqBX;AArBD,WAAY,UAAU;IACpB,uBAAuB;IACvB,iFAA2B,CAAA;IAC3B,6EAAyB,CAAA;IACzB,2EAAwB,CAAA;IACxB,yFAA+B,CAAA;IAC/B,qFAA6B,CAAA;IAC7B,mFAA4B,CAAA;IAC5B,mFAA4B,CAAA;IAC5B,+EAA0B,CAAA;IAC1B,6EAAyB,CAAA;IACzB,4FAAiC,CAAA;IACjC,wFAA+B,CAAA;IAC/B,sFAA8B,CAAA;IAE9B,aAAa;IACb,sEAAuB,CAAA;IACvB,8EAA2B,CAAA;IAE3B,4BAA4B;AAE9B,CAAC,EArBW,UAAU,KAAV,UAAU,QAqBrB"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/runtime.d.ts b/darc-js/dist/SDK/runtime.d.ts
deleted file mode 100644
index d0559397..00000000
--- a/darc-js/dist/SDK/runtime.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { ethers } from 'ethers';
-export declare function run(code: string, wallet: ethers.Wallet, provider: ethers.providers.Provider, address: string): void;
-//# sourceMappingURL=runtime.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/runtime.d.ts.map b/darc-js/dist/SDK/runtime.d.ts.map
deleted file mode 100644
index 25e5d0c3..00000000
--- a/darc-js/dist/SDK/runtime.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/SDK/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAE1C,wBAAgB,GAAG,CAAC,IAAI,EAAC,MAAM,EAAE,MAAM,EAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAC,MAAM,QAaxG"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/runtime.js b/darc-js/dist/SDK/runtime.js
deleted file mode 100644
index e242d7d6..00000000
--- a/darc-js/dist/SDK/runtime.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import * as instructions from "./includes";
-import { ethers } from 'ethers';
-export function run(code, wallet, provider, address) {
- let include = '';
- for (const key in instructions) {
- include += `let ${key} = instructions.${key};\n`;
- }
- const fn = new Function('instructions', 'ethers', 'wallet', 'provider', 'address', include + code + '\n return operationList;');
- const results = fn(instructions, ethers, wallet, provider, address);
- const resultList = [...results];
-}
-//# sourceMappingURL=runtime.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/runtime.js.map b/darc-js/dist/SDK/runtime.js.map
deleted file mode 100644
index ced2595c..00000000
--- a/darc-js/dist/SDK/runtime.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/SDK/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAC;AAE1C,MAAM,UAAU,GAAG,CAAC,IAAW,EAAE,MAAoB,EAAE,QAAkC,EAAE,OAAc;IACvG,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;QAC9B,OAAO,IAAI,OAAO,GAAG,mBAAmB,GAAG,KAAK,CAAC;KAClD;IAED,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,0BAA0B,CAAC,CAAC;IAEhI,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEpE,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;AAGlC,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/Plugin.d.ts b/darc-js/dist/SDK/struct/Plugin.d.ts
deleted file mode 100644
index ef867247..00000000
--- a/darc-js/dist/SDK/struct/Plugin.d.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { ConditionNode } from "../plugins/ConditionNode";
-import { VotingParameters } from "./voting-param";
-declare class Plugin {
- note: string;
- conditionExpressionTreeRootNode: ConditionNode;
- restrictionPluginReturnType: RestrictionPluginReturnType;
- votingParameters: VotingParameters | null;
- restrictionPluginType: RestrictionPluginType;
- constructor(note: string, conditionExpressionTreeRootNode: ConditionNode, restrictionPluginReturnType: RestrictionPluginReturnType, votingParameters: VotingParameters | null, restrictionPluginType: RestrictionPluginType);
-}
-declare enum RestrictionPluginReturnType {
- NO = 0,
- ABSOLUTELY_YES = 1,
- VOTING_NEEDED = 2
-}
-declare enum RestrictionPluginType {
- BEFORE_OPERATION = 0,
- AFTER_OPERATION = 1
-}
-export { Plugin, RestrictionPluginReturnType, RestrictionPluginType };
-//# sourceMappingURL=Plugin.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/Plugin.d.ts.map b/darc-js/dist/SDK/struct/Plugin.d.ts.map
deleted file mode 100644
index ab1361cf..00000000
--- a/darc-js/dist/SDK/struct/Plugin.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../../src/SDK/struct/Plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,cAAM,MAAM;IACV,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B,EAAE,aAAa,CAAC;IAC/C,2BAA2B,EAAE,2BAA2B,CAAC;IACzD,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,qBAAqB,EAAE,qBAAqB,CAAC;gBACjC,IAAI,EAAE,MAAM,EAAE,+BAA+B,EAAE,aAAa,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,EAAE,qBAAqB,EAAE,qBAAqB;CAO5N;AAED,aAAK,2BAA2B;IAC9B,EAAE,IAAA;IACF,cAAc,IAAA;IACd,aAAa,IAAA;CACd;AAED,aAAK,qBAAqB;IACxB,gBAAgB,IAAA;IAChB,eAAe,IAAA;CAChB;AAED,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/Plugin.js b/darc-js/dist/SDK/struct/Plugin.js
deleted file mode 100644
index f591a3b3..00000000
--- a/darc-js/dist/SDK/struct/Plugin.js
+++ /dev/null
@@ -1,22 +0,0 @@
-class Plugin {
- constructor(note, conditionExpressionTreeRootNode, restrictionPluginReturnType, votingParameters, restrictionPluginType) {
- this.note = note;
- this.conditionExpressionTreeRootNode = conditionExpressionTreeRootNode;
- this.restrictionPluginReturnType = restrictionPluginReturnType;
- this.votingParameters = votingParameters;
- this.restrictionPluginType = restrictionPluginType;
- }
-}
-var RestrictionPluginReturnType;
-(function (RestrictionPluginReturnType) {
- RestrictionPluginReturnType[RestrictionPluginReturnType["NO"] = 0] = "NO";
- RestrictionPluginReturnType[RestrictionPluginReturnType["ABSOLUTELY_YES"] = 1] = "ABSOLUTELY_YES";
- RestrictionPluginReturnType[RestrictionPluginReturnType["VOTING_NEEDED"] = 2] = "VOTING_NEEDED";
-})(RestrictionPluginReturnType || (RestrictionPluginReturnType = {}));
-var RestrictionPluginType;
-(function (RestrictionPluginType) {
- RestrictionPluginType[RestrictionPluginType["BEFORE_OPERATION"] = 0] = "BEFORE_OPERATION";
- RestrictionPluginType[RestrictionPluginType["AFTER_OPERATION"] = 1] = "AFTER_OPERATION";
-})(RestrictionPluginType || (RestrictionPluginType = {}));
-export { Plugin, RestrictionPluginReturnType, RestrictionPluginType };
-//# sourceMappingURL=Plugin.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/Plugin.js.map b/darc-js/dist/SDK/struct/Plugin.js.map
deleted file mode 100644
index 0504d489..00000000
--- a/darc-js/dist/SDK/struct/Plugin.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"Plugin.js","sourceRoot":"","sources":["../../../src/SDK/struct/Plugin.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM;IAMV,YAAY,IAAY,EAAE,+BAA8C,EAAE,2BAAwD,EAAE,gBAAyC,EAAE,qBAA4C;QACzN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,+BAA+B,GAAG,+BAA+B,CAAC;QACvE,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QAC/D,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACrD,CAAC;CACF;AAED,IAAK,2BAIJ;AAJD,WAAK,2BAA2B;IAC9B,yEAAE,CAAA;IACF,iGAAc,CAAA;IACd,+FAAa,CAAA;AACf,CAAC,EAJI,2BAA2B,KAA3B,2BAA2B,QAI/B;AAED,IAAK,qBAGJ;AAHD,WAAK,qBAAqB;IACxB,yFAAgB,CAAA;IAChB,uFAAe,CAAA;AACjB,CAAC,EAHI,qBAAqB,KAArB,qBAAqB,QAGzB;AAED,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/Program.d.ts b/darc-js/dist/SDK/struct/Program.d.ts
deleted file mode 100644
index ca4092be..00000000
--- a/darc-js/dist/SDK/struct/Program.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-//# sourceMappingURL=Program.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/Program.d.ts.map b/darc-js/dist/SDK/struct/Program.d.ts.map
deleted file mode 100644
index d95e3e23..00000000
--- a/darc-js/dist/SDK/struct/Program.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"Program.d.ts","sourceRoot":"","sources":["../../../src/SDK/struct/Program.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/Program.js b/darc-js/dist/SDK/struct/Program.js
deleted file mode 100644
index 507e65b1..00000000
--- a/darc-js/dist/SDK/struct/Program.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";
-//# sourceMappingURL=Program.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/Program.js.map b/darc-js/dist/SDK/struct/Program.js.map
deleted file mode 100644
index adaeee98..00000000
--- a/darc-js/dist/SDK/struct/Program.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"Program.js","sourceRoot":"","sources":["../../../src/SDK/struct/Program.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/basicTypes.d.ts b/darc-js/dist/SDK/struct/basicTypes.d.ts
deleted file mode 100644
index 568bff6b..00000000
--- a/darc-js/dist/SDK/struct/basicTypes.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-type ADDRESS = string;
-type UINT256 = bigint;
-type ADDRESS_2D_ARRAY = string[][];
-type UINT256_2D_ARRAY = bigint[][];
-export { ADDRESS, UINT256, ADDRESS_2D_ARRAY, UINT256_2D_ARRAY };
-//# sourceMappingURL=basicTypes.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/basicTypes.d.ts.map b/darc-js/dist/SDK/struct/basicTypes.d.ts.map
deleted file mode 100644
index 4e772ba2..00000000
--- a/darc-js/dist/SDK/struct/basicTypes.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"basicTypes.d.ts","sourceRoot":"","sources":["../../../src/SDK/struct/basicTypes.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG,MAAM,CAAC;AACtB,KAAK,OAAO,GAAG,MAAM,CAAC;AACtB,KAAK,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAAC;AACnC,KAAK,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAC,CAAA"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/basicTypes.js b/darc-js/dist/SDK/struct/basicTypes.js
deleted file mode 100644
index f1c8683c..00000000
--- a/darc-js/dist/SDK/struct/basicTypes.js
+++ /dev/null
@@ -1,2 +0,0 @@
-export {};
-//# sourceMappingURL=basicTypes.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/basicTypes.js.map b/darc-js/dist/SDK/struct/basicTypes.js.map
deleted file mode 100644
index 2f64d467..00000000
--- a/darc-js/dist/SDK/struct/basicTypes.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"basicTypes.js","sourceRoot":"","sources":["../../../src/SDK/struct/basicTypes.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/token-operation-map.d.ts b/darc-js/dist/SDK/struct/token-operation-map.d.ts
deleted file mode 100644
index 8273bd77..00000000
--- a/darc-js/dist/SDK/struct/token-operation-map.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export declare class TokenOperations {
- arrayTokenOperations: Array<[number, string, number]>;
- constructor();
- add_token_ownership_tuple(tokenID: number, ownerAddress: string, amount: number): void;
-}
-//# sourceMappingURL=token-operation-map.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/token-operation-map.d.ts.map b/darc-js/dist/SDK/struct/token-operation-map.d.ts.map
deleted file mode 100644
index c2093179..00000000
--- a/darc-js/dist/SDK/struct/token-operation-map.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"token-operation-map.d.ts","sourceRoot":"","sources":["../../../src/SDK/struct/token-operation-map.ts"],"names":[],"mappings":"AAEA,qBAAa,eAAe;IAEnB,oBAAoB,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;;IAItD,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAGvF"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/token-operation-map.js b/darc-js/dist/SDK/struct/token-operation-map.js
deleted file mode 100644
index e85b525a..00000000
--- a/darc-js/dist/SDK/struct/token-operation-map.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// TokenOwnershipMap is a map of tokenID to owner address and amount
-export class TokenOperations {
- constructor() {
- this.arrayTokenOperations = new Array();
- }
- add_token_ownership_tuple(tokenID, ownerAddress, amount) {
- this.arrayTokenOperations.push([tokenID, ownerAddress, amount]);
- }
-}
-//# sourceMappingURL=token-operation-map.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/token-operation-map.js.map b/darc-js/dist/SDK/struct/token-operation-map.js.map
deleted file mode 100644
index 929bf05c..00000000
--- a/darc-js/dist/SDK/struct/token-operation-map.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"token-operation-map.js","sourceRoot":"","sources":["../../../src/SDK/struct/token-operation-map.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,MAAM,OAAO,eAAe;IAG1B;QACI,IAAI,CAAC,oBAAoB,GAAG,IAAI,KAAK,EAA4B,CAAC;IACtE,CAAC;IACM,yBAAyB,CAAC,OAAe,EAAE,YAAoB,EAAE,MAAc;QAClF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE,CAAC;CACF"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/voting-param.d.ts b/darc-js/dist/SDK/struct/voting-param.d.ts
deleted file mode 100644
index b12389b4..00000000
--- a/darc-js/dist/SDK/struct/voting-param.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export declare class VotingParameters {
- votingPeriodInSeconds: number;
- votingThresholdInPercentage: number;
- votingTokenIDList: Array;
- constructor(votingPeriodInSeconds: number, votingThresholdInPercentage: number, votingTokenIDList: Array);
-}
-//# sourceMappingURL=voting-param.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/voting-param.d.ts.map b/darc-js/dist/SDK/struct/voting-param.d.ts.map
deleted file mode 100644
index 66774f95..00000000
--- a/darc-js/dist/SDK/struct/voting-param.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"voting-param.d.ts","sourceRoot":"","sources":["../../../src/SDK/struct/voting-param.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAgB;IAE3B,qBAAqB,EAAE,MAAM,CAAC;IAG9B,2BAA2B,EAAE,MAAM,CAAC;IAIpC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAErB,qBAAqB,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC;CAKjH"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/voting-param.js b/darc-js/dist/SDK/struct/voting-param.js
deleted file mode 100644
index 100b186f..00000000
--- a/darc-js/dist/SDK/struct/voting-param.js
+++ /dev/null
@@ -1,8 +0,0 @@
-export class VotingParameters {
- constructor(votingPeriodInSeconds, votingThresholdInPercentage, votingTokenIDList) {
- this.votingPeriodInSeconds = votingPeriodInSeconds;
- this.votingThresholdInPercentage = votingThresholdInPercentage;
- this.votingTokenIDList = votingTokenIDList;
- }
-}
-//# sourceMappingURL=voting-param.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/struct/voting-param.js.map b/darc-js/dist/SDK/struct/voting-param.js.map
deleted file mode 100644
index 194874ca..00000000
--- a/darc-js/dist/SDK/struct/voting-param.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"voting-param.js","sourceRoot":"","sources":["../../../src/SDK/struct/voting-param.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAgB;IAW3B,YAAY,qBAA6B,EAAE,2BAAmC,EAAE,iBAAgC;QAC9G,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QAC/D,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;CACF"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/transpiler.d.ts b/darc-js/dist/SDK/transpiler.d.ts
deleted file mode 100644
index e87314f0..00000000
--- a/darc-js/dist/SDK/transpiler.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export declare function transpiler(sourceCode: string): string;
-//# sourceMappingURL=transpiler.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/transpiler.d.ts.map b/darc-js/dist/SDK/transpiler.d.ts.map
deleted file mode 100644
index 85518ba8..00000000
--- a/darc-js/dist/SDK/transpiler.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"transpiler.d.ts","sourceRoot":"","sources":["../../src/SDK/transpiler.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAuDrD"}
\ No newline at end of file
diff --git a/darc-js/dist/SDK/transpiler.js b/darc-js/dist/SDK/transpiler.js
deleted file mode 100644
index aa42f315..00000000
--- a/darc-js/dist/SDK/transpiler.js
+++ /dev/null
@@ -1,45 +0,0 @@
-export function transpiler(sourceCode) {
- // compile the source code with babel standalone
- const babel = require('@babel/standalone');
- // register the plugin
- babel.registerPlugin('overload', require('@jetblack/operator-overloading')); //jetblack_operator_overload);
- /*
- babel.registerPlugin(
- '@babel/plugin-proposal-class-properties',
- require('@babel/plugin-proposal-class-properties')
- );
- babel.registerPlugin(
- '@babel/plugin-proposal-private-methods',
- require('@babel/plugin-proposal-private-methods')
- );
-
- function lolizer() {
- return {
- visitor: {
- Identifier(path:any) {
- console.log(JSON.stringify( path.node));
- //path.node.name = "LOL";
- },
- },
- };
- }
-
- babel.registerPlugin("lolizer", lolizer);
- */
- // register the preset
- babel.registerPreset('@babel/preset-env', require('@babel/preset-env'));
- // register the typescript preset
- babel.registerPreset('@babel/preset-typescript', require('@babel/preset-typescript'));
- // compile the code
- const result = babel.transform(sourceCode, {
- plugins: ['overload'],
- //['@babel/plugin-proposal-class-properties', { "loose": true }],
- //['@babel/plugin-proposal-private-methods', { loose: true }]
- presets: ['@babel/preset-env', '@babel/preset-typescript'],
- filename: 'source.ts',
- sourceType: 'script'
- });
- console.log(JSON.stringify(babel));
- return result.code;
-}
-//# sourceMappingURL=transpiler.js.map
\ No newline at end of file
diff --git a/darc-js/dist/SDK/transpiler.js.map b/darc-js/dist/SDK/transpiler.js.map
deleted file mode 100644
index cfdd6797..00000000
--- a/darc-js/dist/SDK/transpiler.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"transpiler.js","sourceRoot":"","sources":["../../src/SDK/transpiler.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,UAAkB;IAE3C,gDAAgD;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE3C,sBAAsB;IAEtB,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,8BAA8B;IAE3G;;;;;;;;;;;;;;;;;;;;;;MAsBE;IAGF,sBAAsB;IACtB,KAAK,CAAC,cAAc,CAAC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAGxE,iCAAiC;IACjC,KAAK,CAAC,cAAc,CAAC,0BAA0B,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEtF,mBAAmB;IACnB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE;QACzC,OAAO,EAAE,CAAC,UAAU,CAAC;QACrB,iEAAiE;QACjE,6DAA6D;QAE7D,OAAO,EAAE,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;QAC1D,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,QAAQ;KACrB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnC,OAAQ,MAAM,CAAC,IAAI,CAAC;AACtB,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/codeGenerator/codeGenerator.d.ts b/darc-js/dist/codeGenerator/codeGenerator.d.ts
deleted file mode 100644
index 2b1f5fe7..00000000
--- a/darc-js/dist/codeGenerator/codeGenerator.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export declare function codeGenerator(): void;
-//# sourceMappingURL=codeGenerator.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/codeGenerator/codeGenerator.d.ts.map b/darc-js/dist/codeGenerator/codeGenerator.d.ts.map
deleted file mode 100644
index 51cc6cd6..00000000
--- a/darc-js/dist/codeGenerator/codeGenerator.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"codeGenerator.d.ts","sourceRoot":"","sources":["../../src/codeGenerator/codeGenerator.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,SAE5B"}
\ No newline at end of file
diff --git a/darc-js/dist/codeGenerator/codeGenerator.js b/darc-js/dist/codeGenerator/codeGenerator.js
deleted file mode 100644
index 02863314..00000000
--- a/darc-js/dist/codeGenerator/codeGenerator.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export function codeGenerator() {
-}
-//# sourceMappingURL=codeGenerator.js.map
\ No newline at end of file
diff --git a/darc-js/dist/codeGenerator/codeGenerator.js.map b/darc-js/dist/codeGenerator/codeGenerator.js.map
deleted file mode 100644
index 06fb588f..00000000
--- a/darc-js/dist/codeGenerator/codeGenerator.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"codeGenerator.js","sourceRoot":"","sources":["../../src/codeGenerator/codeGenerator.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa;AAE7B,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/darcBinary/DARC-test.json b/darc-js/dist/darcBinary/DARC-test.json
deleted file mode 100644
index c314ce58..00000000
--- a/darc-js/dist/darcBinary/DARC-test.json
+++ /dev/null
@@ -1,1381 +0,0 @@
-{
- "_format": "hh-sol-artifact-1",
- "contractName": "DARC",
- "sourceName": "contracts/protocol/DARC.sol",
- "abi": [
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "idx",
- "type": "uint256"
- }
- ],
- "name": "checkVotingResult",
- "outputs": [
- {
- "internalType": "enum VotingStatus",
- "name": "",
- "type": "uint8"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "checkVotingResults",
- "outputs": [
- {
- "internalType": "enum VotingStatus[]",
- "name": "",
- "type": "uint8[]"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "currentVotingEndTime",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "address",
- "name": "programOperatorAddress",
- "type": "address"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "operatorAddress",
- "type": "address"
- },
- {
- "internalType": "enum EnumOpcode",
- "name": "opcode",
- "type": "uint8"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "UINT256_ARRAY",
- "type": "uint256[]"
- },
- {
- "internalType": "address[]",
- "name": "ADDRESS_ARRAY",
- "type": "address[]"
- },
- {
- "internalType": "string[]",
- "name": "STRING_ARRAY",
- "type": "string[]"
- },
- {
- "internalType": "bool[]",
- "name": "BOOL_ARRAY",
- "type": "bool[]"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "votingTokenClassList",
- "type": "uint256[]"
- },
- {
- "internalType": "uint256",
- "name": "approvalThresholdPercentage",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "votingDurationInSeconds",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "executionPendingDurationInSeconds",
- "type": "uint256"
- },
- {
- "internalType": "bool",
- "name": "isEnabled",
- "type": "bool"
- },
- {
- "internalType": "string",
- "name": "note",
- "type": "string"
- },
- {
- "internalType": "bool",
- "name": "bIsAbsoluteMajority",
- "type": "bool"
- }
- ],
- "internalType": "struct VotingRule[]",
- "name": "VOTING_RULE_ARRAY",
- "type": "tuple[]"
- },
- {
- "components": [
- {
- "internalType": "enum EnumReturnType",
- "name": "returnType",
- "type": "uint8"
- },
- {
- "internalType": "uint256",
- "name": "level",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "uint256",
- "name": "id",
- "type": "uint256"
- },
- {
- "internalType": "enum EnumConditionNodeType",
- "name": "nodeType",
- "type": "uint8"
- },
- {
- "internalType": "enum EnumLogicalOperatorType",
- "name": "logicalOperator",
- "type": "uint8"
- },
- {
- "internalType": "enum EnumConditionExpression",
- "name": "conditionExpression",
- "type": "uint8"
- },
- {
- "internalType": "uint256[]",
- "name": "childList",
- "type": "uint256[]"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "UINT256_ARRAY",
- "type": "uint256[]"
- },
- {
- "internalType": "address[]",
- "name": "ADDRESS_ARRAY",
- "type": "address[]"
- },
- {
- "internalType": "string[]",
- "name": "STRING_ARRAY",
- "type": "string[]"
- },
- {
- "internalType": "uint256[][]",
- "name": "UINT256_2DARRAY",
- "type": "uint256[][]"
- },
- {
- "internalType": "address[][]",
- "name": "ADDRESS_2DARRAY",
- "type": "address[][]"
- },
- {
- "internalType": "string[][]",
- "name": "STRING_2DARRAY",
- "type": "string[][]"
- }
- ],
- "internalType": "struct NodeParam",
- "name": "param",
- "type": "tuple"
- }
- ],
- "internalType": "struct ConditionNode[]",
- "name": "conditionNodes",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "votingRuleIndex",
- "type": "uint256"
- },
- {
- "internalType": "string",
- "name": "note",
- "type": "string"
- },
- {
- "internalType": "bool",
- "name": "bIsEnabled",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsBeforeOperation",
- "type": "bool"
- }
- ],
- "internalType": "struct Plugin[]",
- "name": "PLUGIN_ARRAY",
- "type": "tuple[]"
- },
- {
- "internalType": "enum MachineParameter[]",
- "name": "PARAMETER_ARRAY",
- "type": "uint8[]"
- },
- {
- "internalType": "uint256[][]",
- "name": "UINT256_2DARRAY",
- "type": "uint256[][]"
- },
- {
- "internalType": "address[][]",
- "name": "ADDRESS_2DARRAY",
- "type": "address[][]"
- }
- ],
- "internalType": "struct Param",
- "name": "param",
- "type": "tuple"
- }
- ],
- "internalType": "struct Operation[]",
- "name": "operations",
- "type": "tuple[]"
- }
- ],
- "internalType": "struct Program",
- "name": "program",
- "type": "tuple"
- }
- ],
- "name": "entrance",
- "outputs": [
- {
- "internalType": "string",
- "name": "",
- "type": "string"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "executingPendingDeadline",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "finiteState",
- "outputs": [
- {
- "internalType": "enum FiniteState",
- "name": "",
- "type": "uint8"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getCurrentDividendPerUnit",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "member",
- "type": "address"
- }
- ],
- "name": "getMemberInfo",
- "outputs": [
- {
- "components": [
- {
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsSuspended",
- "type": "bool"
- },
- {
- "internalType": "string",
- "name": "name",
- "type": "string"
- },
- {
- "internalType": "uint256",
- "name": "role",
- "type": "uint256"
- }
- ],
- "internalType": "struct MemberInfo",
- "name": "",
- "type": "tuple"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getMemberList",
- "outputs": [
- {
- "internalType": "address[]",
- "name": "",
- "type": "address[]"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getMyInfo",
- "outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getNumberOfTokenClasses",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getPluginInfo",
- "outputs": [
- {
- "components": [
- {
- "internalType": "enum EnumReturnType",
- "name": "returnType",
- "type": "uint8"
- },
- {
- "internalType": "uint256",
- "name": "level",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "uint256",
- "name": "id",
- "type": "uint256"
- },
- {
- "internalType": "enum EnumConditionNodeType",
- "name": "nodeType",
- "type": "uint8"
- },
- {
- "internalType": "enum EnumLogicalOperatorType",
- "name": "logicalOperator",
- "type": "uint8"
- },
- {
- "internalType": "enum EnumConditionExpression",
- "name": "conditionExpression",
- "type": "uint8"
- },
- {
- "internalType": "uint256[]",
- "name": "childList",
- "type": "uint256[]"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "UINT256_ARRAY",
- "type": "uint256[]"
- },
- {
- "internalType": "address[]",
- "name": "ADDRESS_ARRAY",
- "type": "address[]"
- },
- {
- "internalType": "string[]",
- "name": "STRING_ARRAY",
- "type": "string[]"
- },
- {
- "internalType": "uint256[][]",
- "name": "UINT256_2DARRAY",
- "type": "uint256[][]"
- },
- {
- "internalType": "address[][]",
- "name": "ADDRESS_2DARRAY",
- "type": "address[][]"
- },
- {
- "internalType": "string[][]",
- "name": "STRING_2DARRAY",
- "type": "string[][]"
- }
- ],
- "internalType": "struct NodeParam",
- "name": "param",
- "type": "tuple"
- }
- ],
- "internalType": "struct ConditionNode[]",
- "name": "conditionNodes",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "votingRuleIndex",
- "type": "uint256"
- },
- {
- "internalType": "string",
- "name": "note",
- "type": "string"
- },
- {
- "internalType": "bool",
- "name": "bIsEnabled",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsBeforeOperation",
- "type": "bool"
- }
- ],
- "internalType": "struct Plugin[]",
- "name": "",
- "type": "tuple[]"
- },
- {
- "components": [
- {
- "internalType": "enum EnumReturnType",
- "name": "returnType",
- "type": "uint8"
- },
- {
- "internalType": "uint256",
- "name": "level",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "uint256",
- "name": "id",
- "type": "uint256"
- },
- {
- "internalType": "enum EnumConditionNodeType",
- "name": "nodeType",
- "type": "uint8"
- },
- {
- "internalType": "enum EnumLogicalOperatorType",
- "name": "logicalOperator",
- "type": "uint8"
- },
- {
- "internalType": "enum EnumConditionExpression",
- "name": "conditionExpression",
- "type": "uint8"
- },
- {
- "internalType": "uint256[]",
- "name": "childList",
- "type": "uint256[]"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "UINT256_ARRAY",
- "type": "uint256[]"
- },
- {
- "internalType": "address[]",
- "name": "ADDRESS_ARRAY",
- "type": "address[]"
- },
- {
- "internalType": "string[]",
- "name": "STRING_ARRAY",
- "type": "string[]"
- },
- {
- "internalType": "uint256[][]",
- "name": "UINT256_2DARRAY",
- "type": "uint256[][]"
- },
- {
- "internalType": "address[][]",
- "name": "ADDRESS_2DARRAY",
- "type": "address[][]"
- },
- {
- "internalType": "string[][]",
- "name": "STRING_2DARRAY",
- "type": "string[][]"
- }
- ],
- "internalType": "struct NodeParam",
- "name": "param",
- "type": "tuple"
- }
- ],
- "internalType": "struct ConditionNode[]",
- "name": "conditionNodes",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "votingRuleIndex",
- "type": "uint256"
- },
- {
- "internalType": "string",
- "name": "note",
- "type": "string"
- },
- {
- "internalType": "bool",
- "name": "bIsEnabled",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsBeforeOperation",
- "type": "bool"
- }
- ],
- "internalType": "struct Plugin[]",
- "name": "",
- "type": "tuple[]"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "tokenClassIndex",
- "type": "uint256"
- }
- ],
- "name": "getSumDividendWeightByTokenClass",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "tokenClassIndex",
- "type": "uint256"
- }
- ],
- "name": "getSumVotingWeightByTokenClass",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "tokenClassIndex",
- "type": "uint256"
- }
- ],
- "name": "getTokenInfo",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "votingWeight",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "dividendWeight",
- "type": "uint256"
- },
- {
- "internalType": "string",
- "name": "tokenInfo",
- "type": "string"
- },
- {
- "internalType": "uint256",
- "name": "totalSupply",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "tokenClassIndex",
- "type": "uint256"
- },
- {
- "internalType": "address",
- "name": "tokenOwnerAddress",
- "type": "address"
- }
- ],
- "name": "getTokenOwnerBalance",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "tokenClassIndex",
- "type": "uint256"
- }
- ],
- "name": "getTokenOwners",
- "outputs": [
- {
- "internalType": "address[]",
- "name": "",
- "type": "address[]"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "member",
- "type": "address"
- }
- ],
- "name": "getWithdrawableCashBalance",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getWithdrawableCashOwnerList",
- "outputs": [
- {
- "internalType": "address[]",
- "name": "",
- "type": "address[]"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "member",
- "type": "address"
- }
- ],
- "name": "getWithdrawableDividendBalance",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getWithdrawableDividendOwnerList",
- "outputs": [
- {
- "internalType": "address[]",
- "name": "",
- "type": "address[]"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "initialOwnerAddress",
- "outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "initialize",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256[]",
- "name": "votingRuleIndices",
- "type": "uint256[]"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "programOperatorAddress",
- "type": "address"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "operatorAddress",
- "type": "address"
- },
- {
- "internalType": "enum EnumOpcode",
- "name": "opcode",
- "type": "uint8"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "UINT256_ARRAY",
- "type": "uint256[]"
- },
- {
- "internalType": "address[]",
- "name": "ADDRESS_ARRAY",
- "type": "address[]"
- },
- {
- "internalType": "string[]",
- "name": "STRING_ARRAY",
- "type": "string[]"
- },
- {
- "internalType": "bool[]",
- "name": "BOOL_ARRAY",
- "type": "bool[]"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "votingTokenClassList",
- "type": "uint256[]"
- },
- {
- "internalType": "uint256",
- "name": "approvalThresholdPercentage",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "votingDurationInSeconds",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "executionPendingDurationInSeconds",
- "type": "uint256"
- },
- {
- "internalType": "bool",
- "name": "isEnabled",
- "type": "bool"
- },
- {
- "internalType": "string",
- "name": "note",
- "type": "string"
- },
- {
- "internalType": "bool",
- "name": "bIsAbsoluteMajority",
- "type": "bool"
- }
- ],
- "internalType": "struct VotingRule[]",
- "name": "VOTING_RULE_ARRAY",
- "type": "tuple[]"
- },
- {
- "components": [
- {
- "internalType": "enum EnumReturnType",
- "name": "returnType",
- "type": "uint8"
- },
- {
- "internalType": "uint256",
- "name": "level",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "uint256",
- "name": "id",
- "type": "uint256"
- },
- {
- "internalType": "enum EnumConditionNodeType",
- "name": "nodeType",
- "type": "uint8"
- },
- {
- "internalType": "enum EnumLogicalOperatorType",
- "name": "logicalOperator",
- "type": "uint8"
- },
- {
- "internalType": "enum EnumConditionExpression",
- "name": "conditionExpression",
- "type": "uint8"
- },
- {
- "internalType": "uint256[]",
- "name": "childList",
- "type": "uint256[]"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "UINT256_ARRAY",
- "type": "uint256[]"
- },
- {
- "internalType": "address[]",
- "name": "ADDRESS_ARRAY",
- "type": "address[]"
- },
- {
- "internalType": "string[]",
- "name": "STRING_ARRAY",
- "type": "string[]"
- },
- {
- "internalType": "uint256[][]",
- "name": "UINT256_2DARRAY",
- "type": "uint256[][]"
- },
- {
- "internalType": "address[][]",
- "name": "ADDRESS_2DARRAY",
- "type": "address[][]"
- },
- {
- "internalType": "string[][]",
- "name": "STRING_2DARRAY",
- "type": "string[][]"
- }
- ],
- "internalType": "struct NodeParam",
- "name": "param",
- "type": "tuple"
- }
- ],
- "internalType": "struct ConditionNode[]",
- "name": "conditionNodes",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "votingRuleIndex",
- "type": "uint256"
- },
- {
- "internalType": "string",
- "name": "note",
- "type": "string"
- },
- {
- "internalType": "bool",
- "name": "bIsEnabled",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsBeforeOperation",
- "type": "bool"
- }
- ],
- "internalType": "struct Plugin[]",
- "name": "PLUGIN_ARRAY",
- "type": "tuple[]"
- },
- {
- "internalType": "enum MachineParameter[]",
- "name": "PARAMETER_ARRAY",
- "type": "uint8[]"
- },
- {
- "internalType": "uint256[][]",
- "name": "UINT256_2DARRAY",
- "type": "uint256[][]"
- },
- {
- "internalType": "address[][]",
- "name": "ADDRESS_2DARRAY",
- "type": "address[][]"
- }
- ],
- "internalType": "struct Param",
- "name": "param",
- "type": "tuple"
- }
- ],
- "internalType": "struct Operation[]",
- "name": "operations",
- "type": "tuple[]"
- }
- ],
- "internalType": "struct Program",
- "name": "currentProgram",
- "type": "tuple"
- }
- ],
- "name": "initializeVoting",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "latestVotingItemIndex",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "voter",
- "type": "address"
- },
- {
- "internalType": "bool[]",
- "name": "votes",
- "type": "bool[]"
- }
- ],
- "name": "vote",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "votingDeadline",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "name": "votingItems",
- "outputs": [
- {
- "components": [
- {
- "internalType": "address",
- "name": "programOperatorAddress",
- "type": "address"
- },
- {
- "components": [
- {
- "internalType": "address",
- "name": "operatorAddress",
- "type": "address"
- },
- {
- "internalType": "enum EnumOpcode",
- "name": "opcode",
- "type": "uint8"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "UINT256_ARRAY",
- "type": "uint256[]"
- },
- {
- "internalType": "address[]",
- "name": "ADDRESS_ARRAY",
- "type": "address[]"
- },
- {
- "internalType": "string[]",
- "name": "STRING_ARRAY",
- "type": "string[]"
- },
- {
- "internalType": "bool[]",
- "name": "BOOL_ARRAY",
- "type": "bool[]"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "votingTokenClassList",
- "type": "uint256[]"
- },
- {
- "internalType": "uint256",
- "name": "approvalThresholdPercentage",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "votingDurationInSeconds",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "executionPendingDurationInSeconds",
- "type": "uint256"
- },
- {
- "internalType": "bool",
- "name": "isEnabled",
- "type": "bool"
- },
- {
- "internalType": "string",
- "name": "note",
- "type": "string"
- },
- {
- "internalType": "bool",
- "name": "bIsAbsoluteMajority",
- "type": "bool"
- }
- ],
- "internalType": "struct VotingRule[]",
- "name": "VOTING_RULE_ARRAY",
- "type": "tuple[]"
- },
- {
- "components": [
- {
- "internalType": "enum EnumReturnType",
- "name": "returnType",
- "type": "uint8"
- },
- {
- "internalType": "uint256",
- "name": "level",
- "type": "uint256"
- },
- {
- "components": [
- {
- "internalType": "uint256",
- "name": "id",
- "type": "uint256"
- },
- {
- "internalType": "enum EnumConditionNodeType",
- "name": "nodeType",
- "type": "uint8"
- },
- {
- "internalType": "enum EnumLogicalOperatorType",
- "name": "logicalOperator",
- "type": "uint8"
- },
- {
- "internalType": "enum EnumConditionExpression",
- "name": "conditionExpression",
- "type": "uint8"
- },
- {
- "internalType": "uint256[]",
- "name": "childList",
- "type": "uint256[]"
- },
- {
- "components": [
- {
- "internalType": "uint256[]",
- "name": "UINT256_ARRAY",
- "type": "uint256[]"
- },
- {
- "internalType": "address[]",
- "name": "ADDRESS_ARRAY",
- "type": "address[]"
- },
- {
- "internalType": "string[]",
- "name": "STRING_ARRAY",
- "type": "string[]"
- },
- {
- "internalType": "uint256[][]",
- "name": "UINT256_2DARRAY",
- "type": "uint256[][]"
- },
- {
- "internalType": "address[][]",
- "name": "ADDRESS_2DARRAY",
- "type": "address[][]"
- },
- {
- "internalType": "string[][]",
- "name": "STRING_2DARRAY",
- "type": "string[][]"
- }
- ],
- "internalType": "struct NodeParam",
- "name": "param",
- "type": "tuple"
- }
- ],
- "internalType": "struct ConditionNode[]",
- "name": "conditionNodes",
- "type": "tuple[]"
- },
- {
- "internalType": "uint256",
- "name": "votingRuleIndex",
- "type": "uint256"
- },
- {
- "internalType": "string",
- "name": "note",
- "type": "string"
- },
- {
- "internalType": "bool",
- "name": "bIsEnabled",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsBeforeOperation",
- "type": "bool"
- }
- ],
- "internalType": "struct Plugin[]",
- "name": "PLUGIN_ARRAY",
- "type": "tuple[]"
- },
- {
- "internalType": "enum MachineParameter[]",
- "name": "PARAMETER_ARRAY",
- "type": "uint8[]"
- },
- {
- "internalType": "uint256[][]",
- "name": "UINT256_2DARRAY",
- "type": "uint256[][]"
- },
- {
- "internalType": "address[][]",
- "name": "ADDRESS_2DARRAY",
- "type": "address[][]"
- }
- ],
- "internalType": "struct Param",
- "name": "param",
- "type": "tuple"
- }
- ],
- "internalType": "struct Operation[]",
- "name": "operations",
- "type": "tuple[]"
- }
- ],
- "internalType": "struct Program",
- "name": "program",
- "type": "tuple"
- },
- {
- "internalType": "uint256",
- "name": "votingEndTime",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "executingEndTime",
- "type": "uint256"
- },
- {
- "internalType": "enum VotingStatus",
- "name": "votingStatus",
- "type": "uint8"
- },
- {
- "internalType": "bool",
- "name": "bIsProgramExecuted",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- }
- ],
- "bytecode": "0x6080806040523462000019576201349190816200001f8239f35b600080fdfe6107008060405260043610156200001557600080fd5b600090813560e01c908163036ee8501462003b2e575080630e5a3b2914620037d057806310ade3ea14620037a05780631797631d14620037185780631c75255a14620036b257806323b65c78146200362a57806341d1a43814620035f657806356424cf414620035155780635c00d98714620034c45780635d0b184914620034a25780635f1231ea14620033c85780635f5d5f001462003340578063681ece9d14620032fb57806379532bfe14620032d95780637daa10ce14620032bc5780638129fc1c1462002ef9578063864f9f7a1462002eba57806386ad77e21462002ba75780638c7a63ae1462002b355780639f36145f14620017f5578063a064c4f1146200172c578063a2f7d1011462000504578063acf80bc414620004c5578063aefca42a14620004a3578063afc820aa146200037e578063bba5103014620001f4578063d5a172f214620001c75763d6a93c51146200017357600080fd5b34620001c45780600319360112620001c4575b61271081106200019c575b602090604051908152f35b60ff60078260031b01541615620001be57620001b89062005a5a565b62000186565b62000191565b80fd5b5034620001c45780600319360112620001c45762027126546040516001600160a01b039091168152602090f35b5034620001c45780600319360112620001c4576202712e548082526202712b9160209083825260029384604083200154946200024d620002348762003c62565b9662000244604051988962003c3e565b80885262003c62565b8685019290601f1901368437835b86855281865282604086200154811015620003285760405163083a348760e31b815260048101829052602487828281305afa9182156200031d578792620002da575b50620002aa838b62005ab0565b906003831015620002c8575052620002c29062005a5a565b6200025b565b634e487b7160e01b8852602160045287fd5b9091508781813d831162000315575b620002f5818362003c3e565b810103126200031157516003811015620003115790386200029d565b8680fd5b503d620002e9565b6040513d89823e3d90fd5b505060408051858152875181870181905290948594928501935086905b8281106200035557505050500390f35b91938395509080826200036d60019483975162003d5f565b019501910191859493919262000345565b506020366003190112620001c4576004356001600160401b0381116200049f57620003ae90369060040162004d21565b805190916001600160a01b039162000403908316620003fa620003db620003d533620131f4565b62005923565b620003f3620003ed87895116620131f4565b62005989565b90620059e0565b90331462005a27565b9060208301915b825180518210156200047757906200046b6200047192846200042e84339362005ab0565b515116146200046462000445620003d533620131f4565b620003f3620003ed886200045b888c5162005ab0565b515116620131f4565b9062005a27565b62005a5a565b6200040a565b6200049b620004868662006d3f565b60405191829160208352602083019062003d92565b0390f35b5080fd5b5034620001c45780600319360112620001c45760206202712854604051908152f35b5034620001c4576020366003190112620001c4576020906040906001600160a01b03620004f162003b4e565b1681526201388783522054604051908152f35b5034620001c4576040366003190112620001c4576004356001600160401b0381116200049f576200053a90369060040162004a4f565b6024356001600160401b03811162001728576200055c90369060040162004d21565b620271298054600260ff8216620005738162003cf8565b14620016e35760ff191660021790556202712e54600181018111620016cf57600181016202712e558391845b84518110156200060257836002620005c3620005bc848962005ab0565b5162012484565b50015410620005de575b620005d89062005a5a565b6200059f565b9250620005d86002620005f6620005bc868862005ab0565b500154939050620005cd565b509093918291825b8551811015620006665784600362000627620005bc848a62005ab0565b5001541062000642575b6200063c9062005a5a565b6200060a565b93506200063c60036200065a620005bc878962005ab0565b50015494905062000631565b50600190950182526202712b602090815260408320865181546001600160a01b0319166001600160a01b039190911617815595015180519295919290600160401b821162000be5576001830154826001850155808310620014ee575b50602060019101920186526020862086925b82841062000c235750505050620006ec835162006777565b6202712e5485526202712b6020526004604086200181519160018060401b03831162000be55760209062000721848462005b96565b0190865260208620865b83811062000c0e575050505062000743835162006777565b6202712e5485526202712b6020526003604086200181519160018060401b03831162000be55760209062000778848462005b96565b0190865260208620865b83811062000bf957505050506200079a835162006777565b6202712e5485526202712b6020526005604086200181519160018060401b03831162000be557602090620007cf848462005b96565b0190865260208620865b83811062000bd05750505050620007f1904262006c06565b6202712e5485526202712b60205260066040862001551562000b90576200082e906202712e5484526202712b602052600660408520015462006c06565b60076040852001551562000b4d576202712e5482526202712b60205260086040832001600260ff1982541617905562000868815162006777565b6202712e5483526202712b6020526002604084200181519160018060401b03831162000b39576020906200089d848462005b96565b0190845260208420845b83811062000b24578585815b81518110156200091457806200046b620008d26200090e938562005ab0565b516202712e5486526202712b602052620008f3836002604089200162006ac7565b90919082549060031b600019811b9283911b16911916179055565b620008b3565b50815b815181101562000b20576202712e54928381526202712b6020526200095462000947836002604085200162006ac7565b90549060031b1c62012484565b505491620009628362006777565b92825b81811062000acf5750508182905b845182101562000a9f5762000989828662005ab0565b5161271081101562000a8b5760031b60010154620009a8838762005ab0565b5161271081101562000a775760031b60060154620009c691620069da565b901562000a3357620009d89162006c06565b919015620009f257620009eb9062005a5a565b9062000973565b60405162461bcd60e51b8152602060048201526019602482015278746f74616c566f74696e67506f776572206f766572666c6f7760381b6044820152606490fd5b606460405162461bcd60e51b815260206004820152602060248201527f63757272656e74436c617373566f74696e67506f776572206f766572666c6f776044820152fd5b634e487b7160e01b86526032600452602486fd5b634e487b7160e01b85526032600452602485fd5b905062000ac993506200046b91929586526202712b602052620008f3836005604089200162006ac7565b62000917565b62000b1a908785526202712b60205262000b008162000af96200094787600260408b200162006ac7565b5062006ac7565b90549060031b1c62000b13828862005ab0565b5262005a5a565b62000965565b8280f35b600190602084519401938184015501620008a7565b634e487b7160e01b85526041600452602485fd5b60405162461bcd60e51b815260206004820152601b60248201527a657865637574696e6720656e642074696d65206f766572666c6f7760281b6044820152606490fd5b60405162461bcd60e51b8152602060048201526018602482015277766f74696e6720656e642074696d65206f766572666c6f7760401b6044820152606490fd5b600190602084519401938184015501620007d9565b634e487b7160e01b87526041600452602487fd5b60019060208451940193818401550162000782565b6001906020845194019381840155016200072b565b805180518354602083015190916001600160a01b0316906022811015620014da576001600160a81b03199092161760a09190911b60ff60a01b161783556040015180518051906001600160401b0382116200103d576020600186019162000c8b848462005b96565b01908b5260208b208b5b838110620014c5575050505060208101518051906001600160401b0382116200103d576020600286019162000ccb848462005b96565b01908b5260208b208b5b838110620014a7575050505060038301604082015190602082519262000cfc848462005ca7565b01908b5260208b20908b905b838210620013bc5750505050606081015180516001600160401b0381116200103d576020600486019262000d3d838562012406565b01918b5260208b20908b5b8160051c8110620013815750601f19811681036200133e575b5050506080810151805190600160401b82116200103d576005850154826005870155808310620012bb575b5060200190600585018b5260208b20918b905b82821062001103575050505060a0810151805190600160401b82116200103d57600685015482600687015580831062001072575b50602001600685018b5260208b20908b905b83821062001051575050505060c081015180516001600160401b0381116200103d576020600786019262000e1a838562012406565b01918b5260208b20908b5b8160051c811062000fff5750601f198116810362000fb3575b5050506008830160e082015190602082519262000e5c848462005d35565b01908b5260208b20908b905b83821062000f3c57505050506101006009840191015190602082519262000e90848462005d35565b01908a5260208a20908a905b83821062000ebc5750505050600a602060019201920193019290620006d4565b80518051906001600160401b03821162000f28578460208f9262000ee1858462005b96565b0191528d60208120905b83811062000f0a57505050506001602081920193019101909162000e9c565b82516001600160a01b03168183015560209092019160010162000eeb565b634e487b7160e01b8e52604160045260248efd5b80518051906001600160401b03821162000f9f5760208f9162000f60848862005b96565b019085815260208120905b83811062000f8a57505050506001602081920193019101909162000e68565b60019060208451940193818401550162000f6b565b634e487b7160e01b8f52604160045260248ffd5b8b928c5b601f1983168303811062000fd557505060051c015538808062000e3e565b9093602062000ff56001928488519162000fef8362003db9565b62012470565b9501910162000fb7565b8c8d5b602081106200101957508382015560010162000e25565b94906020620010336001928885519162000fef8362003db9565b9201950162001002565b634e487b7160e01b8b52604160045260248bfd5b6006602082620010656001945187620060b3565b0193019101909162000de5565b6006818102048103620010ef576006838102048303620010ef57600686018c5260208c208360060281015b8d8360060283018210620010b45750505062000dd3565b90816006928255806001830155620010cf6002830162005e12565b806003830155620010e36004830162005c16565b6005820155016200109d565b634e487b7160e01b8c52601160045260248cfd5b805180518051906001600160401b03821162001291578f906020906200112a848a62005b96565b019087815260208120905b838110620012a6575050505060208101516001860155604081015160028601556060810151600386015562001174608082015115156004870162006070565b60a08101518051906001600160401b03821162001291578f90620011ab83620011a160058b015462004249565b60058b0162006026565b602091601f841160011462001212576007948460209560019895620011f99560c0959262001206575b5050600019600383901b1c191690881b1760058b01555b015115156006890162006070565b0194019101909262000d9f565b015190503880620011d4565b919060058901835260208320925b601f1985168110620012785750600794600185819895620011f99560c095602099601f198116106200125e575b505050811b0160058b0155620011eb565b015160001960f88460031b161c191690553880806200124d565b9192602060018192868501518155019401920162001220565b50634e487b7160e01b8f52604160045260248ffd5b60019060208451940193818401550162001135565b6007818102048103620010ef576007838102048303620010ef57600586018c5260208c208360070281015b8d8360070283018210620012fd5750505062000d8c565b906007916200130c8262005b6f565b806001830155806002830155806003830155806004830155620013326005830162005c16565b600682015501620012e6565b8b928c5b601f198316830381106200136057505060051c015538808062000d61565b909360206200137760019284885115159162012470565b9501910162001342565b8c8d5b602081106200139b57508382015560010162000d48565b94906020620013b260019288855115159162012470565b9201950162001384565b80518051906001600160401b03821162000f9f578e90620013ea83620013e3885462004249565b8862006026565b602091601f841160011462001438579280602093600196938796926200142c575b5050600019600383901b1c191690841b1786555b0193019101909162000d08565b0151905038806200140b565b9190601f19841687845260208420935b8181106200148e575093602093600196938796938388951062001474575b505050811b0186556200141f565b015160001960f88460031b161c1916905538808062001466565b9293602060018192878601518155019501930162001448565b82516001600160a01b03168183015560209092019160010162000cd5565b60019060208451940193818401550162000c95565b634e487b7160e01b8c52602160045260248cfd5b600a818102048103620016bb57600a838102048303620016bb576001840188526020882083600a0281015b82600a02820181106200152e575050620006c2565b8981556200153f6001820162005b6f565b6200154d6002820162005b6f565b6200155b6003820162005c68565b6200156f600482018054908c8155620123de565b60058101548a6005830155806200164c575b5060068101548a600683015580620015cf575b5080620015ac6007600a93018054908d8155620123de565b620015ba6008820162005cf6565b620015c86009820162005cf6565b0162001519565b60068181020481036200163857600682018b5260208b20906006028101905b818110620015fd575062001594565b808c600692558c6001820155620016176002820162005e12565b8c60038201556200162b6004820162005c16565b8c600582015501620015ee565b634e487b7160e01b8b52601160045260248bfd5b60078181020481036200163857600582018b5260208b20906007028101905b8181106200167a575062001581565b806200168860079262005b6f565b8c60018201558c60028201558c60038201558c6004820155620016ae6005820162005c16565b8c6006820155016200166b565b634e487b7160e01b88526011600452602488fd5b634e487b7160e01b84526011600452602484fd5b60405162461bcd60e51b815260206004820152601d60248201527f766f74696e6720697320616c726561647920696e2070726f67726573730000006044820152606490fd5b8280fd5b5034620001c4576020366003190112620001c45760043590612710821015620017e1576200176e826200176760018260031b01549162006b44565b90620069da565b90156200178057602090604051908152f35b60405162461bcd60e51b815260206004820152603360248201527f73756d566f74696e67576569676874466f72546f6b656e436c6173733a20766f60448201527274696e67576569676874206f766572666c6f7760681b6064820152608490fd5b634e487b7160e01b81526032600452602490fd5b5034620001c4576020366003190112620001c45760043581526202712b602052604080822081519182016001600160401b0381118382101762002b215760405280546001600160a01b03168252600181018054620018538162003c62565b9162001863604051938462003c3e565b81835285526020808620869184015b838310620018d957620018ae878787602083015260ff600682015491600860078201549101549060405195869560a0875260a0870190620045b5565b9360208601526040850152620018ca6060850183831662003d5f565b60081c16151560808301520390f35b6040516001600160401b03606082019081119082111762002b0d576060810160405282546001600160a01b0381168252602260a082901c60ff16101562002af95760a01c60ff1660208201526040516001600160401b0361012082019081119082111762002ae5576101208101604052620019576001850162004198565b81526200196760028501620041ed565b60208201526200197a6003850162004336565b6040820152600484018a604051809283916020825491828152019184526020842093905b80601f830110620029115762001ae1945491818110620028fa575b818110620028e0575b818110620028c6575b818110620028ac575b81811062002893575b81811062002879575b8181106200285f575b81811062002845575b8181106200282b575b81811062002811575b818110620027f7575b818110620027dd575b818110620027c3575b818110620027a9575b8181106200278f575b81811062002775575b8181106200275b575b81811062002741575b81811062002727575b8181106200270d575b818110620026f3575b818110620026d9575b818110620026bf575b818110620026a5575b8181106200268b575b81811062002671575b81811062002657575b8181106200263d575b81811062002623575b81811062002609575b818110620025ef575b10620025de575b509b9a999897969594939b038262003c3e565b60608a015260058301805462001af78162003c62565b9162001b07604051938462003c3e565b8183528c526020808d20908d9084015b838210620025a9575050505060808a01526006830198895462001b3a8162003c62565b9a62001b4a6040519c8d62003c3e565b818c5260208c01908d528c6020812091815b8483106200243a57505050505090919293949596979860a0820152604051806007860190602082549182815201918d5260208d20908d915b81601f840110620021315784600a97946020979460019a979462001cdb94549181811062002113575b818110620020f2575b818110620020d1575b818110620020b0575b81811062002090575b8181106200206f575b8181106200204e575b8181106200202d575b8181106200200c575b81811062001feb575b81811062001fca575b81811062001fa9575b81811062001f88575b81811062001f67575b81811062001f46575b81811062001f25575b81811062001f04575b81811062001ee3575b81811062001ec2575b81811062001ea1575b81811062001e80575b81811062001e5f575b81811062001e3e575b81811062001e1d575b81811062001dfc575b81811062001ddb575b81811062001dba575b81811062001d99575b81811062001d78575b81811062001d57575b81811062001d36575b1062001d1b575b50038262003c3e565b60c082015262001cee600888016200442b565b60e082015262001d016009880162004488565b610100820152604082015281520192019201919062001872565b90889160f81c62001d2c8162003db9565b8152013862001cd2565b928a8d9160ff8560f01c1662001d4c8162003db9565b815201930162001ccb565b928a8d9160ff8560e81c1662001d6d8162003db9565b815201930162001cc2565b928a8d9160ff8560e01c1662001d8e8162003db9565b815201930162001cb9565b928a8d9160ff8560d81c1662001daf8162003db9565b815201930162001cb0565b928a8d9160ff8560d01c1662001dd08162003db9565b815201930162001ca7565b928a8d9160ff8560c81c1662001df18162003db9565b815201930162001c9e565b928a8d9160ff8560c01c1662001e128162003db9565b815201930162001c95565b928a8d9160ff8560b81c1662001e338162003db9565b815201930162001c8c565b928a8d9160ff8560b01c1662001e548162003db9565b815201930162001c83565b928a8d9160ff8560a81c1662001e758162003db9565b815201930162001c7a565b928a8d9160ff8560a01c1662001e968162003db9565b815201930162001c71565b928a8d9160ff8560981c1662001eb78162003db9565b815201930162001c68565b928a8d9160ff8560901c1662001ed88162003db9565b815201930162001c5f565b928a8d9160ff8560881c1662001ef98162003db9565b815201930162001c56565b928a8d9160ff8560801c1662001f1a8162003db9565b815201930162001c4d565b928a8d9160ff8560781c1662001f3b8162003db9565b815201930162001c44565b928a8d9160ff8560701c1662001f5c8162003db9565b815201930162001c3b565b928a8d9160ff8560681c1662001f7d8162003db9565b815201930162001c32565b928a8d9160ff8560601c1662001f9e8162003db9565b815201930162001c29565b928a8d9160ff8560581c1662001fbf8162003db9565b815201930162001c20565b928a8d9160ff8560501c1662001fe08162003db9565b815201930162001c17565b928a8d9160ff8560481c16620020018162003db9565b815201930162001c0e565b928a8d9160ff8560401c16620020228162003db9565b815201930162001c05565b928a8d9160ff8560381c16620020438162003db9565b815201930162001bfc565b928a8d9160ff8560301c16620020648162003db9565b815201930162001bf3565b928a8d9160ff8560281c16620020858162003db9565b815201930162001bea565b928a8d9160ff85831c16620020a58162003db9565b815201930162001be1565b928a8d9160ff8560181c16620020c68162003db9565b815201930162001bd8565b928a8d9160ff8560101c16620020e78162003db9565b815201930162001bcf565b928a8d9160ff8560081c16620021088162003db9565b815201930162001bc6565b928a8d9160ff8516620021268162003db9565b815201930162001bbd565b926001610400602092865460ff81166200214b8162003db9565b825260ff8160081c166200215f8162003db9565b8583015260ff8160101c16620021758162003db9565b604083015260ff8160181c166200218c8162003db9565b606083015260ff81861c16620021a28162003db9565b608083015260ff8160281c16620021b98162003db9565b60a0830152620021cf60ff8260301c1662003db9565b60ff8160301c1660c083015260ff8160381c16620021ed8162003db9565b60e083015260ff8160401c16620022048162003db9565b61010083015260ff8160481c166200221c8162003db9565b61012083015260ff8160501c16620022348162003db9565b61014083015260ff8160581c166200224c8162003db9565b61016083015260ff8160601c16620022648162003db9565b61018083015260ff8160681c166200227c8162003db9565b6101a083015260ff8160701c16620022948162003db9565b6101c083015260ff8160781c16620022ac8162003db9565b6101e083015260ff8160801c16620022c48162003db9565b61020083015260ff8160881c16620022dc8162003db9565b61022083015260ff8160901c16620022f48162003db9565b61024083015260ff8160981c166200230c8162003db9565b61026083015260ff8160a01c16620023248162003db9565b61028083015260ff8160a81c166200233c8162003db9565b6102a083015260ff8160b01c16620023548162003db9565b6102c083015260ff8160b81c166200236c8162003db9565b6102e083015260ff8160c01c16620023848162003db9565b61030083015260ff8160c81c166200239c8162003db9565b61032083015260ff8160d01c16620023b48162003db9565b61034083015260ff8160d81c16620023cc8162003db9565b61036083015260ff8160e01c16620023e48162003db9565b61038083015260ff8160e81c16620023fc8162003db9565b6103a083015260ff8160f01c16620024148162003db9565b6103c083015260f81c620024288162003db9565b6103e082015201940192019162001b94565b60405190620024498262003bcd565b6200245960ff8654168362004411565b600185015460208301526002850154620024738162003c62565b9162002483604051938462003c3e565b81835260028701815260208082209084015b8383106200251b57505050509d9e95969798999a9b9c9d600192826020926040600695015260038701546060820152620024d26004880162004286565b608082015260ff6005880154818116151560a0840152818160081c16151560c084015260101c16151560e08201528152019301910190918e9d9c9b9a9998979695949d62001b5c565b60096020600192604051620025308162003bb1565b855481526200257460ff868801548181166200254c8162003db9565b86850152818160081c16620025618162003cf8565b604085015260101c16606083016200441e565b620025826002870162004198565b60808201526200259560038701620044e5565b60a082015281520192019201919062002495565b600760209d9e969798999a9b9c9d600192620025c58662004393565b8152019301910190919c9b9a9998979695949c62001b17565b60f81c151581526020013862001ace565b92602060019160ff8560f01c161515815201930162001ac7565b92602060019160ff8560e81c161515815201930162001abe565b92602060019160ff8560e01c161515815201930162001ab5565b92602060019160ff8560d81c161515815201930162001aac565b92602060019160ff8560d01c161515815201930162001aa3565b92602060019160ff8560c81c161515815201930162001a9a565b92602060019160ff8560c01c161515815201930162001a91565b92602060019160ff8560b81c161515815201930162001a88565b92602060019160ff8560b01c161515815201930162001a7f565b92602060019160ff8560a81c161515815201930162001a76565b92602060019160ff8560a01c161515815201930162001a6d565b92602060019160ff8560981c161515815201930162001a64565b92602060019160ff8560901c161515815201930162001a5b565b92602060019160ff8560881c161515815201930162001a52565b92602060019160ff8560801c161515815201930162001a49565b92602060019160ff8560781c161515815201930162001a40565b92602060019160ff8560701c161515815201930162001a37565b92602060019160ff8560681c161515815201930162001a2e565b92602060019160ff8560601c161515815201930162001a25565b92602060019160ff8560581c161515815201930162001a1c565b92602060019160ff8560501c161515815201930162001a13565b92602060019160ff8560481c161515815201930162001a0a565b92602060019160ff8560401c161515815201930162001a01565b92602060019160ff8560381c1615158152019301620019f8565b92602060019160ff8560301c1615158152019301620019ef565b92602060019160ff8560281c1615158152019301620019e6565b92602060019160ff85831c1615158152019301620019dd565b92602060019160ff8560181c1615158152019301620019d4565b92602060019160ff8560101c1615158152019301620019cb565b92602060019160ff8560081c1615158152019301620019c2565b92602060019160ff851615158152019301620019b9565b916020919350610400600191865460ff81161515825260ff8160081c1615158583015260ff8160101c161515604083015260ff8160181c161515606083015260ff8160808282891c16151581860152828260281c16151560a0860152828260c092828260301c16151584890152828260381c16151560e0890152828260401c161515610100890152828260481c161515610120890152828260501c161515610140890152828260581c161515610160890152828260601c161515610180890152828260681c1615156101a0890152828260701c1615156101c0890152828260781c1615156101e08901521c161515610200860152828260881c161515610220860152828260901c161515610240860152828260981c161515610260860152828260a01c161515610280860152828260a81c1615156102a0860152828260b01c1615156102c0860152828260b81c1615156102e08601521c16151561030083015260ff8160c81c16151561032083015260ff8160d01c16151561034083015260ff8160d81c16151561036083015260ff8160e01c16151561038083015260ff8160e81c1615156103a083015260ff8160f01c1615156103c083015260f81c15156103e08201520194019201849293916200199e565b634e487b7160e01b8a52604160045260248afd5b634e487b7160e01b8a52602160045260248afd5b634e487b7160e01b89526041600452602489fd5b634e487b7160e01b84526041600452602484fd5b5034620001c4576020366003190112620001c45760043590612710821015620017e1575060031b600181015460028201549162002b9d62002b7e60056006840154930162004286565b6040519485948552602085015260806040850152608084019062003d92565b9060608301520390f35b5034620001c45780600319360112620001c45762013882805462002bcb8162003c62565b9162002bdb604051938462003c3e565b81835283526020808420849184015b83831062002d8c5785856201388380549062002c068262003c62565b9362002c16604051958662003c3e565b82855260208501918152602081209080925b84841062002c5e5762002c4f866200049b8960405193849360408552604085019062003f44565b90838203602085015262003f44565b60405162002c6c8162003bcd565b62002c7c60ff8554168262004411565b6001840154602082015260028401805462002c978162003c62565b9162002ca7604051938462003c3e565b8183528552602080862090869084015b83821062002d26575050505060019282602092604060069501526003870154606082015262002ce96004880162004286565b608082015260ff6005880154818116151560a0840152818160081c16151560c084015260101c16151560e082015281520193019301929162002c28565b6009602060019260405162002d3b8162003bb1565b8654815262002d5760ff868901548181166200254c8162003db9565b62002d656002880162004198565b608082015262002d7860038801620044e5565b60a082015281520193019101909162002cb7565b60405162002d9a8162003bcd565b62002daa60ff8454168262004411565b6001830154602082015260028301805462002dc58162003c62565b9162002dd5604051938462003c3e565b81835289526020808a20908a9084015b83821062002e54575050505060019282602092604060069501526003860154606082015262002e176004870162004286565b608082015260ff6005870154818116151560a0840152818160081c16151560c084015260101c16151560e082015281520192019201919062002bea565b6009602060019260405162002e698162003bb1565b8654815262002e8560ff868901548181166200254c8162003db9565b62002e936002880162004198565b608082015262002ea660038801620044e5565b60a082015281520193019101909162002de5565b5034620001c4576020366003190112620001c4576020906040906001600160a01b0362002ee662003b4e565b1681526201388583522054604051908152f35b5034620001c45780600319360112620001c4576202712680546001600160a01b0319163317905562027129805460ff19166001908117909155604051909190819062002f458162003c06565b5290620138828054600082558062003253575b508252818060405162002f6b8162003c06565b526200323f576201388380546000825580620031c0575b5082526127106202712a556040519162002f9c8362003bea565b818352805b60208082101562003017576040516020929162002fbe8262003bb1565b8482528481830152846040830152606085818401526080908082850152806040519262002feb8462003bb1565b8184528185850152816040850152818085015283015260a0908183015283015282870101520162002fa1565b8284620031b0876040516200302c8162003c06565b8481526040516200303d8162003c06565b8581526040516200304e8162003c06565b8681526040516200305f8162003c06565b878152604051620030708162003c06565b88815260405191620030828362003c06565b89835260405193620030948562003c06565b8a855260405195620030a68762003bb1565b8652602086015260408501526060840152608083015260a082015260405191620030d08362003bb1565b86835260036020840152866040840152866060840152608083015260a0820152620030fb8262005a6a565b52620031078162005a6a565b506200315e6040516200311a8162003bcd565b600481528460208201528260408201528560608201526040516200313e8162003c06565b86815260808201528460a08201528460c08201528460e082015262006833565b604051906200316d8262003bcd565b600282528360208301526040820152836060820152604051620031908162003c06565b84815260808201528260a08201528260c08201528360e082015262006880565b6113886201388b556201388c5580f35b925060068381029381850403620032295760009382855260208520908101905b818110620031f057505062002f82565b80868492558686820155620032086002820162005e12565b8660038201556200321c6004820162005c16565b86600582015501620031e0565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b82526041600452602482fd5b925060068381029381850403620032295760009382855260208520908101905b8181106200328357505062002f58565b808684925586868201556200329b6002820162005e12565b866003820155620032af6004820162005c16565b8660058201550162003273565b5034620001c45780600319360112620001c4576020604051338152f35b5034620001c45780600319360112620001c45760206202712d54604051908152f35b5034620001c4576020366003190112620001c45760043590612710821015620017e1576200049b6200333360048460031b01620041ed565b6040519182918262003d19565b5034620001c45780600319360112620001c4576040516201388180548083529083526020808301937fcd6f7cece5c70f73af31bb8ed8b80ae1c2a9e5eb261bd5ab2d9374b0c38719c892915b828210620033a7576200049b85620033338189038262003c3e565b83546001600160a01b0316865294850194600193840193909101906200338c565b5034620001c45760209081600319360112620001c457604090620033eb62003b4e565b8160608451620033fb8162003b7f565b82815286810183905285810182905201526001600160a01b0316815262013880835220604051906200342d8262003b7f565b6200349781549160ff83161515845260ff8585019360081c161515835260026200345a6001830162004286565b916040860192835201549260608501938452604051958695818752511515908601525115156040850152516080606085015260a084019062003d92565b905160808301520390f35b5034620001c45780600319360112620001c45760206202712e54604051908152f35b5034620001c4576020366003190112620001c45760043590612710821015620017e15760206200350d62003505846200176760028260031b01549162006b44565b9190620068ec565b604051908152f35b5034620001c45780600319360112620001c4576201388b54620035726200353b62012d29565b916200354d6127109384831062005a27565b620035676201388e546201388c5411156200046462012d97565b6201388d54620069da565b90506200357e62012ded565b50825b828110620035a4575b60206200359a8585850462006c94565b9050604051908152f35b909260ff60078360031b01541615620035ee5781620035d8620035e492620035d16200046b969562006959565b9062006c06565b94906200046462012ded565b9290919262003581565b92906200358a565b5034620001c4576020366003190112620001c457602062003619600435620125f9565b62003628604051809262003d5f565bf35b5034620001c45780600319360112620001c4576040516201388680548083529083526020808301937f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa492915b82821062003691576200049b85620033338189038262003c3e565b83546001600160a01b03168652948501946001938401939091019062003676565b5034620001c4576040366003190112620001c4576004356024356001600160a01b03811690819003620017285761271082101562003704579160036040926020948352811b0183522054604051908152f35b634e487b7160e01b83526032600452602483fd5b5034620001c45780600319360112620001c4576040516201388880548083529083526020808301937ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df92915b8282106200377f576200049b85620033338189038262003c3e565b83546001600160a01b03168652948501946001938401939091019062003764565b5034620001c45780600319360112620001c457602060ff62027129541660405190620037cc8162003cf8565b8152f35b5034620001c4576040366003190112620001c457620037ee62003b4e565b60249081356001600160401b03811162003b2a576200381290369060040162003c88565b91600260ff620271295416620038288162003cf8565b0362003aea576202712d5442101562003aac5760018060a01b0382168085526202712c92602093808552604087206202712e91825491828a52875260ff60408a20541662003a6e57875194828a526202712b95868952600260408c2001540362003a08578952865260408820908852855260408720956001968760ff198254161790558688905b620038b8578880f35b815181101562003a0457620038ce818362005ab0565b51156200397e578254808a528588526200392388620008f3848d60406003918c620039158d620035d1876200390881898989200162006ac7565b905490891b1c92620124a5565b979099835252200162006ac7565b156200393b57620039349062005a5a565b87620038af565b60405162461bcd60e51b815260048101889052601c818801527b766f74696e6720666f7220706f776572596573206f766572666c6f7760201b6044820152606490fd5b8254808a52858852620039b188620008f3848d60406003918c620039158d620035d1876200390881898989200162006ac7565b15620039c257620039349062005a5a565b60405162461bcd60e51b815260048101889052601b818801527a766f74696e6720666f7220706f7765724e6f206f766572666c6f7760281b6044820152606490fd5b8880f35b60405162461bcd60e51b8152600481018990526039818901527f746865206e756d626572206f6620766f74657320646f6573206e6f74206d6174604482015278636820746865206e756d626572206f6620706f6c696369657360381b6064820152608490fd5b60405162461bcd60e51b815260048101889052601781880152761d9bdd195c881a185cc8185b1c9958591e481d9bdd1959604a1b6044820152606490fd5b60649060176040519162461bcd60e51b835260206004840152820152761d9bdd1a5b99c81c195c9a5bd9081a185cc8195b991959604a1b6044820152fd5b60649060196040519162461bcd60e51b83526020600484015282015278766f74696e67206973206e6f7420696e2070726f677265737360381b6044820152fd5b8380fd5b9050346200049f57816003193601126200049f5760209062027127548152f35b600435906001600160a01b038216820362003b6557565b600080fd5b35906001600160a01b038216820362003b6557565b608081019081106001600160401b0382111762003b9b57604052565b634e487b7160e01b600052604160045260246000fd5b60c081019081106001600160401b0382111762003b9b57604052565b61010081019081106001600160401b0382111762003b9b57604052565b604081019081106001600160401b0382111762003b9b57604052565b602081019081106001600160401b0382111762003b9b57604052565b606081019081106001600160401b0382111762003b9b57604052565b601f909101601f19168101906001600160401b0382119082101762003b9b57604052565b6001600160401b03811162003b9b5760051b60200190565b3590811515820362003b6557565b81601f8201121562003b655780359162003ca28362003c62565b9262003cb2604051948562003c3e565b808452602092838086019260051b82010192831162003b65578301905b82821062003cde575050505090565b83809162003cec8462003c7a565b81520191019062003ccf565b6004111562003d0357565b634e487b7160e01b600052602160045260246000fd5b6020908160408183019282815285518094520193019160005b82811062003d41575050505090565b83516001600160a01b03168552938101939281019260010162003d32565b90600382101562003d035752565b60005b83811062003d815750506000910152565b818101518382015260200162003d70565b9060209162003dad8151809281855285808601910162003d6d565b601f01601f1916010190565b6005111562003d0357565b90815180825260208080930193019160005b82811062003de5575050505090565b83518552938101939281019260010162003dd6565b90815180825260208080930193019160005b82811062003e1b575050505090565b83516001600160a01b03168552938101939281019260010162003e0c565b90815180825260208092019182818360051b85019501936000915b84831062003e655750505050505090565b909192939495848062003e8183856001950387528a5162003d92565b980193019301919493929062003e54565b90815180825260208092019182818360051b82019501936000915b84831062003ebe5750505050505090565b909192939495848062003eda83856001950387528a5162003dc4565b980193019301919493929062003ead565b90815180825260208092019182818360051b82019501936000915b84831062003f175750505050505090565b909192939495848062003f3383856001950387528a5162003dfa565b980193019301919493929062003f06565b9060208251918281520190819060208160051b84019401926000905b82821062003f7057505050505090565b909192939481810385528551906101008082018351600681101562003d0357835260208401516020840152604084015191604084015281518091526101206020818501918360051b86010193019160005b8181106200402b575050505060019260209262003ff7849360608085015190840152608080850151908483039085015262003d92565b9160a08082015115159083015260c08082015115159083015260e08091015115159101529701950192019092919262003f60565b9091929361011f9c9b9c19868203018452845190815181526020820151620040538162003db9565b60208201526040820151620040688162003cf8565b60408201526060820151603d81101562003d0357606082015260a06200409e608084015160c0608085015260c084019062003dc4565b9201519060a081840391015260a06200411d6200410a620040f7620040e4620040d1865160c0895260c089019062003dc4565b602087015188820360208a015262003dfa565b6040860151878203604089015262003e39565b6060850151868203606088015262003e92565b6080840151858203608087015262003eeb565b9101519160a081830391015281519081815260208101906020808460051b8301019401926000915b8183106200416a5750505050506020806001929e9d9e96019401910191909162003fc1565b90919293946020806200418a600193601f19868203018952895162003e39565b970195019301919062004145565b9060405191828154918282526020928383019160005283600020936000905b828210620041d257505050620041d09250038362003c3e565b565b855484526001958601958895509381019390910190620041b7565b9060405191828154918282526020928383019160005283600020936000905b8282106200422557505050620041d09250038362003c3e565b85546001600160a01b0316845260019586019588955093810193909101906200420c565b90600182811c921680156200427b575b60208310146200426557565b634e487b7160e01b600052602260045260246000fd5b91607f169162004259565b90604051918260008254926200429c8462004249565b908184526001948581169081600014620043115750600114620042ca575b5050620041d09250038362003c3e565b9093915060005260209081600020936000915b818310620042f8575050620041d093508201013880620042ba565b85548884018501529485019487945091830191620042dd565b915050620041d094506020925060ff191682840152151560051b8201013880620042ba565b908154620043448162003c62565b9262004354604051948562003c3e565b818452600090815260208082208186015b84841062004374575050505050565b6001838192620043848562004286565b81520192019301929062004365565b60405190919060e081016001600160401b0381118282101762003b9b5760405260c060ff60068395620043c68162004198565b85526001810154602086015260028101546040860152600381015460608601528260048201541615156080860152620044026005820162004286565b60a08601520154161515910152565b600682101562003d035752565b603d82101562003d035752565b908154620044398162003c62565b9262004449604051948562003c3e565b818452600090815260208082208186015b84841062004469575050505050565b6001838192620044798562004198565b8152019201930192906200445a565b908154620044968162003c62565b92620044a6604051948562003c3e565b818452600090815260208082208186015b848410620044c6575050505050565b6001838192620044d685620041ed565b815201920193019290620044b7565b9060405191620044f58362003bb1565b82620045018262004198565b81526001600562004514828501620041ed565b93602094858501526200452a6002820162004336565b60408501526200453d600382016200442b565b6060850152620045506004820162004488565b608085015201805490620045648262003c62565b9462004574604051968762003c3e565b82865260009182528082208187015b848410620045975750505050505060a00152565b85838192620045a68562004336565b81520192019301929062004583565b906020604082019260018060a01b0381511683520151916040602083015282518091526060820190602060608260051b8501019401926000905b828210620045ff57505050505090565b9091929394605f19828203018552855160018060a01b038151168252602081015190602282101562003d03576040916020840152015190606060408201526200468d620046766200465f8451610120606086015261018085019062003dc4565b6020850151848203605f1901608086015262003dfa565b6040840151838203605f190160a085015262003e39565b606083015190605f198382030160c0840152602080835192838152019201906000905b80821062004a3457505050608083015190605f198382030160e0840152815180825260208201906020808260051b85010194019260005b828110620049b057505050505060a083015190605f1983820301610100840152815190818152602081016020808460051b8401019401926000925b818410620047d257505050505060c083015190605f1983820301610120840152602080835192838152019201906000905b808210620047ae57505050620047a08360209361010062004789869560e06001990151605f198583030161014086015262003e92565b92015190610160605f198285030191015262003eeb565b9701950193920190620045ef565b9091926020806001928651620047c48162003db9565b815201940192019062004753565b9091929394601f9d9c9d198282030184528551908151600681101562003d03578152602082015160208201526040820151610100604083015261010082018151809152610120830160206101208360051b8601019301916000905b8082106200489857505050509d9e9d8260209260e0806200486886956060600199015160608601526080860151858203608087015262003d92565b9360a0810151151560a085015260c0810151151560c0850152015115159101529701940194019293919062004722565b9091929361011f19868203018452845190815181526020820151620048bd8162003db9565b60208201526040820151620048d28162003cf8565b60408201526060820151603d81101562003d0357606082015260a062004908608084015160c0608085015260c084019062003dc4565b9201519060a081840391015260a06200493b6200410a620040f7620040e4620040d1865160c0895260c089019062003dc4565b9101519160a0818303910152815180825260208201906020808260051b8501019401926000915b80831062004982575050505050602080600192960194019201906200482d565b9091929394602080620049a2600193601f19878203018952895162003e39565b970195019301919062004962565b9091929394602080600192601f1986820301885288519060c08062004a1e620049e3855160e0865260e086019062003dc4565b8686015187860152604086015160408601526060860151606086015260808601511515608086015260a086015185820360a087015262003d92565b93015115159101529701950193929101620046e7565b909192602080600192865115158152019401920190620046b0565b81601f8201121562003b655780359162004a698362003c62565b9262004a79604051948562003c3e565b808452602092838086019260051b82010192831162003b65578301905b82821062004aa5575050505090565b8135815290830190830162004a96565b81601f8201121562003b655780359162004acf8362003c62565b9262004adf604051948562003c3e565b808452602092838086019260051b82010192831162003b65578301905b82821062004b0b575050505090565b83809162004b198462003b6a565b81520191019062004afc565b81601f8201121562003b65578035906001600160401b03821162003b9b576040519262004b5d601f8401601f19166020018562003c3e565b8284526020838301011162003b6557816000926020809301838601378301015290565b9080601f8301121562003b655781359062004b9b8262003c62565b9262004bab604051948562003c3e565b828452602092838086019160051b8301019280841162003b6557848301915b84831062004bdb5750505050505090565b82356001600160401b03811162003b6557869162004bff8484809489010162004b25565b81520192019162004bca565b9080601f8301121562003b655781359062004c268262003c62565b9262004c36604051948562003c3e565b828452602092838086019160051b8301019280841162003b6557848301915b84831062004c665750505050505090565b82356001600160401b03811162003b6557869162004c8a8484809489010162004a4f565b81520192019162004c55565b9080601f8301121562003b655781359062004cb18262003c62565b9262004cc1604051948562003c3e565b828452602092838086019160051b8301019280841162003b6557848301915b84831062004cf15750505050505090565b82356001600160401b03811162003b6557869162004d158484809489010162004ab5565b81520192019162004ce0565b9190826040918161056052806105a052031262003b655760408051929083016001600160401b0381118482101762003b9b5760405262004d62839162003b6a565b83526105605160208101356106408190526001600160401b03811162003b65576105a051910190601f8201121562003b6557359162004da18362003c62565b62004db0604051918262003c3e565b83815260208101610500526105a0516106405161056051019060208660051b8301011162003b6557602090959392949501915b61064051610560510160208760051b82010184101562005917578335906001600160401b03821162003b65578181016106a0526060601f198383016105a05103011262003b65576040516105208190529160608301906001600160401b03821184831017620051715762004e5f92602092604052010162003b6a565b905260406106a0510135602281101562003b655761052051602001526106a05160608101356106808190526001600160401b031062003b65576105a051610120606083013583018203601f19011262003b65576040516106008190526001600160401b036101208201908111908211176200517157610120016040526001600160401b0360608301358301602001351162003b655762004f0f916060810135016020818101359091010162004a4f565b6106005152610680516106a051016040810135906001600160401b03821162003b6557602062004f46926105a05192010162004ab5565b6106005160200152610680516106a051016001600160401b0360608201351162003b65576105a05162004f829160608101350160200162004b80565b6106005160400152610680516106a051016080810135906001600160401b03821162003b6557602062004fbc926105a05192010162003c88565b6106005160600152610680516106a05101936001600160401b0360a08601351162003b65576105a051603f60a0870135870101121562003b65576200500b602060a08701358701013562003c62565b956200501b604051978862003c3e565b60a0860135808701602090810135808a526105a051610680516106a051938c01989493019092019160059190911b82016040011162003b6557604001945b610680516106a0510160a08901359081019089016020013560051b810160400187101562005186578635906001600160401b03821162003b655701906105a0519060e09182603f19858303011262003b6557604051908382016001600160401b0381118382101762005171576040908152850135906001600160401b03821162003b65576040620050ed9287010162004a4f565b8152606084013560208201526080840135604082015260a0840135606082015260c0926200511d84860162003c7a565b6080830152840135926001600160401b03841162003b65576200516161010060209662005155889760406105a0519184010162004b25565b60a08601520162003c7a565b9082015281520195019462005059565b60246000634e487b7160e01b81526041600452fd5b5050949793509450946080610600510152610680516106a0510160c08101356105e05260018060401b0360c08201351162003b65576105a0519060c08101350190603f8201121562003b6557620051ea6020620051f8920135806105c05262003c62565b604051806105405262003c3e565b610540516105c051905260206105405101610660526105a0516105c05160051b9060406105e051610680516106a0510101928301011162003b65576040016106c05292939092905b6105c05160051b6105e051610680516106a05101019060406106c05191830101811015620057865780356105808190526001600160401b031062003b6557610100603f19823584016105a05103011262003b6557604051610620819052916101008301916001600160401b03831184841017620051715760409283523501013590600682101562003b6557526060610580516105e051610680516106a05101010101356020610620510152610580516105e051610680516106a0510101019460018060401b0360808701351162003b65576105a051605f6080880135880101121562003b65576200534d6200533f604060808901358901013562003c62565b604051806106e05262003c3e565b6106e080516080880135808901604001359182905291516105a051610580516105e051610680516106a0516020959095019a96940101019091019160051b82016060011162003b6557606001945b610580516105e051610680516106a05101010160808901359081019089016040013560051b81016060018710156200566b578635906001600160401b03821162003b655701605f1960c081836105a05103011262003b655760405191620054028362003bb1565b606081013583526080810135600581101562003b6557602084015260a0810135600481101562003b6557604084015260c0810135603d81101562003b6557606084015260e08101356001600160401b03811162003b65576105a0516200546d91830160600162004a4f565b6080840152610100810135916001600160401b03831162003b655760c0908383016105a05103011262003b655760405191620054a98362003bb1565b818101606001356001600160401b03811162003b65576105a051620054d5918484010160600162004a4f565b8352818101608001356001600160401b03811162003b65576105a05162005503918484010160600162004ab5565b602084015281810160a001356001600160401b03811162003b65576105a05162005534918484010160600162004b80565b604084015281810160c001356001600160401b03811162003b65576105a05162005565918484010160600162004c0b565b60608401526001600160401b0382820160e001351162003b65576105a0516200559a9083830160e08101350160600162004c96565b60808401528181016101000135906001600160401b03821162003b65576105a05192010190607f8201121562003b6557606081013590620055db8262003c62565b91620055eb604051938462003c3e565b808352602083019160806105a0519260051b82010191821162003b655760808101925b82841062005635575050505060a0808301919091528201528152602095860195016200539b565b83356001600160401b03811162003b65576020916200565f839260806105a0519187010162004b80565b8152019301926200560e565b5050935093919094506106e051604061062051015260a0610580516105e051610680516106a05101010101356060610620510152610580516105e051610680516106a05101010160018060401b0360c08201351162003b65576105a051620056dc9160c08101350160400162004b25565b608061062051015260e06200570581610580516105e051610680516106a0510101010162003c7a565b60a06106205101526200572e610100610580516105e051610680516106a0510101010162003c7a565b60c061062051015262005757610120610580516105e051610680516106a0510101010162003c7a565b90610620510152610620516106605152602061066051016106605260206106c051016106c05290929362005240565b5050610540516106005160a00152610680516106a05193969495929301906001600160401b0360e08301351162003b65576105a0519560e0830135830196603f8801121562003b6557620057de602088013562003c62565b94620057ee604051968762003c3e565b6020888101358088526105a051610680516106a051938a0198930160e0880135019160051b82016040011162003b6557604001955b604060208b013560051b60e0880135610680516106a05101010101871015620058625760058735101562003b6557863581526020968701960162005823565b509592989450959250955060c0610600510152610680516106a051019061010091828101359060018060401b03821162003b65576020620058aa926105a05192010162004c0b565b6106005160e00152610680516106a05101916101208301356001600160401b03811162003b65576105a051602094620058e69201850162004c96565b9061060051015261060051604061052051015261052051610500515281610500510161050052019193949262004de3565b50945091602091500152565b90620041d0604560405180947f496e76616c69642070726f6772616d20616464726573732e204d73672e73656e60208301526403232b91d160dd1b604083015262005978815180926020868601910162003d6d565b810103602581018552018362003c3e565b90620041d06040805180947f2c20616e642070726f6772616d206f70657261746f7220616464726573733a206020830152620059cf815180926020868601910162003d6d565b810103602081018552018362003c3e565b6020620041d091939293604051948162005a04879351809286808701910162003d6d565b820162005a1a8251809386808501910162003d6d565b0103808552018362003c3e565b1562005a305750565b60405162461bcd60e51b81526020600482015290819062005a5690602483019062003d92565b0390fd5b6000198114620032295760010190565b80511562005a785760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101562005a785760400190565b80516002101562005a785760600190565b805182101562005a785760209160051b010190565b9062005ad18262003c62565b60409062005ae28251918262003c3e565b838152809362005af5601f199162003c62565b019160005b83811062005b085750505050565b602090825162005b188162003bcd565b6000815282600081830152606080868401526000818401526080830152600060a0830152600060c0830152600060e083015282860101520162005afa565b81811062005b62575050565b6000815560010162005b56565b8054600082558062005b7f575050565b620041d09160005260206000209081019062005b56565b90600160401b811162003b9b5781549080835581811062005bb657505050565b620041d0926000526020600020918201910162005b56565b600160401b811162003b9b576202711b9081549080835581811062005bb657505050565b600160401b811162003b9b57620138889081549080835581811062005bb657505050565b62005c22815462004249565b908162005c2d575050565b81601f6000931160011462005c40575055565b8183526020832062005c5e91601f0160051c81019060010162005b56565b8160208120915555565b805490600081558162005c79575050565b6000526020600020908101905b81811062005c92575050565b8062005ca060019262005c16565b0162005c86565b90600160401b811162003b9b5781549181815582821062005cc757505050565b600052602060002091820191015b81811062005ce1575050565b8062005cef60019262005c16565b0162005cd5565b805490600081558162005d07575050565b6000526020600020908101905b81811062005d20575050565b8062005d2e60019262005b6f565b0162005d14565b90600160401b811162003b9b5781549181815582821062005d5557505050565b600052602060002091820191015b81811062005d6f575050565b8062005d7d60019262005b6f565b0162005d63565b805490600081558162005d95575050565b6000526020600020908101905b81811062005dae575050565b8062005dbc60019262005c68565b0162005da2565b90600160401b811162003b9b5781549181815582821062005de357505050565b600052602060002091820191015b81811062005dfd575050565b8062005e0b60019262005c68565b0162005df1565b805460008083558162005e2457505050565b600992828402928484040362005ec157815260208120918201915b82811062005e4d5750505050565b808285925582600182015562005e666002820162005b6f565b62005e746003820162005b6f565b62005e826004820162005b6f565b62005e906005820162005c68565b62005e9e6006820162005cf6565b62005eac6007820162005cf6565b62005eba6008820162005d84565b0162005e3f565b634e487b7160e01b82526011600452602482fd5b600160401b821162003b9b5780549082815581831062005ef457505050565b600992828402928484040362003229578084029084820403620032295760009182526020822092830192015b82811062005f2e5750505050565b808285925582600182015562005f476002820162005b6f565b62005f556003820162005b6f565b62005f636004820162005b6f565b62005f716005820162005c68565b62005f7f6006820162005cf6565b62005f8d6007820162005cf6565b62005f9b6008820162005d84565b0162005f20565b51600681101562003d035790565b90600681101562003d035760ff80198354169116179055565b9062005fd58162003db9565b60ff80198354169116179055565b9062005fef8162003cf8565b61ff0082549160081b169061ff001916179055565b90603d81101562003d035762ff000082549160101b169062ff00001916179055565b9190601f81116200603657505050565b620041d0926000526020600020906020601f840160051c8301931062006065575b601f0160051c019062005b56565b909150819062006057565b9060ff801983541691151516179055565b9061ff00825491151560081b169061ff001916179055565b9062ff0000825491151560101b169062ff00001916179055565b8151600681101562003d0357620060cb908262005fb0565b602082015160018201556002810160408301516020815191620060ef838562005ed5565b019160005260206000206000925b828410620062375750505050606082015160038201556080820151805160048301916001600160401b03821162003b9b5762006146826200613f855462004249565b8562006026565b602090601f8311600114620061bf579282600593620041d097969360e096600092620061b3575b50508160011b916000199060031b1c19161790555b01916200619660a082015115158462006070565b620061a860c082015115158462006081565b015115159062006099565b0151905038806200616d565b90601f198316918460005260206000209260005b8181106200621e575093620041d097969360e09693600193836005981062006204575b505050811b01905562006182565b015160001960f88460031b161c19169055388080620061f6565b92936020600181928786015181550195019301620061d3565b805180518355600183016200625c6020830151620062558162003db9565b8262005fc9565b620062776040830151620062708162003cf8565b8262005fe3565b6060820151603d81101562003d0357620062919162006004565b608081015180519060028501906001600160401b03831162003b9b57602090620062bc848462005b96565b0190600052602060002060005b83811062006762575050505060a0015180518051906001600160401b03821162003b9b576020600386019162006300848462005b96565b0190600052602060002060005b8381106200674d575050505060208101518051906001600160401b03821162003b9b576020600486019162006343848462005b96565b0190600052602060002060005b8381106200672f5750505050600583016040820151602081519162006376838562005ca7565b019160005260206000206000925b8284106200663e57505050506006830160608201516020815191620063aa838562005d35565b019160005260206000206000925b828410620065da57505050506007830160808201516020815191620063de838562005d35565b019160005260206000206000925b8284106200656d575050505060a060088401910151602081519162006412838562005dc3565b01916000526020600020916000905b8282106200644157505050506009602060019201920193019290620060fd565b8051602081519162006454838862005ca7565b0190856000526020600020916000905b8282106200648357505050506001602081920194019101909262006421565b80518051906001600160401b03821162003b9b57620064a882620013e3885462004249565b602090601f8311600114620064f8579282600194936020938695600092620064ec575b5050600019600383901b1c191690841b1787555b0194019101909262006464565b015190503880620064cb565b908660005260206000209160005b601f198516811062006554575083602093600196938796938794601f198116106200653a575b505050811b018755620064df565b015160001960f88460031b161c191690553880806200652c565b9192602060018192868501518155019401920162006506565b80518051906001600160401b03821162003b9b5760209062006590838662005b96565b0183600052602060002060005b838110620065bc575050505060016020819201920193019290620063ec565b82516001600160a01b0316818301556020909201916001016200659d565b80518051906001600160401b03821162003b9b57602090620065fd838662005b96565b0183600052602060002060005b83811062006629575050505060016020819201920193019290620063b8565b6001906020845194019381840155016200660a565b80518051906001600160401b03821162003b9b576200666a8262006663865462004249565b8662006026565b602090601f8311600114620066ba579282600194936020938695600092620066ae575b5050600019600383901b1c191690841b1785555b0192019301929062006384565b0151905038806200668d565b908460005260206000209160005b601f198516811062006716575083602093600196938796938794601f19811610620066fc575b505050811b018555620066a1565b015160001960f88460031b161c19169055388080620066ee565b91926020600181928685015181550194019201620066c8565b82516001600160a01b03168183015560209092019160010162006350565b6001906020845194019381840155016200630d565b600190602084519401938184015501620062c9565b90620067838262003c62565b62006792604051918262003c3e565b8281528092620067a5601f199162003c62565b0190602036910137565b62013883805482101562005a78576000526006602060002091020190600090565b62027116805482101562005a78576000526006602060002091020190600090565b62013882805482101562005a78576000526006602060002091020190600090565b62027115805482101562005a78576000526006602060002091020190600090565b620138828054600160401b81101562003b9b576200685791600182019055620067f1565b9190916200686a57620041d091620060b3565b634e487b7160e01b600052600060045260246000fd5b620138838054600160401b81101562003b9b576200685791600182019055620067af565b620271168054600160401b81101562003b9b576200685791600182019055620067d0565b620271158054600160401b81101562003b9b57620068579160018201905562006812565b15620068f457565b60405162461bcd60e51b815260206004820152603760248201527f73756d4469766964656e64576569676874466f72546f6b656e436c6173733a206044820152766469766964656e64576569676874206f766572666c6f7760481b6064820152608490fd5b61271081101562005a78576200350581620017676002620069809460031b01549162006b44565b90565b81156200698e570490565b634e487b7160e01b600052601260045260246000fd5b908115620069d1576064620069bd818402938462006983565b03620069c95760019190565b600091508190565b60019150600090565b91908215620069f257620069bd818402938462006983565b5060019150600090565b62013886805482101562005a785760005260206000200190600090565b62013881805482101562005a785760005260206000200190600090565b6202711d805482101562005a785760005260206000200190600090565b6201388a805482101562005a785760005260206000200190600090565b62027119805482101562005a785760005260206000200190600090565b6202711b805482101562005a785760005260206000200190600090565b62013888805482101562005a785760005260206000200190600090565b805482101562005a785760005260206000200190600090565b1562006ae857565b60405162461bcd60e51b815260206004820152602e60248201527f746f74616c546f6b656e73506572546f6b656e436c6173733a20746f74616c5460448201526d6f6b656e73206f766572666c6f7760901b6064820152608490fd5b612710811015908162005a7857600390811b906004928383019182549260009582879601935b85871062006b7c575050505050505090565b97969091929394959762006bde5762006bd28862006bca62006ba46200046b9a9b8762006ac7565b905490881b1c6001600160a01b0316600090815260208990526040812054909462006c06565b999062006ae0565b95949392919062006b6a565b603282634e487b7160e01b6000525260246000fd5b9060018201918210620069c95760019190565b91908201918210620069c95760019190565b6201388b5462006c2b6200353b62012d29565b91905062006c3862012ded565b5060009081925b81841062006c5a575b62006c5593500462006c94565b905090565b9160ff60078560031b0154161562006c8d5783620035d862006c8692620035d16200046b969762006959565b9262006c3f565b9162006c48565b90801562006cac5762006ca79162006983565b600191565b5050600090600090565b6201388180549190600160401b83101562003b9b578262006ce1916001620041d09501905562006a19565b9080546001600160a01b0360039390931b83811b80199092169390941690931b909216179055565b6040519062006d188262003bea565b60188252772a343290383937b3b930b69034b99032bc32b1baba32b21760411b6020830152565b600091825b6020808401908151805187101562006ed5578162006d678862006d6f9362005ab0565b5101620074c6565b6022928382101562003d0357601a91820362006e2d578762006d92915162005ab0565b5192828401519081101562003d03570362006deb57509362006ddc62006de49262006dd462006dcd60e060406200046b9a0151015162005a6a565b5162005a6a565b519062006c06565b9590620074d4565b9262006d44565b6064906040519062461bcd60e51b82526004820152601b60248201527a2a34329037b831b7b2329034b9903737ba102820acafa1a0a9a41760291b6044820152fd5b9291905062006e468162006d6789869a979a5162005ab0565b8281101562003d035760140362006e7f5750509062006ddc6200046b95620035d162006e788462006de4965162005ab0565b5162007521565b62006e919062006d6785855162005ab0565b9081101562003d035760151462006eaf575b5062006de49062005a5a565b9062006ddc62006ece95620035d162006e788462006de4965162005ab0565b9062006ea3565b50505090925080341060001462006f4b5760405162461bcd60e51b815260206004820152603760248201527f546865207061796d656e74206973206e6f7420656e6f7567682e205468652074604482015276037ba30b6103830bcb6b2b73a1039b437bab6321031329604d1b6064820152608490fd5b80341162007321575b5062027129805460ff811662006f6a8162003cf8565b6001810362006fa0575050508062006f9062006f8a62006f9693620075c8565b620075dd565b62007667565b6200698062006d09565b62006fab8162003cf8565b60028114808062007313575b156200709c575050505062006fcc81620075c8565b156200705d5762006fdd81620075c8565b15620070215762006fee9062007667565b60405162006ffc8162003bea565b60158152742a3432903b37ba329034b99032bc32b1baba32b21760591b602082015290565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c696420766f74652070726f6772616d60601b6044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2103b37ba34b73390383937b3b930b69760491b6044820152606490fd5b620070a78262003cf8565b6003821491828062007305575b1562007192575050505050620070ca81620075c8565b1562007142578062006f9062006f8a620070e493620075c8565b604051620070f28162003c22565b603a81527f5468652070656e64696e672070726f6772616d2069732065786563757465642060208201527930b33a32b9103b37ba34b7339030b7321030b8383937bb30b61760311b604082015290565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c696420657865637574696e672070656e64696e672070726f677261604482015261369760f11b6064820152608490fd5b6200719d8162003cf8565b8180620072f6575b80620072e8575b15620071d657505050509062006f9691600360ff1982541617905562006f9062006f8a82620075c8565b620071e18162003cf8565b8215620072d3575b505080620072c4575b6200722b57505050604051620072088162003bea565b6013815272283937b3b930b6903a32b936b4b730ba32b21760691b602082015290565b60ff191660011790556200723f81620075c8565b1562007259578062006f9062006f8a62006f9693620075c8565b60405162461bcd60e51b815260206004820152603e60248201527f5b4572726f72203030335d5468652070726f6772616d206973206e6f7420612060448201527f76616c696420657865637574652070656e64696e672070726f6772616d2e00006064820152608490fd5b506202712854421015620071f2565b620072e091925062003cf8565b3880620071e9565b5062027128544210620071ac565b506202712754421015620071a5565b5062027128544210620070b4565b506202712754421062006fb7565b60018060a01b0390818351166000526201388590816020526040600020541562007418575b620073529034620074ac565b9015620073d4576200737590838551166000528260205260406000205462006c06565b92901562007393578351166000526020526040600020553862006f54565b60405162461bcd60e51b81526020600482015260196024820152782a3432903732bb903130b630b731b29037bb32b9333637bb9760391b6044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527b2a3432903830bcb6b2b73a103932ba3ab9371037bb32b9333637bb9760211b6044820152606490fd5b6000908162013886928354915b82811062007471575b50156200743f575b50905062007346565b85518516600160401b82101562003b9b5762006ce182620073529560016200746a95019055620069fc565b3862007436565b866200747d82620069fc565b919054818b51169260031b1c1614620074a1576200749b9062005a5a565b62007425565b50506001386200742e565b9190828111620074bd576001920390565b50600091508190565b51602281101562003d035790565b15620074dc57565b60405162461bcd60e51b815260206004820152601f60248201527f54686520746f74616c207061796d656e7420697320746f6f206c617267652e006044820152606490fd5b6000805b604083019060e06200753b818451015162005a8e565b5151841015620075c057620075608462007559838651015162005a8e565b5162005ab0565b51925101519283516002101562005a7857620075af620075a9620075b793620075a1604096620075998660606200046b9b015162005ab0565b5190620069da565b9290620074d4565b62006c06565b9490620074d4565b91905062007525565b509250505090565b602001515115620075d857600190565b600090565b15620075e557565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c69642070726f6772616d60881b6044820152606490fd5b60809060208152602a60208201527f5468652070726f6772616d2069732064656e6965642062792074686520706c7560408201526967696e2073797374656d60b01b60608201520190565b6200767281620109d7565b516201045157600681101562003d035760038114620103f85780620076cf5760405162461bcd60e51b8152602060048201526016602482015275151a19481c1c9bd9dc985b481a5cc81a5b9d985b1a5960521b6044820152606490fd5b6004810362009b6b5750906000905b6020830151805183101562009b655782620076f99162005ab0565b516020810180516022908181101562003d03571562009b225781518181101562003d0357600103620079485750506040809101906200773e6101008351015162005a6a565b51926200776060e062007755818651015162005a6a565b519451015162005a8e565b519562007771855185511462011c60565b62007780855188511462011cc6565b60005b8551811015620078c65762007799818662005ab0565b51612710908181101562005a7857600160ff6007620077c19360031b01541615151462011d28565b620077cd828a62005ab0565b51620077da838862005ab0565b51908282101562005a78576006620077f89260031b01549062006c06565b9062007805848962005ab0565b51918383101562005a78576006620078229360031b015562011d80565b6200782e828a62005ab0565b51906200783c838862005ab0565b518181101562005a78576001600160a01b0393926200787c916003908662007865878e62005ab0565b5116600052811b0160205287600020549062006c06565b62007888848a62005ab0565b519283101562005a785760036200046b93620078c096620078aa878e62005ab0565b5116600052811b01602052876000205562011ddf565b62007783565b509392620078e391929650620078dc9062012c2b565b9262012b0f565b945192620078f18462003c06565b60008452600036813760005b83518110156200792b57806200046b6200791c62007925938762005ab0565b51878a620126f5565b620078fd565b50945092602092506200793f915062005a5a565b919050620076de565b819592939495518181101562003d035760020362007cdc5750506040809201908151938385015191620079a06200798460e08098015162005a6a565b519662007995818751015162005a8e565b519551015162005a9f565b5194835187510362007c8957835185510362007c3557835186510362007bde575060005b865181101562007bc857620079da818862005ab0565b5161271081101562005a7857620079fd60ff6007809360031b0154161562011e38565b62007a09828962005ab0565b5161271081101562005a785760031b01805460ff1916600117905562007a30818562005ab0565b5162007a3d828962005ab0565b519061271082101562005a78578051906001600160401b03821162003b9b5762007a808262007a7360058660031b015462004249565b60058660031b0162006026565b602090601f831160011462007b4d57600592916000918362007b41575b50508160011b916000199060031b1c1916179160031b01555b62007ac2818662005ab0565b5162007acf828962005ab0565b5161271081101562005a785760031b6001015562007aee818762005ab0565b5162007afb828962005ab0565b5161271081101562005a785760031b6002015562007b1a818862005ab0565b519061271082101562005a78576000600662007b3b9360031b015562005a5a565b620079c4565b01519050388062007a9d565b9060058460031b0160005260206000209160005b601f198516811062007baf5750918391600193600595601f1981161062007b95575b505050811b019160031b015562007ab6565b015160001960f88460031b161c1916905538808062007b83565b9192602060018192868501518155019401920162007b61565b509591509350602092506200793f915062005a5a565b5162461bcd60e51b815260206004820152603c6024820152600080516020620133bc83398151915260448201527b1b911a5d9a59195b9915d95a59da1d081a5cc81b9bdd08195c5d585b60221b6064820152608490fd5b5162461bcd60e51b81526020600482015260396024820152600080516020620133bc8339815191526044820152781b959bdd1a5b99d41bddd95c881a5cc81b9bdd08195c5d585b603a1b6064820152608490fd5b5162461bcd60e51b81526020600482015260386024820152600080516020620133bc8339815191526044820152771b925b99195e105c9c985e481a5cc81b9bdd08195c5d585b60421b6064820152608490fd5b8195929395518181101562003d0357600303620082d3575050604084019062007d0b6101008351015162005a6a565b519362007d2260e062007755818651015162005a6a565b519362007d3786518551146200046462012e52565b62007d4a86518651146200046462012e52565b60005b865181101562007db35762007d63818662005ab0565b519061271082101562005a7857600362007dad9260018060a01b038b5116600052811b016020526200046b60406000205462007da0838a62005ab0565b5111156200046462012f56565b62007d4d565b50909493919460005b855181101562007ee75762007dd2818662005ab0565b51906127108083101562005a7857600360018060a01b0393848c5116600052811b0160205262007e1560406000205462007e0d848962005ab0565b5190620074ac565b9062007e22848a62005ab0565b51918383101562005a7857600362007e5193878f5116600052811b016020526040600020556200046462012f56565b62007e5d828862005ab0565b518181101562005a78576003908462007e77858c62005ab0565b5116600052811b0160205262007e9860406000205462006dd4848962005ab0565b62007ea4848a62005ab0565b519283101562005a785760036200046b9362007ee19662007ec6878e62005ab0565b5116600052811b016020526040600020556200046462012fbb565b62007dbc565b5091509162007efe62007f05919695949662012c2b565b9562012b0f565b926040519462007f158662003bea565b6001865260203681880137516001600160a01b031662007f358662005a6a565b526000905b8651821015620082be5762007f50828862005ab0565b516101005262007f61855162006777565b9660009462007f71885162006777565b610260528594865b885181101562008048578a8962007fa96001600160a01b0362007f9d858462005ab0565b511661010051620129f8565b158062008002575b62007fca575b505062007fc49062005a5a565b62007f79565b9862007ff79162000b1382859c62007fee62007fc49760018060a01b039262005ab0565b51169262005ab0565b9790508a8962007fb7565b50505061271061010051101562005a78576001600160a01b0362008027828b62005ab0565b5116600052600361010051811b016020528a89604060002054151562007fb1565b509098949897969291939760005b8851811015620080ea5761271061010051101562005a78576001600160a01b0362008082828b62005ab0565b5116600052600361010051811b0160205260406000205415620080b1575b620080ab9062005a5a565b62008056565b99620080ab90620080e1906001600160a01b03620080d08e8d62005ab0565b511662000b13826102605162005ab0565b9a9050620080a0565b50985096949392919561010051612710811015806102005262005a785760031b6004015496620081256200811f878a620118f8565b62006777565b996000998a60c0525b6102005162005a785760c0518a811015620081df57620081626200817f9160006102005260046101005160031b0162006ac7565b90546102605160039290921b1c6001600160a01b03169062012aba565b156200819c575b6200819360c05162005a5a565b60c0526200812e565b99808c62000b13620081d893620081bf60c05160046101005160031b0162006ac7565b905460039190911b1c6001600160a01b03169262005ab0565b9962008186565b509a939794969299919850946000915b8383106200828457505050506102005162005a78578051906001600160401b03821162003b9b576020906200822e8360046101005160031b0162005b96565b0160046101005160031b01600052602060002060005b8381106200826657505050506200825b9062005a5a565b909295919562007f3a565b82516001600160a01b03168183015560209092019160010162008244565b620082b790620082b0906001600160a01b03620082a2868662005ab0565b511662000b13828962005ab0565b9262005a5a565b91620081ef565b919450506200793f9194506020925062005a5a565b819593949295518181101562003d03576004036200855c5750506040809201610100946200831562008309878451015162005a6a565b51968351015162005a8e565b51946200832c60e062007755818651015162005a6a565b51936200834188518851146200046462012e52565b6200835488518551146200046462012e52565b6200836788518651146200046462012e52565b60005b8851811015620083cf5762008380818662005ab0565b519061271082101562005a7857620083c9916003906001600160a01b03620083a9848e62005ab0565b5116600052811b016020526200046b886000205462007da0838a62005ab0565b6200836a565b50909691959294939660005b83518110156200851057620083f1818862005ab0565b5190612710918281101562005a78576001600160a01b03906003908262008419858a62005ab0565b5116600052811b016020526200843a8b62007e0d848b600020549262005ab0565b9062008447848c62005ab0565b51918583101562005a7857600362008480938562008466888d62005ab0565b5116600052811b016020528a600020556200046462012f56565b6200848c828a62005ab0565b518381101562005a785760039082620084a6858b62005ab0565b5116600052811b01602052620084c78b62006dd4848b600020549262005ab0565b919050620084d6838b62005ab0565b519384101562005a78576200850a93600391620084f4858b62005ab0565b5116600052811b01602052876000205562005a5a565b620083db565b50946200853392975062007efe919394506200852c9062012c2b565b9362012b0f565b9260005b83518110156200792b57806200046b6200791c62008556938762005ab0565b62008537565b819594939551908082101562003d03576005918203620087725750505060409182850190620085a060e062008595818551015162005a6a565b519351015162005a8e565b51928251845103620087215760005b83518110156200860757620085c5818562005ab0565b519061271082101562005a78576003620086019260018060a01b038b5116600052811b016020526200046b876000205462007da0838962005ab0565b620085af565b509092919260005b8451811015620086a25762008625818662005ab0565b51906127108083101562005a7857600360018060a01b0393848c5116600052811b016020526200865f886000205462007e0d848962005ab0565b6200866b848a62005ab0565b519283101562005a785760036200046b936200869c968e5116600052811b0160205289600020556200046462012f56565b6200860f565b50959392620086b391925062012c2b565b91805193620086c28562003bea565b6001855260203681870137516001600160a01b0316620086e28562005a6a565b525194620086f08662003c06565b60008652600036813760005b83518110156200792b57806200046b6200791c6200871b938762005ab0565b620086fc565b845162461bcd60e51b815260206004820152603560248201526000805160206201339c833981519152604482015274195b905b5bdd5b9d081a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b82969496518181101562003d0357600603620089db575050506040809201620087a16101008251015162005a6a565b5194620087b860e062008595818551015162005a6a565b519286518351036200898a5786518451036200893e5760005b87518110156200883657620087e7818562005ab0565b519061271082101562005a785762008830916003906001600160a01b0362008810848d62005ab0565b5116600052811b016020526200046b876000205462007da0838962005ab0565b620087d1565b509092919260005b8751811015620088ea5762008854818662005ab0565b516127108082101562005a78576001600160a01b039291600390846200887b858e62005ab0565b5116600052811b016020526200889b886000205462007e0d848962005ab0565b620088a7848a62005ab0565b519283101562005a785760036200046b93620088e496620088ca8f889062005ab0565b5116600052811b0160205289600020556200046462012f56565b6200883e565b509592620088ff919250620078dc9062012c2b565b9251946200890d8662003c06565b60008652600036813760005b83518110156200792b57806200046b6200791c62008938938762005ab0565b62008919565b845162461bcd60e51b815260206004820152603060248201526000805160206201343c83398151915260448201526f1b9d1cc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b845162461bcd60e51b815260206004820152603560248201526000805160206201333c8339815191526044820152741b90db185cdcd95cc81a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b8296949396518181101562003d035760070362008c4857505050604090939193019062008a0e6101008351015162005a6a565b5193604062008a2260e08551015162005a6a565b51935101519162008a3b86518551146200046462012e52565b6000915b865183101562008c33576001600160a01b0362008a5d848962005ab0565b511660005262013880928360205262008a8360ff60406000205416156200046462012f23565b62008a8f818662005ab0565b5162008a9c828862005ab0565b51906040519562008aad8762003b7f565b600187526000602088019081526040880192835260608801939093526001600160a01b0362008add858d62005ab0565b511660005260205262008b0860406000209262008afe885115158562006070565b5115158362006081565b5180519095906001600160401b03811162003b9b5762008b3b8162008b31600186015462004249565b6001860162006026565b602096601f821160011462008bb357918160609262008b9f97989960029560009262008ba7575b50508160011b916000199060031b1c19161760018501555b01519101556200046b6001600160a01b0362008b97838b62005ab0565b511662006cb6565b919062008a3f565b01519050388062008b62565b966001840160005260206000209760005b601f198416811062008c1a57508262008b9f97989960029593600193606096601f1981161062008c00575b505050811b01600185015562008b7a565b015160001960f88460031b161c1916905538808062008bef565b818301518a556001909901986020928301920162008bc4565b9550939050602092506200793f915062005a5a565b829694959651928184101562003d0357600893840362008d2c575050506101009262008c7c84604080950151015162005a6a565b519460005b865181101562007bc85762008d2690876001600160a01b038062008ca6848462005ab0565b511660005262008cfd888262008ce18662013880968760205262008cdb600160ff809760002054161515146200046462012e82565b62005ab0565b5116600052836020528960002054891c16156200046462012eea565b62008d09838b62005ab0565b5116600052602052856000208761ff001982541617905562005a5a565b62008c81565b8095939495518281101562003d035760090362008e1b5750505062008d5b610100604080950151015162005a6a565b519360005b855181101562008e065762008e0090866001600160a01b038062008d85848462005ab0565b511660005262008dd96001898362008dbb8762013880978860205262008cdb8660ff809760002054161515146200046462012e82565b5116600052846020528a600020548a1c161515146200046462012eb5565b62008de5838a62005ab0565b51166000526020528560002061ff0019815416905562005a5a565b62008d60565b5094909350602092506200793f915062005a5a565b80969593949296518281101562003d0357600f0362008f565750505060400160a09182825101519360005b855181101562007bc85760e062008e6282878751015162005ab0565b5101511562008eed5762008e8662008e7f82878751015162005ab0565b5162006833565b620138828054600019929190838101908111620032295762008ea98a91620067f1565b5001805461ff0019166101001790555491820191821162003229578762008ed462008ee793620067f1565b5001805460ff1916600117905562005a5a565b62008e46565b62008f0862008f0182878751015162005ab0565b5162006880565b620138828054600019929190838101908111620032295762008f2b8a91620067af565b5001805461ff0019166101001790555491820191821162003229578762008ed462008ee793620067af565b80518281101562003d0357600c036200907a5750505060400160a09182825101519360005b855181101562007bc85760e062008f9782878751015162005ab0565b51015115620090185762008fb462008e7f82878751015162005ab0565b620138828054600019929190838101908111620032295762008fd78a91620067f1565b5001805461ff00191661010017905554918201918211620032295787620090026200901293620067f1565b5001805460ff1916905562005a5a565b62008f7b565b6200902c62008f0182878751015162005ab0565b62013882805460001992919083810190811162003229576200904f8a91620067af565b5001805461ff00191661010017905554918201918211620032295787620090026200901293620067af565b8097969593929497518281101562003d0357600d03620091d4575050604001946060620090ac60e08851015162005a6a565b519651015191620090c187518451146201199f565b60005b8751811015620091be578080878a620090e26200915f958962005ab0565b51156200916557620091436200912a848362009115620091086200914e98889762005ab0565b5162013882541162011a28565b62008cdb8d620091316200912a858562005ab0565b51620067f1565b509060ff9889920154901c1662011a80565b500154161562011ae1565b8662008ed46200912a838c62005ab0565b620090c4565b62009143620091a684836200919162009184620091ad98889762005ab0565b5162013883541162011a28565b62008cdb8d62009131620091a6858562005ab0565b51620067af565b8662008ed4620091a6838c62005ab0565b509550939050602092506200793f915062005a5a565b8097949397518281101562003d0357600e03620092bb5750506040019160606200920360e08551015162005a6a565b5193510151956200921884518851146201199f565b60005b8451811015620091be57806200923662009242928a62005ab0565b51620092485762005a5a565b6200921b565b6200926562009258828862005ab0565b5162013882541162011b42565b620092aa876200928f6200927e6200912a858b62005ab0565b5060ff9283910154891c1662011b9b565b88620092a06200912a858b62005ab0565b5001541662011bfd565b86620090026200912a838962005ab0565b91939450915080518281101562003d03576010036200935f5750506040015190620092ef60e060c084015193015162005a6a565b51936200930483518651146200046462012e52565b60005b83518110156200934c57806200046b6200932662009346938762005ab0565b51620093328162003db9565b6200933e838a62005ab0565b519062011906565b62009307565b50935091602091506200793f9062005a5a565b80949394518281101562003d0357601a036200949e5750506200938b60e0604080930151015162005a6a565b5160038151036200945b57620093a18162005a6a565b5191620093ba620093b28362005a8e565b519262005a9f565b5191620094215750916200793f916001602094146000146200941a57620093f990620093ec6201388d91825462006c06565b9091556200046462012ded565b6200046b6201388e6200940d815462006bf3565b9091556200046462012e27565b5062005a5a565b5162461bcd60e51b8152602060048201526014602482015273496e76616c6964207061796d656e74207479706560601b6044820152606490fd5b815162461bcd60e51b815260206004820152601c60248201527b496e76616c6964206e756d626572206f6620706172616d657465727360201b6044820152606490fd5b80949394518281101562003d0357601b036200991d57505050620094d96201388b546200354d620094ce62012d29565b612710831062005a27565b5050620094e562012ded565b506000805b6127108110620098b8575b50506200950162006c18565b90620095116202712a5462006777565b9060009384905b612710821015620098ad578160031b9260ff6007850154161562009669576000976002850154156200965757889798975b62005a785760048501548810156200963d576200956a886004870162006ac7565b9054600391821b1c6001600160a01b0316600081815291870160205260409182902054919a916200959d908a90620069da565b9b90620095a962012ded565b620095b49162005a27565b60009b6002890154620095c791620069da565b90620095d262012ded565b620095dd9162005a27565b828d5262013887602052818d205490620095f79162006c06565b90918d20556200960662012ded565b620096119162005a27565b6200961d828962005ab0565b52620096299062005a5a565b97620096359062005a5a565b979862009549565b929093506200964e91965062005a5a565b90959462009518565b929093506200964e9196975062005a5a565b959392509350505b6200967c8262006777565b91600091825b82811062009817575050506201388890815492620096a56200811f8584620118f8565b9360009081905b808210620097dc57505060005b838110620097385750508351939150506001600160401b03831162003b9b57602090620096e68462005bf2565b0190600052602060002060005b8381106200971a57505050506200793f60209160006201388d5560006201388e5562005a5a565b82516001600160a01b031681830155602090920191600101620096f3565b6000805b83811062009794575b50156200975e575b620097589062005a5a565b620096b9565b9062009758906200978b906001600160a01b036200977d858762005ab0565b511662000b13828a62005ab0565b9190506200974d565b6001600160a01b0380620097a9858862005ab0565b511690620097b8838b62005ab0565b511614620097d157620097cb9062005a5a565b6200973c565b505060013862009745565b9091620082b06200981091620097f28562006aaa565b905460039190911b1c6001600160a01b031662000b13828b62005ab0565b90620096ac565b6000805b85811062009865575b50156200983d575b620098379062005a5a565b62009682565b9262009837906200985c906001600160a01b03620082a2878662005ab0565b9390506200982c565b6001600160a01b03806200987a858762005ab0565b51169062009889838a62005ab0565b511614620098a2576200989c9062005a5a565b6200981b565b505060013862009824565b935050929062009671565b8060031b9060ff60078301541615620099165762009904620075a96200046b94620098f862009910956002620098ee8762006959565b91015490620069da565b92906200046462012ded565b93906200046462012ded565b620094ea565b50620094f5565b80518281101562003d035760140362009abd575050604080910190620099496101008351015162005a6a565b51926200996060e062007755818651015162005a6a565b519562009971855185511462011c60565b62009980855188511462011cc6565b60005b855181101562009a685762009999818962005ab0565b51620099a6828762005ab0565b51612710918282101562005a78576006620099c79260031b01549062006c06565b90620099d4848962005ab0565b51918383101562005a78576006620099f19360031b015562011d80565b620099fd828a62005ab0565b519062009a0b838862005ab0565b518181101562005a78576001600160a01b03939262009a34916003908662007865878e62005ab0565b62009a40848a62005ab0565b519283101562005a785760036200046b9362009a6296620078aa878e62005ab0565b62009983565b50939262009a7e91929650620078dc9062012c2b565b94519262009a8c8462003c06565b60008452600036813760005b83518110156200792b57806200046b6200791c62009ab7938762005ab0565b62009a98565b939293519081101562003d035760150362009ae4576020916200046b6200793f9262011e84565b60405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206f7065726174696f6e207479706560501b6044820152606490fd5b60405162461bcd60e51b815260206004820152601b60248201527a13dc195c985d1a5bdb881d1e5c19481a5cc81d5b9919599a5b9959602a1b6044820152606490fd5b50915050565b6002810362009b8f5760405162461bcd60e51b81528062005a56600482016200761c565b60011462009b9a5750565b9062009baa620138835462005ac5565b805190600160401b821162003b9b5762027116548262027116558083106201037c575b506020016202711660005260206000206000915b8383106201035b575050505060005b620138835481101562009c2a57806200046b62009c1162009c2493620067af565b5062009c1d83620067d0565b906201090c565b62009bf0565b5062009c3a620138825462005ac5565b805190600160401b821162003b9b576202711554826202711555808310620102be575b506020016202711560005260206000206000915b8383106201029d575050505060005b620138825481101562009cb357806200046b62009ca162009cad93620067f1565b5062009c1d8362006812565b62009c80565b5060005b6127108110158062009e7f57600160ff6201389a8460031b01541615151462009ced575b5062009ce79062005a5a565b62009cb7565b916000835b62005a7857620138978360031b015481101562009d5f5762009d569293506000928162009d298593620138978860031b0162006ac7565b9054600391821b1c6001600160a01b031660009081529087901b6201389601602052604081205562005a5a565b90939262009cf2565b50916040519062009d708262003c06565b6000825262005a78578051906001600160401b03821162003b9b5760209062009da283620138978660031b0162005b96565b01620138978360031b01600052602060002060005b83811062009e615750505050600381901b6201389a8101805460ff1916905560006201389382018190556201389482018190556201389582015562013898015462009ce7919062009e089062004249565b601f9081811162009e35575b50506000620138988260031b01556000620138998260031b01559062009cdb565b62009e5991620138988460031b016000526020600020910160051c81019062005b56565b388062009e14565b82516001600160a01b03168183015560209092019160010162009db7565b505060005b612710811062010208575060005b620138815481101562009eef578062009eaf62009ee99262006a19565b60018060a01b0391549060031b1c1660005262027113602052600060026040822082815562009ee16001820162005c16565b015562005a5a565b62009e92565b5062009eff620138815462006777565b8051906001600160401b03821162003b9b57600160401b821162003b9b576020906202711454836202711455808410620101e5575b500162027114600052602060002060005b838110620101c7575050505060005b620138815481101562009fc95762009f6c8162006a19565b9054620271145460039290921b1c6001600160a01b0316919081101562005a785762027114600052600080516020620133dc833981519152810180546001600160a01b03191690921790915562009fc39062005a5a565b62009f54565b509060005b62013881548110156200a08b578062009feb6200a0409262006a19565b9060018060a01b03918291549060031b1c1660005262013880602052604080600020916200a0198462006a19565b90549060031b1c1660005262027113602052600020908082036200a046575b505062005a5a565b62009fce565b600280916200a06c60ff6200a05f818454168762006070565b825460081c168562006081565b6200a07e600182016001860162010592565b015491015538806200a038565b5060005b6202711d548110156200a0df57806200a0ac6200a0d99262006a36565b60018060a01b0391549060031b1c166000526202711c6020526200046b6040600020606481019062005b56565b6200a08f565b506200a0ef6201388a5462006777565b8051906001600160401b03821162003b9b57600160401b821162003b9b576020906202711d54836202711d55808410620101a4575b50016202711d600052602060002060005b83811062010186575050505060005b6201388a548110156200a18857806200046b6200a1656200a1829362006a53565b905460039190911b1c6001600160a01b031662006ce18362006a36565b6200a144565b5060005b6201388a548110156200a21657806200a1a96200a1fd9262006a53565b9060018060a01b03918291549060031b1c1660005262013889602052604080600020916200a1d78462006a53565b90549060031b1c166000526202711c602052600020908082036200a20357505062005a5a565b6200a18c565b6200a20e91620109a0565b38806200a038565b506201388b546202711e556201388c546202711f556201388d5462027120556201388e5462027121556201388f546001600160401b03811162003b9b57600160401b811162003b9b57620271225481620271225580821062010157575b506202712260009081527f846ab89c81ea9339188216a1864da1a19ebe28d411cbec99efa70ca6d389710d80546000805160206201335c83398151915291905b848410620101355750505050506201389054600160401b811162003b9b576202712354816202712355808210620100f2575b506202712360009081526000805160206201337c8339815191527f7f73709277f72a9bc7b284375e83603a53394744e9fa86da811e86c2aa78e05e5b838310620100d457505062013891549150506001600160401b03811162003b9b57600160401b811162003b9b576202712454816202712455808210620100a5575b506202712460009081527f8f332db73d3937798ea82422156d059730b0b3058606439b57b7ae623e9453668054600080516020620133fc83398151915291905b8484106201008357505050505060ff6201389254161515620271259060ff8019835416911617905560005b62027119548110156200a41957806200a3ea6200a4139262006a70565b905460039190911b1c6001600160a01b0316600090815262027118602052604081205562005a5a565b6200a3cd565b506200a429620138865462006777565b8051906001600160401b03821162003b9b57600160401b821162003b9b57602090620271195483620271195580841062010060575b500162027119600052602060002060005b83811062010042575050505060005b62013886548110156200a4c257806200046b6200a49f6200a4bc93620069fc565b905460039190911b1c6001600160a01b031662006ce18362006a70565b6200a47e565b5060005b62013886548110156200a53457806200a4e36200a52e92620069fc565b9060018060a01b03918291549060031b1c166000526201388560205260408060002054916200a51284620069fc565b90549060031b1c16600052620271186020526000205562005a5a565b6200a4c6565b5060005b6202711b548110156200a58457806200a5556200a57e9262006a8d565b905460039190911b1c6001600160a01b031660009081526202711a602052604081205562005a5a565b6200a538565b506200a594620138885462006777565b8051906001600160401b03821162003b9b576020906200a5b48362005bce565b016202711b600052602060002060005b83811062010024575050505060005b62013888548110156200a61757806200046b6200a5f46200a6119362006aaa565b905460039190911b1c6001600160a01b031662006ce18362006a8d565b6200a5d3565b5060005b62013888548110156200a68957806200a6386200a6839262006aaa565b9060018060a01b03918291549060031b1c166000526201388760205260408060002054916200a6678462006aaa565b90549060031b1c166000526202711a6020526000205562005a5a565b6200a61b565b50906000905b602083015180518310156200e52e57826200a6aa9162005ab0565b516020810151602281101562003d03571562009b22576020810151602281101562003d03576001036200ac8957604001906200a6ec6101008351015162005a6a565b51936200a70360e062007755818651015162005a6a565b51916200a714865185511462011c60565b6200a723865184511462011cc6565b60005b86518110156200a886576200a73c818662005ab0565b5161271081101562005a7857600160ff6201389a6200a7649360031b01541615151462011d28565b6200a770818562005ab0565b516200a77d828762005ab0565b519061271082101562005a7857620138996200a79f9260031b01549062006c06565b906200a7ac838862005ab0565b519161271083101562005a7857620138996200a7cd9360031b015562011d80565b6200a7d9818562005ab0565b516200a7e6828762005ab0565b519061271082101562005a78576200a82a9162013896906001600160a01b036200a811868d62005ab0565b511660005260031b016020526040600020549062006c06565b91906200a838828862005ab0565b519061271082101562005a78576200a880936200046b9262013896906001600160a01b036200a868878f62005ab0565b511660005260031b0160205260406000205562011ddf565b6200a726565b50926200a89d9192506200852c9095949562012c2b565b916040516200a8ac8162003c06565b6000815260003681376000945b80518610156200ac6f576200a8cf868262005ab0565b51610600526200a8e0855162006777565b966000946200a8f0845162006777565b6103805260009460005b88518110156200a9c3578a896200a92a6001600160a01b036200a91e858462005ab0565b51166106005162012a61565b15806200a97a575b6200a94b575b50506200a9459062005a5a565b6200a8fa565b986200a96f9162000b1382859c62007fee6200a9459760018060a01b039262005ab0565b9790508a896200a938565b50505061271061060051101562005a78576001600160a01b036200a99f828b62005ab0565b5116600052620138966106005160031b016020528a8960406000205415156200a932565b50909895979498969291939660005b88518110156200aa625761271061060051101562005a78576001600160a01b03806200a9ff838c62005ab0565b5116600052620138966106005160031b01602052604060002054156200aa32575b506200aa2c9062005a5a565b6200a9d2565b819b6200aa5a916200aa496200aa2c948d62005ab0565b511662000b13826103805162005ab0565b9a906200aa20565b5098509695929190939661060051612710811015806101205262005a785760031b620138970154986200aa9a6200811f898c620118f8565b610580526000610540526000610400525b6101205162005a7857610400518a8110156200ab76576200aae26200ab0291600061012052620138976106005160031b0162006ac7565b9054610380516001600160a01b03939260031b9190911c83169062012aba565b156200ab22575b506200ab186104005162005a5a565b610400526200aaab565b6000610120526200ab4261040051620138976106005160031b0162006ac7565b90549060031b1c166200ab5c610540516105805162005ab0565b526200ab6b6105405162005a5a565b61054052386200ab09565b50979294959093985095909560005b8281106200ac23575050506101205162005a785761058051516001600160401b03811162003b9b576200abc481620138976106005160031b0162005b96565b60206105805101620138976106005160031b01600052602060002060005b8381106200ac0557505050506200abf99062005a5a565b9492959091956200a8b9565b82516001600160a01b0316818301556020909201916001016200abe2565b6200ac69906001600160a01b036200ac3c828562005ab0565b51166200ac50610540516105805162005ab0565b526200ac5f6105405162005a5a565b6105405262005a5a565b6200ab85565b5050939092506200ac81915062005a5a565b90916200a68f565b906020829493940151602281101562003d03576002036200af165760408092019081519383850151916200acc66200798460e08098015162005a6a565b5194835187510362007c8957835185510362007c3557835186510362007bde575060005b86518110156200af03576200ad00818862005ab0565b5161271081101562005a785760ff6201389a6200ad249260031b0154161562011e38565b6200ad30818862005ab0565b5161271081101562005a785760031b6201389a01805460ff191660011790556200ad5b818562005ab0565b516200ad68828962005ab0565b519061271082101562005a78578051906001600160401b03821162003b9b576200adaf826200ada0620138988660031b015462004249565b620138988660031b0162006026565b602090601f83116001146200ae8457620138989291600091836200ae78575b50508160011b916000199060031b1c1916179160031b01555b6200adf3818662005ab0565b516200ae00828962005ab0565b5161271081101562005a785760031b6201389401556200ae21818762005ab0565b516200ae2e828962005ab0565b5161271081101562005a785760031b6201389501556200ae4f818862005ab0565b519061271082101562005a78576000620138996200ae729360031b015562005a5a565b6200acea565b0151905038806200adce565b90620138988460031b0160005260206000209160005b601f19851681106200aeea57509183916001936201389895601f198116106200aed0575b505050811b019160031b01556200ade7565b015160001960f88460031b161c191690553880806200aebe565b919260206001819286850151815501940192016200ae9a565b509592509350506200ac81915062005a5a565b9092916020840151602281101562003d03576003036200b5445760408401906200af466101008351015162005a6a565b51906200af5d60e062007755818651015162005a6a565b51936200af7283518551146200046462012e52565b6200af8583518651146200046462012e52565b60005b83518110156200afe4576200af9e818662005ab0565b519061271082101562005a7857620138966200afde9260018060a01b038b511660005260031b016020526200046b60406000205462007da0838a62005ab0565b6200af88565b509095919560005b87518110156200b136576200b002818662005ab0565b5161271081101562005a7857620138969060018060a01b0386511660005260031b016020526200b03d60406000205462007e0d838962005ab0565b906200b04a838862005ab0565b519161271083101562005a7857620138966200b0849360018060a01b0389511660005260031b016020526040600020556200046462012f56565b6200b090818662005ab0565b5161271081101562005a785762013896906001600160a01b036200b0b5848c62005ab0565b511660005260031b016020526200b0d760406000205462006dd4838962005ab0565b91906200b0e5828862005ab0565b519061271082101562005a78576200b13093620138966200046b938d6200b1148760018060a01b039262005ab0565b511660005260031b016020526040600020556200046462012fbb565b6200afec565b50926200b155919294506200b14e9096959662012c2b565b9462012b0f565b92604051906200b1658262003bea565b6001825260203681840137516001600160a01b03166200b1858262005a6a565b526000945b80518610156200ac6f576200b1a0868262005ab0565b516101e0526200b1b1855162006777565b966000946200b1c1845162006777565b6103005260009460005b88518110156200b294578a896200b1fb6001600160a01b036200b1ef858462005ab0565b51166101e05162012a61565b15806200b24b575b6200b21c575b50506200b2169062005a5a565b6200b1cb565b986200b2409162000b1382859c62007fee6200b2169760018060a01b039262005ab0565b9790508a896200b209565b5050506127106101e051101562005a78576001600160a01b036200b270828b62005ab0565b5116600052620138966101e05160031b016020528a8960406000205415156200b203565b50909895979498969291939660005b88518110156200b33a576127106101e051101562005a78576001600160a01b036200b2cf828b62005ab0565b5116600052620138966101e05160031b01602052604060002054156200b301575b6200b2fb9062005a5a565b6200b2a3565b996200b2fb906200b331906001600160a01b036200b3208e8d62005ab0565b511662000b13826103005162005ab0565b9a90506200b2f0565b509850969592919093966101e051612710811015806104405262005a785760031b620138970154986200b3726200811f898c620118f8565b60a05260006101405260006103c0525b6104405162005a78576103c0518a8110156200b44e576200b3b96200b3d691600061044052620138976101e05160031b0162006ac7565b90546103005160039290921b1c6001600160a01b03169062012aba565b156200b3f5575b6200b3eb6103c05162005a5a565b6103c0526200b382565b6000610440526200b4156103c051620138976101e05160031b0162006ac7565b60018060a01b0391549060031b1c166200b4356101405160a05162005ab0565b526200b4446101405162005a5a565b610140526200b3dd565b50979294959093985095909560005b8281106200b4f9575050506104405162005a785760a051516001600160401b03811162003b9b576200b49b81620138976101e05160031b0162005b96565b602060a05101620138976101e05160031b01600052602060002060005b8381106200b4db57505050506200b4cf9062005a5a565b9492959091956200b18a565b82516001600160a01b0316818301556020909201916001016200b4b8565b6200b53e906001600160a01b036200b512828562005ab0565b51166200b5256101405160a05162005ab0565b526200b5346101405162005a5a565b6101405262005a5a565b6200b45d565b90926020810151602281101562003d03576004036200bb9157610100936200b5866200b577866040850151015162005a6a565b51956040840151015162005a8e565b51906200b5ad60e060406200b5a18282880151015162005a6a565b51950151015162005a8e565b51936200b5c287518451146200046462012e52565b6200b5d587518551146200046462012e52565b6200b5e887518651146200046462012e52565b60005b87518110156200b654576200b601818662005ab0565b519061271082101562005a78576200b64e9162013896906001600160a01b036200b62c848d62005ab0565b511660005260031b016020526200046b60406000205462007da0838a62005ab0565b6200b5eb565b509095919593929360005b83518110156200b7bb576200b675818762005ab0565b5161271081101562005a785762013896906001600160a01b036200b69a848862005ab0565b511660005260031b016020526200b6bc60406000205462007e0d838862005ab0565b906200b6c9838962005ab0565b519161271083101562005a78576200b7109262013896906001600160a01b036200b6f4878b62005ab0565b511660005260031b016020526040600020556200046462012f56565b6200b71c818762005ab0565b5161271081101562005a785762013896906001600160a01b036200b741848c62005ab0565b511660005260031b016020526200b76360406000205462006dd4838862005ab0565b9190506200b772818862005ab0565b519161271083101562005a78576200b7b59262013896906001600160a01b036200b79d858e62005ab0565b511660005260031b0160205260406000205562005a5a565b6200b65f565b5091936200b7d791935062007efe6200852c9197969762012c2b565b6000945b80518610156200ac6f576200b7f1868262005ab0565b51610520526200b802855162006777565b966000946200b812845162006777565b6102e05260009460005b88518110156200b8e5578a896200b84c6001600160a01b036200b840858462005ab0565b51166105205162012a61565b15806200b89c575b6200b86d575b50506200b8679062005a5a565b6200b81c565b986200b8919162000b1382859c62007fee6200b8679760018060a01b039262005ab0565b9790508a896200b85a565b50505061271061052051101562005a78576001600160a01b036200b8c1828b62005ab0565b5116600052620138966105205160031b016020528a8960406000205415156200b854565b50909895979498969291939660005b88518110156200b9845761271061052051101562005a78576001600160a01b03806200b921838c62005ab0565b5116600052620138966105205160031b01602052604060002054156200b954575b506200b94e9062005a5a565b6200b8f4565b819b6200b97c916200b96b6200b94e948d62005ab0565b511662000b13826102e05162005ab0565b9a906200b942565b5098509695929190939661052051612710811015806105a05262005a785760031b620138970154986200b9bc6200811f898c620118f8565b6104805260006105605260006102c0525b6105a05162005a78576102c0518a8110156200ba98576200ba046200ba249160006105a052620138976105205160031b0162006ac7565b90546102e0516001600160a01b03939260031b9190911c83169062012aba565b156200ba44575b506200ba3a6102c05162005a5a565b6102c0526200b9cd565b60006105a0526200ba646102c051620138976105205160031b0162006ac7565b90549060031b1c166200ba7e610560516104805162005ab0565b526200ba8d6105605162005a5a565b61056052386200ba2b565b50979294959093985095909560005b8281106200bb45575050506105a05162005a785761048051516001600160401b03811162003b9b576200bae681620138976105205160031b0162005b96565b60206104805101620138976105205160031b01600052602060002060005b8381106200bb2757505050506200bb1b9062005a5a565b9492959091956200b7db565b82516001600160a01b0316818301556020909201916001016200bb04565b6200bb8b906001600160a01b036200bb5e828562005ab0565b51166200bb72610560516104805162005ab0565b526200bb816105605162005a5a565b6105605262005a5a565b6200baa7565b92906020840151602281101562003d03576005036200c1475760408401906200bbc460e062008595818551015162005a6a565b519282518451036200c0f55760005b83518110156200bc2f576200bbe9818562005ab0565b519061271082101562005a7857620138966200bc299260018060a01b038a511660005260031b016020526200046b60406000205462007da0838962005ab0565b6200bbd3565b509060005b83518110156200bcd8576200bc4a818562005ab0565b5161271081101562005a7857620138969060018060a01b0389511660005260031b016020526200bc8560406000205462007e0d838862005ab0565b91906200bc93828762005ab0565b519061271082101562005a78576200bcd293620138966200046b9360018060a01b038d511660005260031b016020526040600020556200046462012f56565b6200bc34565b50916200bce9919495935062012c2b565b92604051926200bcf98462003bea565b6001845260203681860137516001600160a01b03166200bd198462005a6a565b52604051926200bd298462003c06565b6000845260003681376000945b80518610156200ac6f576200bd4c868262005ab0565b51610180526200bd5d855162006777565b966000946200bd6d845162006777565b6105e05260009460005b88518110156200be40578a896200bda76001600160a01b036200bd9b858462005ab0565b51166101805162012a61565b15806200bdf7575b6200bdc8575b50506200bdc29062005a5a565b6200bd77565b986200bdec9162000b1382859c62007fee6200bdc29760018060a01b039262005ab0565b9790508a896200bdb5565b50505061271061018051101562005a78576001600160a01b036200be1c828b62005ab0565b5116600052620138966101805160031b016020528a8960406000205415156200bdaf565b50909895979498969291939660005b88518110156200bee65761271061018051101562005a78576001600160a01b036200be7b828b62005ab0565b5116600052620138966101805160031b01602052604060002054156200bead575b6200bea79062005a5a565b6200be4f565b996200bea7906200bedd906001600160a01b036200becc8e8d62005ab0565b511662000b13826105e05162005ab0565b9a90506200be9c565b5098509695929190939661018051612710811015806104205262005a785760031b620138970154986200bf1e6200811f898c620118f8565b6102405260006104a05260006101a0525b6104205162005a78576101a0518a8110156200bffc576200bf666200bf8391600061042052620138976101805160031b0162006ac7565b90546105e05160039290921b1c6001600160a01b03169062012aba565b156200bfa2575b6200bf986101a05162005a5a565b6101a0526200bf2f565b6000610420526200bfc26101a051620138976101805160031b0162006ac7565b60018060a01b0391549060031b1c166200bfe36104a0516102405162005ab0565b526200bff26104a05162005a5a565b6104a0526200bf8a565b50979294959093985095909560005b8281106200c0a9575050506104205162005a785761024051516001600160401b03811162003b9b576200c04a81620138976101805160031b0162005b96565b60206102405101620138976101805160031b01600052602060002060005b8381106200c08b57505050506200c07f9062005a5a565b9492959091956200bd36565b82516001600160a01b0316818301556020909201916001016200c068565b6200c0ef906001600160a01b036200c0c2828562005ab0565b51166200c0d66104a0516102405162005ab0565b526200c0e56104a05162005a5a565b6104a05262005a5a565b6200c00b565b60405162461bcd60e51b815260206004820152603560248201526000805160206201339c833981519152604482015274195b905b5bdd5b9d081a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b926020810151602281101562003d03576006036200c730576040016200c1736101008251015162005a6a565b51936200c18a60e062008595818551015162005a6a565b519285518351036200c6de5785518451036200c6915760005b86518110156200c20c576200c1b9818562005ab0565b519061271082101562005a78576200c2069162013896906001600160a01b036200c1e4848c62005ab0565b511660005260031b016020526200046b60406000205462007da0838962005ab0565b6200c1a3565b509060005b86518110156200c2b2576200c227818562005ab0565b5161271081101562005a785762013896906001600160a01b036200c24c848b62005ab0565b511660005260031b016020526200c26e60406000205462007e0d838862005ab0565b91906200c27c828762005ab0565b519061271082101562005a78576200c2ac936200046b9262013896906001600160a01b036200b6f4878f62005ab0565b6200c211565b50916200c2c99193506200852c9095949562012c2b565b91604051926200c2d98462003c06565b6000845260003681376000945b80518610156200ac6f576200c2fc868262005ab0565b5160e0526200c30c855162006777565b966000946200c31c845162006777565b6103a05260009460005b88518110156200c3ec578a896200c3556001600160a01b036200c34a858462005ab0565b511660e05162012a61565b15806200c3a5575b6200c376575b50506200c3709062005a5a565b6200c326565b986200c39a9162000b1382859c62007fee6200c3709760018060a01b039262005ab0565b9790508a896200c363565b50505061271060e051101562005a78576001600160a01b036200c3c9828b62005ab0565b51166000526201389660e05160031b016020528a8960406000205415156200c35d565b50909895979498969291939660005b88518110156200c4895761271060e051101562005a78576001600160a01b03806200c427838c62005ab0565b51166000526201389660e05160031b01602052604060002054156200c459575b506200c4539062005a5a565b6200c3fb565b819b6200c481916200c4706200c453948d62005ab0565b511662000b13826103a05162005ab0565b9a906200c447565b5098509695929190939660e051612710811015806102805262005a785760031b620138970154986200c4c06200811f898c620118f8565b6105c0526000610460526000610320525b6102805162005a7857610320518a8110156200c59a576200c5076200c527916000610280526201389760e05160031b0162006ac7565b90546103a0516001600160a01b03939260031b9190911c83169062012aba565b156200c547575b506200c53d6103205162005a5a565b610320526200c4d1565b6000610280526200c566610320516201389760e05160031b0162006ac7565b90549060031b1c166200c580610460516105c05162005ab0565b526200c58f6104605162005a5a565b61046052386200c52e565b50979294959093985095909560005b8281106200c645575050506102805162005a78576105c051516001600160401b03811162003b9b576200c5e7816201389760e05160031b0162005b96565b60206105c051016201389760e05160031b01600052602060002060005b8381106200c62757505050506200c61b9062005a5a565b9492959091956200c2e6565b82516001600160a01b0316818301556020909201916001016200c604565b6200c68b906001600160a01b036200c65e828562005ab0565b51166200c672610460516105c05162005ab0565b526200c6816104605162005a5a565b6104605262005a5a565b6200c5a9565b60405162461bcd60e51b815260206004820152603060248201526000805160206201343c83398151915260448201526f1b9d1cc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b60405162461bcd60e51b815260206004820152603560248201526000805160206201333c8339815191526044820152741b90db185cdcd95cc81a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b6020819493940151602281101562003d03576007036200c9d857604001906200c75f6101008351015162005a6a565b519260406200c77360e08551015162005a6a565b5193510151916200c78c85518551146200046462012e52565b60005b85518110156200c9c6576001600160a01b036200c7ad828862005ab0565b511660005262027113806020526200c7d260ff60406000205416156200046462012f23565b6200c7de828662005ab0565b51906200c7ec838862005ab0565b5191604051916200c7fd8362003b7f565b600183526000602084019081526040840192835260608401949094526001600160a01b036200c82d868c62005ab0565b51166000526020526200c8586040600020936200c84e845115158662006070565b5115158462006081565b518051906001600160401b03821162003b9b576200c889826200c87f600187015462004249565b6001870162006026565b602090601f83116001146200c94c579180600294926060946000926200c940575b50508160011b916000199060031b1c19161760018501555b01519101556001600160a01b036200c8db828862005ab0565b516202711454929116600160401b83101562003b9b576001830180620271145583101562005a785762027114600052600080516020620133dc83398151915290920180546001600160a01b0319169092179091556200c93a9062005a5a565b6200c78f565b0151905038806200c8aa565b906001850160005260206000209160005b601f19851681106200c9ad5750926002949260019260609583601f198116106200c993575b505050811b0160018501556200c8c2565b015160001960f88460031b161c191690553880806200c982565b919260206001819286850151815501940192016200c95d565b5094915092506200ac81915062005a5a565b6020819392930151602281101562003d03576008036200cacb5761010060406200ca06920151015162005a6a565b519160005b83518110156200cabc576200cab6906001600160a01b03806200ca2f838862005ab0565b51166000526202711390816020526200ca59600160ff604060002054161515146200046462012e82565b806200ca66848962005ab0565b5116600052816020526200ca8a60ff60406000205460081c16156200046462012eea565b6200ca96838862005ab0565b5116600052602052604060002061010061ff001982541617905562005a5a565b6200ca0b565b50926200ac8191925062005a5a565b6020810151602281101562003d03576009036200cbac5761010060406200caf6920151015162005a6a565b519160005b83518110156200cabc576200cba6906001600160a01b03806200cb1f838862005ab0565b51166000526202711390816020526200cb49600160ff604060002054161515146200046462012e82565b806200cb56848962005ab0565b5116600052816020526200cb7e600160ff60406000205460081c161515146200046462012eb5565b6200cb8a838862005ab0565b5116600052602052604060002061ff0019815416905562005a5a565b6200cafb565b906020820151602281101562003d0357600f036200ccf75760a0604083015101519260005b84518110156200cce65760e06200cbf18260a06040880151015162005ab0565b510151156200cc73576200cc196200cc128260a06040880151015162005ab0565b51620068c8565b6202711554600019919082810190811162003229576200cc3b60059162006812565b500161010061ff00198254161790556202711554918281810111620032295762008ed46005916200cc6d940162006812565b6200cbd1565b6200cc926200cc8b8260a06040880151015162005ab0565b51620068a4565b6202711654600019919082810190811162003229576200ccb4600591620067d0565b500161010061ff00198254161790556202711654918281810111620032295762008ed46005916200cc6d9401620067d0565b50939092506200ac81915062005a5a565b6020820151602281101562003d0357600c036200ce225760a0604083015101519260005b84518110156200cce65760e06200cd3b8260a06040880151015162005ab0565b510151156200cdb6576200cd5c6200cc128260a06040880151015162005ab0565b6202711554600019919082810190811162003229576200cd7e60059162006812565b500161010061ff001982541617905562027115549182818101116200322957620090026005916200cdb0940162006812565b6200cd1b565b6200cdce6200cc8b8260a06040880151015162005ab0565b6202711654600019919082810190811162003229576200cdf0600591620067d0565b500161010061ff001982541617905562027116549182818101116200322957620090026005916200cdb09401620067d0565b9291906020810151602281101562003d0357600d036200cf7b576040019260606200ce5260e08651015162005a6a565b5194510151916200ce6785518451146201199f565b60005b85518110156200cf6b57806200ce856200ceff928662005ab0565b51156200cf05576200cea96200ce9c828962005ab0565b5162027115541162011a28565b6200ced560ff60056200cec86200cec1858c62005ab0565b5162006812565b50015460081c1662011a80565b6200ceed60ff6005620091436200cec1858c62005ab0565b600562008ed46200cec1838a62005ab0565b6200ce6a565b6200cf226200cf15828962005ab0565b5162027116541162011a28565b6200cf4160ff60056200cec86200cf3a858c62005ab0565b51620067d0565b6200cf5960ff6005620091436200cf3a858c62005ab0565b600562008ed46200cf3a838a62005ab0565b509350916200ac81915062005a5a565b6020810151602281101562003d0357600e036200d0b3576040019260606200cfa860e08651015162005a6a565b5194510151916200cfbd85518451146201199f565b60005b85518110156200cf6b57806200cfdb6200d04e928662005ab0565b51156200d054576200cfff6200cff2828962005ab0565b5162027115541162011b42565b6200d02460ff60056200d0176200cec1858c62005ab0565b50015460081c1662011b9b565b6200d03c60ff6005620092a06200cec1858c62005ab0565b6005620090026200cec1838a62005ab0565b6200cfc0565b6200d0716200d064828962005ab0565b5162027116541162011b42565b6200d08960ff60056200d0176200cf3a858c62005ab0565b6200d0a160ff6005620092a06200cf3a858c62005ab0565b6005620090026200cf3a838a62005ab0565b6020810151602281101562003d03576010036200d1f95760400151926200d0e360e060c086015195015162005a6a565b51916200d0f885518451146200046462012e52565b60005b85518110156200cf6b57806200d1166200d18c928862005ab0565b516200d1228162003db9565b6200d12e828762005ab0565b51906200d13b8162003db9565b6200d1526200d14962012f85565b82151562005a27565b6200d15d8162003db9565b600181036200d19257506200d1816200d17562012f85565b61271083111562005a27565b6202711e5562005a5a565b6200d0fb565b6200d19d8162003db9565b600281036200d1b257506202711f5562005a5a565b6200d1bd8162003db9565b600381036200d1d25750620271205562005a5a565b806200d1e060049262003db9565b146200d1ed575062005a5a565b6202712155386200941a565b602081949392940151602281101562003d0357601a036200d3b15760e060406200d227920151015162005a6a565b519060038251036200d36d576200d23e8262005a6a565b516200d2566200d24e8462005a8e565b519362005a9f565b51926200d331576200ac81926001036200941a576200d27e6200d2dd91620271205462006c06565b6202712055604051906200d2928262003c22565b603282527f6469766964656e6461626c652062616c616e6365206f766572666c6f772077686020830152710cadc40e0e4dec6cae6e6d2dcce40c6c2e6d60731b604083015262005a27565b6200046b6200d2f0620271215462006bf3565b6202712155604051906200d3048262003bea565b601a8252796469766964656e647320636f756e746572206f766572666c6f7760301b602083015262005a27565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207061796d656e74207479706560601b6044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527b496e76616c6964206e756d626572206f6620706172616d657465727360201b6044820152606490fd5b6020819392930151602281101562003d0357601b036200d9d657506202711e929192546200d3e2620094ce62012d29565b62027121546202711f5411156200d4036200d3fc62012d97565b8262005a27565b6202712054906200d4158383620069da565b50506200d42162012ded565b506000805b61271082106200d92a575b5050906200d4616200d46793926200d4576200d44c62012d29565b612710861062005a27565b6200046462012d97565b620069da565b90506200d47362012ded565b5060009060005b61271081106200d852575b50906127106200d496920462006c94565b90506200d4a76202712a5462006777565b906000946000905b6127108210156200d845578160031b9460ff6201389a87015416156200d60d5760009662013895870154156200d5fc57600098975b62005a7857620138978701548910156200d5e2576200d5098962013897890162006ac7565b600160a01b6001900391549060031b1c169788600052620138968801602052604098868a60002054906200d53d91620069da565b9a906200d54962012ded565b6200d5549162005a27565b60009a620138958b01546200d56991620069da565b906200d57462012ded565b6200d57f9162005a27565b826000526202711a6020528160002054906200d59b9162006c06565b9091600020556200d5ab62012ded565b6200d5b69162005a27565b6200d5c2828962005ab0565b526200d5ce9062005a5a565b986200d5da9062005a5a565b98976200d4e4565b929095506200d5f49196975062005a5a565b90946200d4af565b929095506200d5f491965062005a5a565b95969392509350505b6200d6218262006777565b9160009160005b8281106200d7af575050506202711b54916200d6496200811f8484620118f8565b926000906000905b8082106200d77457505060005b8381106200d6de5750508251929150506001600160401b03821162003b9b576020906200d68b8362005bce565b016202711b600052602060002060005b8381106200d6c057505050506200ac8190600062027120556000620271215562005a5a565b82516001600160a01b0316818301556020909201916001016200d69b565b6000805b8381106200d72c575b50156200d704575b6200d6fe9062005a5a565b6200d65e565b906200d6fe906200d723906001600160a01b03620082a2858762005ab0565b9190506200d6f3565b6001600160a01b03806200d741858862005ab0565b5116906200d750838a62005ab0565b5116146200d769576200d7639062005a5a565b6200d6e2565b50506001386200d6eb565b9091620082b06200d7a8916200d78a8562006a8d565b905460039190911b1c6001600160a01b031662000b13828a62005ab0565b906200d651565b6000805b8581106200d7fd575b50156200d7d5575b6200d7cf9062005a5a565b6200d628565b926200d7cf906200d7f4906001600160a01b03620082a2878662005ab0565b9390506200d7c4565b6001600160a01b03806200d812858762005ab0565b5116906200d821838a62005ab0565b5116146200d83a576200d8349062005a5a565b6200d7b3565b50506001386200d7bc565b939495929150506200d616565b90918160039695961b60ff6201389a82015416156200d91e5762013895810154620138978201546000928391825b8184106200d8bc5750505050620075a96200d8b3936200d8ab6200046b979694620035d894620069da565b9290620068ec565b9493946200d47a565b94929462005a78576200d917856200d90f6200d8e26200046b9862013897870162006ac7565b905460039190911b1c6001600160a01b031660009081526201389686016020526040812054909662006c06565b979062006ae0565b926200d880565b5091909493946200d485565b8160039897981b60ff6201389a82015416156200d9cc576201389581015490600062013897820154916000926000925b8184106200d9975750505050620075a96200d98d93620098f8846200d4616200350562009904966200046b9a98620069da565b909695966200d426565b93929362005a78576200d9c5846200d9bd6200d8e26200046b9762013897870162006ac7565b969062006ae0565b926200d95a565b509695966200d431565b6020819492940151602281101562003d03576014036200df2357604001906200da056101008351015162005a6a565b51936200da1c60e062007755818651015162005a6a565b51916200da2d865185511462011c60565b6200da3c865184511462011cc6565b60005b86518110156200db3a576200da55818562005ab0565b516200da62828762005ab0565b519061271082101562005a7857620138996200da849260031b01549062006c06565b906200da91838862005ab0565b519161271083101562005a7857620138996200dab29360031b015562011d80565b6200dabe818562005ab0565b516200dacb828762005ab0565b519061271082101562005a78576200daf69162013896906001600160a01b036200a811868d62005ab0565b91906200db04828862005ab0565b519061271082101562005a78576200db34936200046b9262013896906001600160a01b036200a868878f62005ab0565b6200da3f565b50926200db519192506200852c9095949562012c2b565b916040516200db608162003c06565b6000815260003681376000945b80518610156200ac6f576200db83868262005ab0565b51610220526200db94855162006777565b966000946200dba4845162006777565b6103605260009460005b88518110156200dc77578a896200dbde6001600160a01b036200dbd2858462005ab0565b51166102205162012a61565b15806200dc2e575b6200dbff575b50506200dbf99062005a5a565b6200dbae565b986200dc239162000b1382859c62007fee6200dbf99760018060a01b039262005ab0565b9790508a896200dbec565b50505061271061022051101562005a78576001600160a01b036200dc53828b62005ab0565b5116600052620138966102205160031b016020528a8960406000205415156200dbe6565b50909895979498969291939660005b88518110156200dd165761271061022051101562005a78576001600160a01b03806200dcb3838c62005ab0565b5116600052620138966102205160031b01602052604060002054156200dce6575b506200dce09062005a5a565b6200dc86565b819b6200dd0e916200dcfd6200dce0948d62005ab0565b511662000b13826103605162005ab0565b9a906200dcd4565b5098509695929190939661022051612710811015806103405262005a785760031b620138970154986200dd4e6200811f898c620118f8565b6104e0526000610500526000610160525b6103405162005a7857610160518a8110156200de2a576200dd966200ddb691600061034052620138976102205160031b0162006ac7565b9054610360516001600160a01b03939260031b9190911c83169062012aba565b156200ddd6575b506200ddcc6101605162005a5a565b610160526200dd5f565b6000610340526200ddf661016051620138976102205160031b0162006ac7565b90549060031b1c166200de10610500516104e05162005ab0565b526200de1f6105005162005a5a565b61050052386200ddbd565b50979294959093985095909560005b8281106200ded7575050506103405162005a78576104e051516001600160401b03811162003b9b576200de7881620138976102205160031b0162005b96565b60206104e05101620138976102205160031b01600052602060002060005b8381106200deb957505050506200dead9062005a5a565b9492959091956200db6d565b82516001600160a01b0316818301556020909201916001016200de96565b6200df1d906001600160a01b036200def0828562005ab0565b51166200df04610500516104e05162005ab0565b526200df136105005162005a5a565b6105005262005a5a565b6200de39565b926020840151602281101562003d035760150362009ae45760408401906200df516101008351015162005a6a565b51906200df6860e062007755818651015162005a6a565b51936200df7d83518551146200046462012e52565b6200df9083518651146200046462012e52565b60005b83518110156200dfef576200dfa9818662005ab0565b519061271082101562005a7857620138966200dfe99260018060a01b038b511660005260031b016020526200046b60406000205462007da0838a62005ab0565b6200df93565b509095919560005b87518110156200e125576200e00d818662005ab0565b5161271081101562005a7857620138969060018060a01b0386511660005260031b016020526200e04860406000205462007e0d838962005ab0565b906200e055838862005ab0565b519161271083101562005a7857620138966200e08f9360018060a01b0389511660005260031b016020526040600020556200046462012f56565b6200e09b818662005ab0565b5161271081101562005a785762013896906001600160a01b036200e0c0848c62005ab0565b511660005260031b016020526200e0e260406000205462006dd4838962005ab0565b91906200e0f0828862005ab0565b519061271082101562005a78576200e11f93620138966200046b938d6200b1148760018060a01b039262005ab0565b6200dff7565b50926200e13d919294506200b14e9096959662012c2b565b92604051906200e14d8262003bea565b6001825260203681840137516001600160a01b03166200e16d8262005a6a565b526000945b80518610156200ac6f576200e188868262005ab0565b516102a0526200e199855162006777565b966000946200e1a9845162006777565b60805260009460005b88518110156200e27b578a896200e1e26001600160a01b036200e1d6858462005ab0565b51166102a05162012a61565b15806200e232575b6200e203575b50506200e1fd9062005a5a565b6200e1b2565b986200e2279162000b1382859c62007fee6200e1fd9760018060a01b039262005ab0565b9790508a896200e1f0565b5050506127106102a051101562005a78576001600160a01b036200e257828b62005ab0565b5116600052620138966102a05160031b016020528a8960406000205415156200e1ea565b50909895979498969291939660005b88518110156200e320576127106102a051101562005a78576001600160a01b036200e2b6828b62005ab0565b5116600052620138966102a05160031b01602052604060002054156200e2e8575b6200e2e29062005a5a565b6200e28a565b996200e2e2906200e317906001600160a01b036200e3078e8d62005ab0565b511662000b138260805162005ab0565b9a90506200e2d7565b509850969592919093966102a051612710811015806106205262005a785760031b620138970154986200e3586200811f898c620118f8565b6101c05260006104c05260006103e0525b6106205162005a78576103e0518a8110156200e435576200e3a06200e3bc91600061062052620138976102a05160031b0162006ac7565b905460805160039290921b1c6001600160a01b03169062012aba565b156200e3db575b6200e3d16103e05162005a5a565b6103e0526200e369565b6000610620526200e3fb6103e051620138976102a05160031b0162006ac7565b60018060a01b0391549060031b1c166200e41c6104c0516101c05162005ab0565b526200e42b6104c05162005a5a565b6104c0526200e3c3565b50979294959093985095909560005b8281106200e4e2575050506106205162005a78576101c051516001600160401b03811162003b9b576200e48381620138976102a05160031b0162005b96565b60206101c05101620138976102a05160031b01600052602060002060005b8381106200e4c457505050506200e4b89062005a5a565b9492959091956200e172565b82516001600160a01b0316818301556020909201916001016200e4a1565b6200e528906001600160a01b036200e4fb828562005ab0565b51166200e50f6104c0516101c05162005ab0565b526200e51e6104c05162005a5a565b6104c05262005a5a565b6200e444565b509190506200e53d8162010df2565b90600681101562003d0357600281036200e56c5760405162461bcd60e51b81528062005a56600482016200761c565b600381036200e61f5750303b1562003b655790604051809263a2f7d10160e01b82526044820160406004840152815180915260206064840192019060005b8181106200e605575050506200e5d08291600094600319848303016024850152620045b5565b038183305af180156200e5f9576200e5e55750565b6001600160401b03811162003b9b57604052565b6040513d6000823e3d90fd5b82518452869450602093840193909201916001016200e5aa565b60059150146200e62c5750565b906000905b6020830151805183101562009b6557826200e64c9162005ab0565b516020810151602281101562003d03571562009b22576020810151602281101562003d03576001036200e89557604001906200e68e6101008351015162005a6a565b51936200e6a560e062007755818651015162005a6a565b51916200e6b6865185511462011c60565b6200e6c5865184511462011cc6565b60005b86518110156200e81c576200e6de818662005ab0565b5161271081101562005a7857600160ff60076200e7049360031b01541615151462011d28565b6200e710818562005ab0565b516200e71d828762005ab0565b519061271082101562005a785760066200e73d9260031b01549062006c06565b906200e74a838862005ab0565b519161271083101562005a785760066200e7699360031b015562011d80565b6200e775818562005ab0565b516200e782828762005ab0565b519061271082101562005a78576200e7c3916003906001600160a01b036200e7ab868d62005ab0565b5116600052811b016020526040600020549062006c06565b91906200e7d1828862005ab0565b519061271082101562005a78576200e816936200046b926003906001600160a01b036200e7ff878f62005ab0565b5116600052811b0160205260406000205562011ddf565b6200e6c8565b50949150916200e8306200e8379162012c2b565b9162012b0f565b93604051926200e8478462003c06565b60008452600036813760005b83518110156200e87857806200046b6200791c6200e872938762005ab0565b6200e853565b50945092602092506200e88c915062005a5a565b9190506200e631565b9091926020820151602281101562003d03576002036200eb035760408092019081519383850151916200e8d16200798460e08098015162005a6a565b5194835187510362007c8957835185510362007c3557835186510362007bde575060005b86518110156200eaed576200e90b818862005ab0565b5161271081101562005a785760ff60076200e92d9260031b0154161562011e38565b6200e939818862005ab0565b5161271081101562005a785760031b600701805460ff191660011790556200e962818562005ab0565b516200e96f828962005ab0565b519061271082101562005a78578051906001600160401b03821162003b9b576200e9a58262007a7360058660031b015462004249565b602090601f83116001146200ea725760059291600091836200ea66575b50508160011b916000199060031b1c1916179160031b01555b6200e9e7818662005ab0565b516200e9f4828962005ab0565b5161271081101562005a785760031b600101556200ea13818762005ab0565b516200ea20828962005ab0565b5161271081101562005a785760031b600201556200ea3f818862005ab0565b519061271082101562005a7857600060066200ea609360031b015562005a5a565b6200e8f5565b0151905038806200e9c2565b9060058460031b0160005260206000209160005b601f19851681106200ead45750918391600193600595601f198116106200eaba575b505050811b019160031b01556200e9db565b015160001960f88460031b161c191690553880806200eaa8565b919260206001819286850151815501940192016200ea86565b509591509350602092506200e88c915062005a5a565b9291906020810151602281101562003d03576003036200eb3057602091926200046b6200e88c9262011e84565b6020810151602281101562003d03576004036200edce576200eb5b6101006040830151015162005a6a565b51936200eb716101006040840151015162005a8e565b51906200eb8c60e060406200b5a18282880151015162005a6a565b51936200eba187518451146200046462012e52565b6200ebb487518551146200046462012e52565b6200ebc787518651146200046462012e52565b60005b87518110156200ec30576200ebe0818662005ab0565b519061271082101562005a78576200ec2a916003906001600160a01b036200ec09848d62005ab0565b5116600052811b016020526200046b60406000205462007da0838a62005ab0565b6200ebca565b509095919593929360005b83518110156200ed8b576200ec51818762005ab0565b5161271081101562005a78576003906001600160a01b036200ec74848862005ab0565b5116600052811b016020526200ec9560406000205462007e0d838862005ab0565b906200eca2838962005ab0565b519161271083101562005a78576200ece6926003906001600160a01b036200eccb878b62005ab0565b5116600052811b016020526040600020556200046462012f56565b6200ecf2818762005ab0565b5161271081101562005a78576003906001600160a01b036200ed15848c62005ab0565b5116600052811b016020526200ed3660406000205462006dd4838862005ab0565b9190506200ed45818862005ab0565b519161271083101562005a78576200ed85926003906001600160a01b036200ed6e858e62005ab0565b5116600052811b0160205260406000205562005a5a565b6200ec3b565b50936200eda591929693506200852c62007efe9162012c2b565b9260005b83518110156200e87857806200046b6200791c6200edc8938762005ab0565b6200eda9565b926020840151602281101562003d03576005036200ef8c5760408401906200ee0060e062008595818551015162005a6a565b519282518451036200c0f55760005b83518110156200ee68576200ee25818562005ab0565b519061271082101562005a785760036200ee629260018060a01b038a5116600052811b016020526200046b60406000205462007da0838962005ab0565b6200ee0f565b509060005b83518110156200ef0b576200ee83818562005ab0565b5161271081101562005a785760039060018060a01b03895116600052811b016020526200eebb60406000205462007e0d838862005ab0565b91906200eec9828762005ab0565b519061271082101562005a78576200ef059360036200046b9360018060a01b038d5116600052811b016020526040600020556200046462012f56565b6200ee6d565b50949250906200ef1b9062012c2b565b90604051926200ef2b8462003bea565b6001845260203681860137516001600160a01b03166200ef4b8462005a6a565b52604051946200ef5b8662003c06565b60008652600036813760005b83518110156200e87857806200046b6200791c6200ef86938762005ab0565b6200ef67565b926020810151602281101562003d03576006036200f145576040016200efb86101008251015162005a6a565b51936200efcf60e062008595818551015162005a6a565b519285518351036200c6de5785518451036200c6915760005b86518110156200f04e576200effe818562005ab0565b519061271082101562005a78576200f048916003906001600160a01b036200f027848c62005ab0565b5116600052811b016020526200046b60406000205462007da0838962005ab0565b6200efe8565b509060005b86518110156200f0ef576200f069818562005ab0565b5161271081101562005a78576003906001600160a01b036200f08c848b62005ab0565b5116600052811b016020526200f0ad60406000205462007e0d838862005ab0565b91906200f0bb828762005ab0565b519061271082101562005a78576200f0e9936200046b926003906001600160a01b036200eccb878f62005ab0565b6200f053565b5094916200f1049193506200e8309062012c2b565b91604051946200f1148662003c06565b60008652600036813760005b83518110156200e87857806200046b6200791c6200f13f938762005ab0565b6200f120565b90926020820151602281101562003d03576007036200f36c57926200f1736101006040840151015162005a6a565b51936040806200f18a60e082870151015162005a6a565b519401510151916200f1a486518551146200046462012e52565b6000915b86518310156200f357576001600160a01b036200f1c6848962005ab0565b51166000526201388092836020526200f1ec60ff60406000205416156200046462012f23565b6200f1f8818662005ab0565b516200f205828862005ab0565b5190604051956200f2168762003b7f565b600187526000602088019081526040880192835260608801939093526001600160a01b036200f246858d62005ab0565b51166000526020526200f26760406000209262008afe885115158562006070565b5180519095906001600160401b03811162003b9b576200f2908162008b31600186015462004249565b602096601f82116001146200f2f25791816060926200f2ea97989960029560009262008ba75750508160011b916000199060031b1c191617600185015501519101556200046b6001600160a01b0362008b97838b62005ab0565b91906200f1a8565b966001840160005260206000209760005b601f19841681106200f33e5750826200f2ea97989960029593600193606096601f1981161062008c0057505050811b01600185015562008b7a565b818301518a55600190990198602092830192016200f303565b9550939050602092506200e88c915062005a5a565b9192906020810151602281101562003d03576008036200f4055761010060406200f39a920151015162005a6a565b519160005b83518110156200f3f3576200f3ed906001600160a01b03806200f3c3838862005ab0565b51166000526201388090816020526200ca59600160ff604060002054161515146200046462012e82565b6200f39f565b509260209192506200e88c9062005a5a565b6020810151602281101562003d03576009036200f4895761010060406200f430920151015162005a6a565b519160005b83518110156200f3f3576200f483906001600160a01b03806200f459838862005ab0565b51166000526201388090816020526200cb49600160ff604060002054161515146200046462012e82565b6200f435565b906020820151602281101562003d0357600f036200f5d05760a0604083015101519260005b84518110156200f5bd5760e06200f4ce8260a06040880151015162005ab0565b510151156200f54d576200f4ef62008e7f8260a06040880151015162005ab0565b62013882548060001981011162003229576200f51160059160001901620067f1565b5001805461ff001916610100179055620138825490600019820182106200322957600562008ed46200f5479360001901620067f1565b6200f4ae565b6200f56562008f018260a06040880151015162005ab0565b62013882548060001981011162003229576200f58760059160001901620067af565b5001805461ff001916610100179055620138825490600019820182106200322957600562008ed46200f5479360001901620067af565b50936200e88c9193506020925062005a5a565b6020820151602281101562003d0357600c036200f7035760a0604083015101519260005b84518110156200f5bd5760e06200f6148260a06040880151015162005ab0565b510151156200f693576200f63562008e7f8260a06040880151015162005ab0565b62013882548060001981011162003229576200f65760059160001901620067f1565b5001805461ff0019166101001790556201388254906000198201821062003229576005620090026200f68d9360001901620067f1565b6200f5f4565b6200f6ab62008f018260a06040880151015162005ab0565b62013882548060001981011162003229576200f6cd60059160001901620067af565b5001805461ff0019166101001790556201388254906000198201821062003229576005620090026200f68d9360001901620067af565b9291906020810151602281101562003d0357600d036200f82a576040019260606200f73360e08651015162005a6a565b5194510151916200f74885518451146201199f565b60005b85518110156200f81757806200f7666200f7bf928662005ab0565b51156200f7c5576200f77d62009108828962005ab0565b6200f79560ff60056200cec86200912a858c62005ab0565b6200f7ad60ff6005620091436200912a858c62005ab0565b600562008ed46200912a838a62005ab0565b6200f74b565b6200f7d562009184828962005ab0565b6200f7ed60ff60056200cec8620091a6858c62005ab0565b6200f80560ff600562009143620091a6858c62005ab0565b600562008ed4620091a6838a62005ab0565b50935091602091506200e88c9062005a5a565b6020819492940151602281101562003d0357600e036200f8f1576040019060606200f85a60e08451015162005a6a565b5192510151936200f86f83518651146201199f565b60005b83518110156200f81757806200f88d6200f899928862005ab0565b516200f89f5762005a5a565b6200f872565b6200f8af62009258828762005ab0565b6200f8c760ff60056200d0176200912a858a62005ab0565b6200f8df60ff6005620092a06200912a858a62005ab0565b6005620090026200912a838862005ab0565b6020810151602281101562003d03576010036200f95e5760400151906200f92160e060c084015193015162005a6a565b51936200f93683518651146200046462012e52565b60005b83518110156200f81757806200046b620093266200f958938762005ab0565b6200f939565b6020819392930151602281101562003d0357601a036200fa0e5760e060406200f98b920151015162005a6a565b5160038151036200d36d576200f9a18162005a6a565b51916200f9b2620093b28362005a8e565b51916200d331576020926200e88c926001036200941a576200f9dd6200f9ec916201388d5462006c06565b6201388d556200046462012ded565b6200046b6200f9ff6201388e5462006bf3565b6201388e556200046462012e27565b6020819392930151602281101562003d0357601b036200fe4a57506200fa436201388b939293546200354d620094ce62012d29565b50506200fa4f62012ded565b506000805b61271081106200fdfe575b50506200fa6b62006c18565b6200fa7a6202712a5462006777565b906000946000905b6127108210156200fdf1578160031b9460ff600787015416156200fbd5576000966002870154156200fbc457600098975b62005a785760048701548910156200fbaa576200fad4896004890162006ac7565b9054600391821b1c6001600160a01b03166000818152918901602052604091829020549199916200fb07908890620069da565b9a906200fb1362012ded565b6200fb1e9162005a27565b60009a60028b01546200fb3191620069da565b906200fb3c62012ded565b6200fb479162005a27565b82600052620138876020528160002054906200fb639162006c06565b9091600020556200fb7362012ded565b6200fb7e9162005a27565b6200fb8a828962005ab0565b526200fb969062005a5a565b986200fba29062005a5a565b98976200fab3565b929095506200fbbc9196975062005a5a565b90946200fa82565b929095506200fbbc91965062005a5a565b95969392509350505b6200fbe98262006777565b9160009160005b8281106200fd5b575050506201388854916200fc116200811f8484620118f8565b926000906000905b8082106200fd3e57505060005b8381106200fca85750508251929150506001600160401b03821162003b9b576020906200fc538362005bf2565b0162013888600052602060002060005b8381106200fc8a57505050506200e88c60209160006201388d5560006201388e5562005a5a565b82516001600160a01b0316818301556020909201916001016200fc63565b6000805b8381106200fcf6575b50156200fcce575b6200fcc89062005a5a565b6200fc26565b906200fcc8906200fced906001600160a01b03620082a2858762005ab0565b9190506200fcbd565b6001600160a01b03806200fd0b858862005ab0565b5116906200fd1a838a62005ab0565b5116146200fd33576200fd2d9062005a5a565b6200fcac565b50506001386200fcb5565b9091620082b06200fd54916200d78a8562006aaa565b906200fc19565b6000805b8581106200fda9575b50156200fd81575b6200fd7b9062005a5a565b6200fbf0565b926200fd7b906200fda0906001600160a01b03620082a2878662005ab0565b9390506200fd70565b6001600160a01b03806200fdbe858762005ab0565b5116906200fdcd838a62005ab0565b5116146200fde6576200fde09062005a5a565b6200fd5f565b50506001386200fd68565b939495929150506200fbde565b8060039594951b9060ff600783015416156200fe405762009904620075a96200046b94620098f86200fe37956002620098ee8762006959565b9392936200fa54565b509392936200fa5f565b6020810151602281101562003d03576014036200fff857604001906200fe766101008351015162005a6a565b51936200fe8d60e062007755818651015162005a6a565b51916200fe9e865185511462011c60565b6200fead865184511462011cc6565b60005b86518110156200ffa3576200fec6818562005ab0565b516200fed3828762005ab0565b519061271082101562005a785760066200fef39260031b01549062006c06565b906200ff00838862005ab0565b519161271083101562005a785760066200ff1f9360031b015562011d80565b6200ff2b818562005ab0565b516200ff38828762005ab0565b519061271082101562005a78576200ff61916003906001600160a01b036200e7ab868d62005ab0565b91906200ff6f828862005ab0565b519061271082101562005a78576200ff9d936200046b926003906001600160a01b036200e7ff878f62005ab0565b6200feb0565b50949150916200e8306200ffb79162012c2b565b93604051926200ffc78462003c06565b60008452600036813760005b83518110156200e87857806200046b6200791c6200fff2938762005ab0565b6200ffd3565b6020819392930151602281101562003d035760150362009ae4576020916200046b6200e88c9262011e84565b82516001600160a01b0316818301556020909201916001016200a5c4565b82516001600160a01b0316818301556020909201916001016200a46f565b6201007c90620271196000528484600020918201910162005b56565b386200a45e565b600191820180546001600160a01b03909216848601559390910192906200a3a2565b62027124600052620100cd90600080516020620133fc83398151915290810190830162005b56565b386200a362565b60018082620100e582948662010592565b019201920191906200a321565b620271236000526000805160206201337c833981519152908282015b8183018110620101205750506200a2e5565b806201012e60019262005c16565b016201010e565b600191820180546001600160a01b03909216848601559390910192906200a2b3565b620271226000526201017f906000805160206201335c83398151915290810190830162005b56565b386200a273565b82516001600160a01b0316818301556020909201916001016200a135565b620101c0906202711d6000528484600020918201910162005b56565b386200a124565b82516001600160a01b03168183015560209092019160010162009f45565b6201020190620271146000528484600020918201910162005b56565b3862009f34565b806201022a9160031b600160ff60078301541615151462010230575062005a5a565b62009e84565b620102446004820162013897830162010523565b6201389a8101600160ff198254161790558054816201389301556001810154620138948201556002810154620138958201556201028a6005820162013898830162010592565b620138996006820154910155386200941a565b6006602082620102b16001945186620060b3565b0192019201919062009c71565b6006818102048103620032295760068381020483036200322957620271156000527f0f9b10e190177c3c56fc6ce7689c8130c567df57aa02c08e7a090a59992adf926006840281015b82600602820181106201031c57505062009c5d565b8060006006925560006001820155620103386002820162005e12565b600060038201556201034d6004820162005c16565b600060058201550162010307565b60066020826201036f6001945186620060b3565b0192019201919062009be1565b8060060290600682040362003229578260060260068104840362003229576000906202711682526020822092830192015b828110620103bd57505062009bcd565b808260069255826001820155620103d76002820162005e12565b826003820155620103eb6004820162005c16565b82600582015501620103ad565b608460405162461bcd60e51b815260206004820152604060248201526000805160206201341c83398151915260448201527f656d2073686f756c64206e6f742072657475726e20766f7465206e65656465646064820152fd5b60405162461bcd60e51b815260206004820152604760248201526000805160206201341c83398151915260448201527f656d2073686f756c64206e6f742072657475726e206120766f74696e672072756064820152661b19481b1a5cdd60ca1b608482015260a490fd5b8181146201051f578154916001600160401b03831162003b9b57620104e1838362005b96565b60005260206000209060005260206000208154916000925b84841062010508575050505050565b6001809192019384549281850155019290620104f9565b5050565b8181146201051f578154916001600160401b03831162003b9b5762010549838362005b96565b60005260206000209060005260206000208154916000925b84841062010570575050505050565b600191820180546001600160a01b039092168486015593909101929062010561565b908082146201051f57620105a7815462004249565b906001600160401b03821162003b9b578190620105ca8262006663865462004249565b600090601f83116001146201060457600092620105f8575b50508160011b916000199060031b1c1916179055565b015490503880620105e2565b81526020808220858352818320935090601f1985169083905b8282106201065a57505090846001959493921062010640575b505050811b019055565b015460001960f88460031b161c1916905538808062010636565b84958192958501548155600180910196019401906201061d565b8181146201051f578154916201068b838362005ca7565b6000526020600020906000526020600020906000905b838210620106af5750505050565b80620106be6001928562010592565b928101929181019101620106a1565b8181146201051f57815491620106e4838362005d35565b6000526020600020906000526020600020906000905b838210620107085750505050565b806201071760019285620104bb565b928101929181019101620106fa565b8181146201051f578154916201073d838362005d35565b6000526020600020906000526020600020906000905b838210620107615750505050565b80620107706001928562010523565b92810192918101910162010753565b8181146201051f5781549162010796838362005dc3565b6000526020600020906000526020600020906000905b838210620107ba5750505050565b80620107c96001928562010674565b928101929181019101620107ac565b8181146201051f57815491620107ef838362005ed5565b6000526020600020906000526020600020906000905b838210620108135750505050565b80600191840362010830575b600980910193019101909162010805565b8054845581620108728186019183019160ff62010851818554168362005fc9565b8354936201086682600896871c168462005fe3565b5460101c169062006004565b620108846002808401908701620104bb565b6003828101919086018387036201089f575b5050506201081f565b6201090392620108af91620104bb565b620108c1600480850190880162010523565b620108d3600580850190880162010674565b620108e56006808501908801620106cd565b620108f7600780850190880162010726565b8083019086016201077f565b38808062010896565b91906200686a578082036201091f575050565b60ff600580620041d09462010938848654168262005fb0565b60018501546001820155620109546002860160028301620107d8565b6003850154600382015562010970600486016004830162010592565b01920162010982828254168462006070565b6201099482825460081c168462006081565b5460101c169062006099565b908082146201051f57908154906000915b60648310620109c05750505050565b6001809194019283549481840155019192620109b1565b9062013882546020600093019081515190620109f38262003c62565b9162010a03604051938462003c3e565b80835262010a14601f199162003c62565b0136602084013762010a2983515182620069da565b901562010d9a5762010a3b9062006777565b9085928451511562010d915762010a528262006777565b965b85515181101562010bda5760008080805b86811062010af15750905062010a878162010a81858762005ab0565b62004411565b600681101562003d035760031462010aac575b5062010aa69062005a5a565b62010a54565b6000905b80821062010abf575062010a9a565b909562010ae362010aea9162010ad6898d62005ab0565b5162000b13828a62005ab0565b9662005a5a565b9062010ab0565b62010b0a8162010b03878d5162005ab0565b51620111b3565b9390948083118062010bc6575b1562010b7d57505091838562010b73575b600681101562003d035760038e911462010b53575b505062010b4a9062005a5a565b91909162010a65565b9462010b6a9162000b138262010b4a959862005ab0565b93908c62010b3d565b6000955062010b28565b809492959195148062010bb2575b1562010b3d57600681101562003d035760038e911462010b5357505062010b4a9062005a5a565b50600681101562003d035780151562010b8b565b50600686101562003d035785151562010b17565b5093505090929350600093845b835186101562010d2c5762010c0762010c01878662005ab0565b62005fa2565b9060068083101562003d0357600292830362010c3257505062010c2b909562005a5a565b9462010be7565b62010c4262010c01898862005ab0565b928184101562003d035760018094148062010d18575b1562010c6d5750505062010c2b909562005a5a565b62010c8262010c018a899b9694959b62005ab0565b928084101562003d03576004809414928362010cec575b508262010cc1575b505062010cb5575b5062010c2b9062005a5a565b955062010c2b62010ca9565b90915088101562010cd757871415388062010ca1565b602182634e487b7160e01b6000525260246000fd5b908093508a101562010d0357891415913862010c99565b602184634e487b7160e01b6000525260246000fd5b508183101562003d03578083141562010c58565b925092909350600682101562003d03576003820362010d88575b62010d518162006777565b9360005b82811062010d64575050509190565b8062010d7562010d82928462005ab0565b5162000b13828962005ab0565b62010d55565b50600062010d46565b50909392505050565b60405162461bcd60e51b815260206004820152602a60248201527f546865206c656e677468206f6620766f74696e672072756c65206c697374206960448201526973206f766572666c6f7760b01b6064820152608490fd5b906201388354602060009301908151519062010e0e8262003c62565b9162010e1e604051938462003c3e565b80835262010e2f601f199162003c62565b0136602084013762010e4483515182620069da565b901562010d9a5762010e569062006777565b9085928451511562010d915762010e6d8262006777565b965b85515181101562010fdb5760008080805b86811062010ef25750905062010e9c8162010a81858762005ab0565b600681101562003d035760031462010ec1575b5062010ebb9062005a5a565b62010e6f565b6000905b80821062010ed4575062010eaf565b909562010ae362010eeb9162010ad6898d62005ab0565b9062010ec5565b62010f0b8162010f04878d5162005ab0565b516201124f565b9390948083118062010fc7575b1562010f7e57505091838562010f74575b600681101562003d035760038e911462010f54575b505062010f4b9062005a5a565b91909162010e80565b9462010f6b9162000b138262010f4b959862005ab0565b93908c62010f3e565b6000955062010f29565b809492959195148062010fb3575b1562010f3e57600681101562003d035760038e911462010f5457505062010f4b9062005a5a565b50600681101562003d035780151562010f8c565b50600686101562003d035785151562010f18565b5093505090929350600093845b8351861015620110fd576201100262010c01878662005ab0565b9060068083101562003d035760029283036201102d57505062011026909562005a5a565b9462010fe8565b6201103d62010c01898862005ab0565b928184101562003d0357600380941480620110e9575b15620110685750505062011026909562005a5a565b6201107d62010c018a899b9694959b62005ab0565b928084101562003d035760058094149283620110d2575b5082620110bc575b5050620110b0575b50620110269062005a5a565b955062011026620110a4565b90915088101562003d035787141538806201109c565b908093508a101562003d0357891415913862011094565b508183101562003d03578083141562011053565b925092909350600682101562003d0357600382036201114c575b620111228162006777565b9360005b82811062011135575050509190565b8062010d7562011146928462005ab0565b62011126565b50600062011117565b156201115d57565b60405162461bcd60e51b815260206004820152602860248201527f506c7567696e466163746f72793a20706c7567696e20696e646578206f7574206044820152676f662072616e676560c01b6064820152608490fd5b9091600080938193620111cc6201388254831062011155565b60ff6005620111db84620067f1565b50015460081c161562011243578282620111f7926001620113bb565b62011203575b50929190565b8094506001929350620112179150620067f1565b5001549060036201123860ff6201122e86620067f1565b50541694620067f1565b5001549138620111fd565b50509150915080918190565b9091600080938193620112686201388354831062011155565b60ff60056201127784620067af565b50015460081c161562011243578282620112929282620113bb565b6201129d5750929190565b8094506001929350620112b19150620067af565b5001549060036201123860ff620112c886620067af565b50541694620067af565b15620112da57565b60405162461bcd60e51b815260206004820152603160248201527f436865636b696e6720636f6e646974696f6e206578703a20706c7567696e20696044820152706e646578206f7574206f662072616e676560781b6064820152608490fd5b156201134157565b60405162461bcd60e51b815260206004820152602f60248201527f436865636b696e6720636f6e646974696f6e206578703a206e6f646520696e6460448201526e6578206f7574206f662072616e676560881b6064820152608490fd5b805482101562005a78576000526009602060002091020190600090565b9092919080156201172a57620113d762013882548310620112d2565b620113f36002620113e884620067f1565b500154841062011339565b80156201170c576201142360016201141a8560026201141287620067f1565b50016201139e565b50015460ff1690565b6201142e8162003db9565b806201143e575050505050600090565b620114498162003db9565b600381036201145c575050505050600190565b620114678162003db9565b600481036201147a575050505050600090565b620114858162003db9565b6001908082036201149e57505092620069809362011752565b909293620114ac8262003db9565b6002809214620114c2575b505050505050600090565b8215620116ef57620114eb84620114df8385620114128a620067f1565b50015460081c60ff1690565b925b60009586865b6201167d575b50620115058762006777565b9760005b88811062011620575050505050620115218262003cf8565b8183036201158057505091906000915b8183106201153f5750505090565b909192806201155d575b62011555909362005a5a565b919062011531565b50620115556201157862011572858462005ab0565b51151590565b905062011549565b9091506201158e8262003cf8565b8103620115e757509060009182915b818310620115ab5750505090565b9091928015620115ca575b620115c2909362005a5a565b91906201159d565b50620115c2620115df62011572858462005ab0565b9050620115b6565b60039150620115f68162003cf8565b14620116095750388080808080620114b7565b6201161c62011572620069809262005a6a565b1590565b808a6201165c6201165362011649848b620116418c82620114128d620067af565b500162006ac7565b90549060031b1c90565b868689620113bb565b6201167062011677946200046b9362005ab0565b9015159052565b62011509565b846201168f85826201141286620067af565b500154811015620116e957620116b56201164982876201164188826201141289620067af565b620116ce575b620116c7879162005a5a565b90620114f3565b96620116c7620116df889262005a5a565b98915050620116bb565b620114f9565b6201170584620114df8385620114128a620067af565b92620114ed565b6201172460016201141a8560026201141287620067af565b62011423565b6201173b62013883548310620112d2565b6201174c6002620113e884620067af565b620113f3565b9092916003620117a49183600014620118265760ff60016201177b8760026201141286620067f1565b50015460101c16945b841562011815576002620114126201179c93620067f1565b5001620044e5565b91603d81101562003d0357602c8103620117e5575050620117c86020915162005a6a565b51910151602281101562003d0357620117e19062012fee565b1490565b90929060018103620117fa5750505050600090565b6003146201180a57505050600090565b620069809262011896565b6002620114126201179c93620067af565b60ff60016201183c8760026201141286620067af565b50015460101c169462011784565b156201185257565b606460405162461bcd60e51b815260206004820152602060248201527f4f70657261746f722061646472657373206973206e6f742070726f76696465646044820152fd5b9190608062006dcd9201620118b06001825151146201184a565b620118cb6001620118c2835162005a6a565b5151146201184a565b516001600160a01b03928391620118e3919062005a6a565b51169215620118f25751161490565b51161490565b919082018092116200322957565b620119118162003db9565b6201191f6200d14962012f85565b6201192a8162003db9565b60018103620119495750620119426200d17562012f85565b6201388b55565b620119548162003db9565b600281036201196557506201388c55565b620119708162003db9565b600381036201198157506201388d55565b806201198f60049262003db9565b14620119985750565b6201388e55565b15620119a757565b60405162461bcd60e51b815260206004820152604d60248201527f546865206c656e677468206f662074686520706c7567696e20696e646578657360448201527f20617272617920616e642074686520626f6f6c65616e206172726179206d757360648201526c74206265207468652073616d6560981b608482015260a490fd5b1562011a3057565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c696420706c7567696e20696e64657820746f20626520656e61626c604482015261195960f21b6064820152608490fd5b1562011a8857565b60405162461bcd60e51b815260206004820152602b60248201527f54686520706c7567696e20746f20626520656e61626c6564206973206e6f742060448201526a1a5b9a5d1a585b1a5e995960aa1b6064820152608490fd5b1562011ae957565b60405162461bcd60e51b815260206004820152602b60248201527f54686520706c7567696e20746f20626520656e61626c656420697320616c726560448201526a18591e48195b98589b195960aa1b6064820152608490fd5b1562011b4a57565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c696420706c7567696e20696e64657820746f2062652064697361626044820152621b195960ea1b6064820152608490fd5b1562011ba357565b60405162461bcd60e51b815260206004820152602c60248201527f54686520706c7567696e20746f2062652064697361626c6564206973206e6f7460448201526b081a5b9a5d1a585b1a5e995960a21b6064820152608490fd5b1562011c0557565b60405162461bcd60e51b815260206004820152602d60248201527f54686520706c7567696e20746f2062652064697361626c656420697320616c7260448201526c1958591e48191a5cd8589b1959609a1b6064820152608490fd5b1562011c6857565b60405162461bcd60e51b815260206004820152603060248201527f546865206c656e677468206f662074617267657420616e6420746f6b656e436c60448201526f185cdcc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b1562011cce57565b60405162461bcd60e51b815260206004820152602c60248201527f546865206c656e677468206f662074617267657420616e6420616d6f756e742060448201526b1a5cc81b9bdd08195c5d585b60a21b6064820152608490fd5b1562011d3057565b60405162461bcd60e51b815260206004820152602260248201527f54686520746f6b656e20636c617373206973206e6f7420696e697469616c697a604482015261195960f21b6064820152608490fd5b1562011d8857565b60405162461bcd60e51b815260206004820152602960248201527f54686520746f74616c20737570706c79206f662074686520746f6b656e206973604482015268206f766572666c6f7760b81b6064820152608490fd5b1562011de757565b60405162461bcd60e51b8152602060048201526024808201527f5468652062616c616e6365206f662074686520746f6b656e206973206f766572604482015263666c6f7760e01b6064820152608490fd5b1562011e4057565b606460405162461bcd60e51b815260206004820152602060248201527f54686520746f6b656e20697320616c726561647920696e697469616c697a65646044820152fd5b604081019062011e9a6101008351015162005a6a565b519162011ebc60e062011eb1818451015162005a6a565b519251015162005a8e565b519362011ed184518351146200046462012e52565b62011ee484518651146200046462012e52565b60005b845181101562011f415762011efd818462005ab0565b519061271082101562005a785762011f3b9160018060a01b03865116600052600390811b016020526200046b60406000205462007da0838a62005ab0565b62011ee7565b5092919360005b83518110156201206c5762011f5e818462005ab0565b5190612710918281101562005a785760018060a01b03908189511660005260039081602091811b01815262011f9e60406000205462007e0d868962005ab0565b9062011fab868a62005ab0565b51918783101562005a78578462011fd893878f5116600052811b0184526040600020556200046462012f56565b62011fe4848862005ab0565b518581101562005a785782908462011ffd878c62005ab0565b5116600052811b0181526201201d60406000205462006dd4868962005ab0565b9190926201202c868a62005ab0565b519687101562005a785762012066966200046b956201204c888d62005ab0565b5116600052811b0190526040600020556200046462012fbb565b62011f48565b50506200e8306201207d9162012c2b565b90604051936201208d8562003bea565b60018552602036818701376001600160a01b036106e0819052905116620120b48562005a6a565b526000935b8151851015620123d757620120cf858362005ab0565b5194620120dd845162006777565b91600093620120ed825162006777565b6106a0528496855b875181101562012196576201211c6106e05162012113838b62005ab0565b51168b620129f8565b15806201215e575b6201213b575b620121359062005a5a565b620120f5565b956201215562012135916106e0516200977d8a8c62005ab0565b9690506201212a565b506127108a101562005a78576106e0516201217a828a62005ab0565b511660005260038a811b01602052604060002054151562012124565b509793929096949195976000986127108610159560031b9860038a019a5b895181101562012230578762005a78576106e051620121d4828c62005ab0565b51166000528b60205260406000205415620121fb575b620121f59062005a5a565b620121b4565b9762012227620121f5918b620122168c6106e0519262005ab0565b511662000b13826106a05162005ab0565b989050620121ea565b50949591939650985096909596806106805262005a785760040180610640525495620122616200811f8689620118f8565b61066052600097886106c0525b6106805162005a78576106c051888110156201230c576201229d620122b3916000610680526106405162006ac7565b6106e05191549060031b1c166106a05162012aba565b15620122d2575b620122c86106c05162005a5a565b6106c0526201226e565b976201230590620122ea6106c0516106405162006ac7565b6106e05191549060031b1c1662000b13826106605162005ab0565b97620122ba565b5095939096509690969391936000915b838310620123a657505050506106805162005a785761066051516001600160401b03811162003b9b5762012354816106405162005b96565b6020610660510161064051600052602060002060006106e051905b8481106201238f575050505050620123879062005a5a565b9392620120b9565b60019060208386511695019481850155016201236f565b620082b0620123d0916106e051620123bf868662005ab0565b511662000b13826106605162005ab0565b916201231c565b5050509050565b9080620123e9575050565b620041d091600052601f6020600020910160051c81019062005b56565b90600160401b811162003b9b5781548183558082106201242557505050565b620041d092600052601f6020600020918180850160051c840194168062012454575b500160051c019062005b56565b600019908186019182549160200360031b1c1690553862012447565b9060031b60ff811b9283911b169119161790565b62013884805482101562005a78576000526007602060002091020190600090565b600092620124bf620124b8859462012484565b5062004393565b9380935b855151851015620125ad575061271084101562005a785760039380851b9460018060a01b038516600052602090860181526201250c6040966001886000205491015490620069da565b93849115620125785790620125219162006c06565b9690156201253e575050620125369062005a5a565b9390620124c3565b60649250519062461bcd60e51b825260048201526014602482015273746f74616c20706f776572206f766572666c6f7760601b6044820152fd5b875162461bcd60e51b815260048101849052600e60248201526d706f776572206f766572666c6f7760901b6044820152606490fd5b93505092505090565b15620125be57565b60405162461bcd60e51b815260206004820152601360248201527263757272656e74596573206f766572666c6f7760681b6044820152606490fd5b6001620126068262012484565b5001546202712e546000928184526202712b90816020526201262f816003604088200162006ac7565b90549060031b1c918386528060205262012650826004604089200162006ac7565b90549060031b1c93865260205260ff6006620126856201267784600560408b200162006ac7565b90549060031b1c9362012484565b50015416620126d35750620126c39262001767620126b59383620126ad620126bb95620069a4565b9690620125b6565b620118f8565b9290620125b6565b1115620126cd5790565b50600190565b6200d4619250620126c393620126ed620126bb93620069a4565b9490620125b6565b9092919262012705825162006777565b60009162012714815162006777565b8390845b8651811015620127af576001600160a01b036201273b8162012113848b62005ab0565b15806201277a575b6201275b575b50620127559062005a5a565b62012718565b81966201277291620082a262012755948b62005ab0565b959062012749565b506127108a101562005a78578062012793838a62005ab0565b511660005260038a811b01602052604060002054151562012743565b509295919694509260005b87518110156201283e5761271086101562005a78576001600160a01b0380620127e4838b62005ab0565b5116600052600387811b016020526040600020541562012811575b506201280b9062005a5a565b620127ba565b81956201283691620128286201280b948c62005ab0565b511662000b13828862005ab0565b9490620127ff565b509250945092612710831015938462005a785760049586600395861b01968754946201286f6200811f8288620118f8565b9460009689889a5b620129e357818b10156201291857506000998b620128b26201289a838362006ac7565b90546001600160a01b0392918e1b1c82168a62012aba565b15620128d5575b505090620128ca8b94939262005a5a565b9a9091929362012877565b91998c959493929091620128eb908c9062006ac7565b9054908d1b1c16620128fe828b62005ab0565b526201290a9062005a5a565b9890919293508b38620128b9565b9697949a98505091975092506000915b838310620129be5750505050620129a9578051926001600160401b03841162012994575062012958838362005b96565b602080910191600052806000209060005b84811062012978575050505050565b83516001600160a01b0316838201559281019260010162012969565b604190634e487b7160e01b6000525260246000fd5b603283634e487b7160e01b6000525260246000fd5b620129dc90620082b0906001600160a01b036200977d868662005ab0565b9162012928565b603285634e487b7160e01b6000525260246000fd5b9060005b61271083101562005a78576003600484821b01805483101562012a57578262012a259162006ac7565b9054911b1c6001600160a01b039081169083161462012a4f5762012a499062005a5a565b620129fc565b505050600190565b5050505050600090565b9060005b61271083101562005a785760036201389784821b01805483101562012a57578262012a909162006ac7565b9054911b1c6001600160a01b039081169083161462012a4f5762012ab49062005a5a565b62012a65565b9060005b825181101562012af9576001600160a01b038062012add838662005ab0565b51169083161462012a4f5762012af39062005a5a565b62012abe565b505050600090565b801562003229576000190190565b9081519060005b600019838101848111620032295782101562012bdd576001820180831162003229575b84811062012b5457505062012b4e9062005a5a565b62012b16565b6001600160a01b038062012b69858962005ab0565b51168162012b78848a62005ab0565b51161462012b93575b5062012b8d9062005a5a565b62012b39565b8286929601828111620032295762012b8d9262012bd69262012bba62012bcf938b62005ab0565b511662012bc8898b62005ab0565b5262012b01565b9562012b01565b9062012b81565b50509062012beb8162006777565b9060005b81811062012bfe575090925050565b62012c25906001600160a01b0362012c17828862005ab0565b511662000b13828662005ab0565b62012bef565b80519160005b600019848101858111620032295782101562012ce3576001820180831162003229575b85811062012c6f57505062012c699062005a5a565b62012c31565b62012c7b838662005ab0565b5162012c88828762005ab0565b511462012ca1575b62012c9b9062005a5a565b62012c54565b9481810190808211620032295762012cd462012cdb9162012cc762012c9b948962005ab0565b5162012bc88a8a62005ab0565b9662012b01565b905062012c90565b5050909162012cf28162006777565b9060005b81811062012d05575090925050565b8062012d1662012d23928762005ab0565b5162000b13828662005ab0565b62012cf6565b60405162012d378162003b7f565b604481527f496e76616c6964206469766964656e64207065726d797269616420706572207460208201527f72616e73616374696f6e2e2053686f756c64206265206c657373207468616e206040820152630313030360e41b606082015290565b60405162012da58162003c22565b603281527f4e6f20656e6f756768206e756d626572206f66207472616e73616374696f6e7360208201527108199bdc88191a5d9a59195b991cc81e595d60721b604082015290565b60405162012dfb8162003bea565b601c81527b6469766964656e6473206f7065726174696f6e206f766572666c6f7760201b602082015290565b60405162012e358162003bea565b600d81526c2ab735b737bbb71022b93937b960991b602082015290565b60405162012e608162003bea565b6012815271496e76616c696420506172616d657465727360701b602082015290565b60405162012e908162003bea565b601581527413595b58995c88191bd95cc81b9bdd08195e1a5cdd605a1b602082015290565b60405162012ec38162003bea565b601781527613595b58995c881a5cc81b9bdd081cdd5cdc195b991959604a1b602082015290565b60405162012ef88162003bea565b601b81527a13595b58995c881a5cc8185b1c9958591e481cdd5cdc195b991959602a1b602082015290565b60405162012f318162003bea565b60158152744d656d62657220616c72656164792065786973747360581b602082015290565b60405162012f648162003bea565b60118152704e6f20656e6f7567682062616c616e636560781b602082015290565b60405162012f938162003bea565b6018815277125b9d985b1a59081c185c985b595d195c881d1bc81cd95d60421b602082015290565b60405162012fc98162003bea565b6015815274546f6b656e20616d6f756e74206f766572666c6f7760581b602082015290565b602281101562003d03578015620131dc5760018114620126cd5760028114620131d65760038114620131d05760048114620131ca5760058114620131c45760068114620131be5760078114620131b85760088114620131b25760098114620131ac57600a8114620131a657600b8114620131a057600c81146201319a57600d81146201319457600e81146201318e57600f81146201318857601081146201318257601181146201317c57601281146201317657601381146201317057601481146201316a57601581146201316457601881146201315e57601781146201315857601981146201315257601a81146201314c57601b81146201314657601c81146201314057601d81146201313a57601e81146201313457601f81146201312e576020811462013128576021146201312357600090565b602190565b50602090565b50601f90565b50601e90565b50601d90565b50601c90565b50601b90565b50601a90565b50601990565b50601790565b50601690565b50601590565b50601490565b50601390565b50601290565b50601190565b50601090565b50600f90565b50600e90565b50600d90565b50600c90565b50600b90565b50600a90565b50600990565b50600890565b50600790565b50600690565b50600590565b50600490565b50600390565b50600290565b50600090565b90815181101562005a78570160200190565b60405190620132038262003c22565b60288252604036602084013760005b601481106201322057505090565b6013908082039182116200322957600382901b916001600160fd1b03811603620032295760ff8083116200322957600192620132699084901b6001600160a01b03861662006983565b60f081168282160391821162003229576201328d9060f41b600f60f81b16620132f6565b82841b916001600160ff1b03841684036200322957620132ca9160001a620132b68489620131e2565b5360f81b6001600160f81b031916620132f6565b9281018091116200322957620132e9620132f09360001a9186620131e2565b5362005a5a565b62013212565b60f81c600a8110156201331f5760300160ff8111620032295760f81b6001600160f81b03191690565b60570160ff8111620032295760f81b6001600160f81b0319169056fe546865206c656e677468206f662061646472657373657320616e6420746f6b651f4fe3ad533e3985b88710ce05a205152f02825e155777f3bcb8b3bbfcfb03a24ad859a97f543436e70c22b09d31fb4c7b9e987d7a008c98817c9b50a97b1224546865206c656e677468206f6620746f6b656e436c61737320616e6420746f6b546865206c656e677468206f6620746f6b656e496e666f20616e6420746f6b658e71c125ecfe4aeed61c8cf4b09183dd0bf2a3230d826486f04e5f6f0de58e2c18baa939e2e21be0e012ec26e9ec87e9e6faa065bd9f5835250457786300ece8546865206265666f7265206f7065726174696f6e20706c7567696e2073797374546865206c656e677468206f662061646472657373657320616e6420616d6f75a26469706673582212205acddd0e839937cf85abeb6e0ca1497280e5aef0b9680f5ad71a86008aa58f3864736f6c63430008110033",
- "deployedBytecode": "0x6107008060405260043610156200001557600080fd5b600090813560e01c908163036ee8501462003b2e575080630e5a3b2914620037d057806310ade3ea14620037a05780631797631d14620037185780631c75255a14620036b257806323b65c78146200362a57806341d1a43814620035f657806356424cf414620035155780635c00d98714620034c45780635d0b184914620034a25780635f1231ea14620033c85780635f5d5f001462003340578063681ece9d14620032fb57806379532bfe14620032d95780637daa10ce14620032bc5780638129fc1c1462002ef9578063864f9f7a1462002eba57806386ad77e21462002ba75780638c7a63ae1462002b355780639f36145f14620017f5578063a064c4f1146200172c578063a2f7d1011462000504578063acf80bc414620004c5578063aefca42a14620004a3578063afc820aa146200037e578063bba5103014620001f4578063d5a172f214620001c75763d6a93c51146200017357600080fd5b34620001c45780600319360112620001c4575b61271081106200019c575b602090604051908152f35b60ff60078260031b01541615620001be57620001b89062005a5a565b62000186565b62000191565b80fd5b5034620001c45780600319360112620001c45762027126546040516001600160a01b039091168152602090f35b5034620001c45780600319360112620001c4576202712e548082526202712b9160209083825260029384604083200154946200024d620002348762003c62565b9662000244604051988962003c3e565b80885262003c62565b8685019290601f1901368437835b86855281865282604086200154811015620003285760405163083a348760e31b815260048101829052602487828281305afa9182156200031d578792620002da575b50620002aa838b62005ab0565b906003831015620002c8575052620002c29062005a5a565b6200025b565b634e487b7160e01b8852602160045287fd5b9091508781813d831162000315575b620002f5818362003c3e565b810103126200031157516003811015620003115790386200029d565b8680fd5b503d620002e9565b6040513d89823e3d90fd5b505060408051858152875181870181905290948594928501935086905b8281106200035557505050500390f35b91938395509080826200036d60019483975162003d5f565b019501910191859493919262000345565b506020366003190112620001c4576004356001600160401b0381116200049f57620003ae90369060040162004d21565b805190916001600160a01b039162000403908316620003fa620003db620003d533620131f4565b62005923565b620003f3620003ed87895116620131f4565b62005989565b90620059e0565b90331462005a27565b9060208301915b825180518210156200047757906200046b6200047192846200042e84339362005ab0565b515116146200046462000445620003d533620131f4565b620003f3620003ed886200045b888c5162005ab0565b515116620131f4565b9062005a27565b62005a5a565b6200040a565b6200049b620004868662006d3f565b60405191829160208352602083019062003d92565b0390f35b5080fd5b5034620001c45780600319360112620001c45760206202712854604051908152f35b5034620001c4576020366003190112620001c4576020906040906001600160a01b03620004f162003b4e565b1681526201388783522054604051908152f35b5034620001c4576040366003190112620001c4576004356001600160401b0381116200049f576200053a90369060040162004a4f565b6024356001600160401b03811162001728576200055c90369060040162004d21565b620271298054600260ff8216620005738162003cf8565b14620016e35760ff191660021790556202712e54600181018111620016cf57600181016202712e558391845b84518110156200060257836002620005c3620005bc848962005ab0565b5162012484565b50015410620005de575b620005d89062005a5a565b6200059f565b9250620005d86002620005f6620005bc868862005ab0565b500154939050620005cd565b509093918291825b8551811015620006665784600362000627620005bc848a62005ab0565b5001541062000642575b6200063c9062005a5a565b6200060a565b93506200063c60036200065a620005bc878962005ab0565b50015494905062000631565b50600190950182526202712b602090815260408320865181546001600160a01b0319166001600160a01b039190911617815595015180519295919290600160401b821162000be5576001830154826001850155808310620014ee575b50602060019101920186526020862086925b82841062000c235750505050620006ec835162006777565b6202712e5485526202712b6020526004604086200181519160018060401b03831162000be55760209062000721848462005b96565b0190865260208620865b83811062000c0e575050505062000743835162006777565b6202712e5485526202712b6020526003604086200181519160018060401b03831162000be55760209062000778848462005b96565b0190865260208620865b83811062000bf957505050506200079a835162006777565b6202712e5485526202712b6020526005604086200181519160018060401b03831162000be557602090620007cf848462005b96565b0190865260208620865b83811062000bd05750505050620007f1904262006c06565b6202712e5485526202712b60205260066040862001551562000b90576200082e906202712e5484526202712b602052600660408520015462006c06565b60076040852001551562000b4d576202712e5482526202712b60205260086040832001600260ff1982541617905562000868815162006777565b6202712e5483526202712b6020526002604084200181519160018060401b03831162000b39576020906200089d848462005b96565b0190845260208420845b83811062000b24578585815b81518110156200091457806200046b620008d26200090e938562005ab0565b516202712e5486526202712b602052620008f3836002604089200162006ac7565b90919082549060031b600019811b9283911b16911916179055565b620008b3565b50815b815181101562000b20576202712e54928381526202712b6020526200095462000947836002604085200162006ac7565b90549060031b1c62012484565b505491620009628362006777565b92825b81811062000acf5750508182905b845182101562000a9f5762000989828662005ab0565b5161271081101562000a8b5760031b60010154620009a8838762005ab0565b5161271081101562000a775760031b60060154620009c691620069da565b901562000a3357620009d89162006c06565b919015620009f257620009eb9062005a5a565b9062000973565b60405162461bcd60e51b8152602060048201526019602482015278746f74616c566f74696e67506f776572206f766572666c6f7760381b6044820152606490fd5b606460405162461bcd60e51b815260206004820152602060248201527f63757272656e74436c617373566f74696e67506f776572206f766572666c6f776044820152fd5b634e487b7160e01b86526032600452602486fd5b634e487b7160e01b85526032600452602485fd5b905062000ac993506200046b91929586526202712b602052620008f3836005604089200162006ac7565b62000917565b62000b1a908785526202712b60205262000b008162000af96200094787600260408b200162006ac7565b5062006ac7565b90549060031b1c62000b13828862005ab0565b5262005a5a565b62000965565b8280f35b600190602084519401938184015501620008a7565b634e487b7160e01b85526041600452602485fd5b60405162461bcd60e51b815260206004820152601b60248201527a657865637574696e6720656e642074696d65206f766572666c6f7760281b6044820152606490fd5b60405162461bcd60e51b8152602060048201526018602482015277766f74696e6720656e642074696d65206f766572666c6f7760401b6044820152606490fd5b600190602084519401938184015501620007d9565b634e487b7160e01b87526041600452602487fd5b60019060208451940193818401550162000782565b6001906020845194019381840155016200072b565b805180518354602083015190916001600160a01b0316906022811015620014da576001600160a81b03199092161760a09190911b60ff60a01b161783556040015180518051906001600160401b0382116200103d576020600186019162000c8b848462005b96565b01908b5260208b208b5b838110620014c5575050505060208101518051906001600160401b0382116200103d576020600286019162000ccb848462005b96565b01908b5260208b208b5b838110620014a7575050505060038301604082015190602082519262000cfc848462005ca7565b01908b5260208b20908b905b838210620013bc5750505050606081015180516001600160401b0381116200103d576020600486019262000d3d838562012406565b01918b5260208b20908b5b8160051c8110620013815750601f19811681036200133e575b5050506080810151805190600160401b82116200103d576005850154826005870155808310620012bb575b5060200190600585018b5260208b20918b905b82821062001103575050505060a0810151805190600160401b82116200103d57600685015482600687015580831062001072575b50602001600685018b5260208b20908b905b83821062001051575050505060c081015180516001600160401b0381116200103d576020600786019262000e1a838562012406565b01918b5260208b20908b5b8160051c811062000fff5750601f198116810362000fb3575b5050506008830160e082015190602082519262000e5c848462005d35565b01908b5260208b20908b905b83821062000f3c57505050506101006009840191015190602082519262000e90848462005d35565b01908a5260208a20908a905b83821062000ebc5750505050600a602060019201920193019290620006d4565b80518051906001600160401b03821162000f28578460208f9262000ee1858462005b96565b0191528d60208120905b83811062000f0a57505050506001602081920193019101909162000e9c565b82516001600160a01b03168183015560209092019160010162000eeb565b634e487b7160e01b8e52604160045260248efd5b80518051906001600160401b03821162000f9f5760208f9162000f60848862005b96565b019085815260208120905b83811062000f8a57505050506001602081920193019101909162000e68565b60019060208451940193818401550162000f6b565b634e487b7160e01b8f52604160045260248ffd5b8b928c5b601f1983168303811062000fd557505060051c015538808062000e3e565b9093602062000ff56001928488519162000fef8362003db9565b62012470565b9501910162000fb7565b8c8d5b602081106200101957508382015560010162000e25565b94906020620010336001928885519162000fef8362003db9565b9201950162001002565b634e487b7160e01b8b52604160045260248bfd5b6006602082620010656001945187620060b3565b0193019101909162000de5565b6006818102048103620010ef576006838102048303620010ef57600686018c5260208c208360060281015b8d8360060283018210620010b45750505062000dd3565b90816006928255806001830155620010cf6002830162005e12565b806003830155620010e36004830162005c16565b6005820155016200109d565b634e487b7160e01b8c52601160045260248cfd5b805180518051906001600160401b03821162001291578f906020906200112a848a62005b96565b019087815260208120905b838110620012a6575050505060208101516001860155604081015160028601556060810151600386015562001174608082015115156004870162006070565b60a08101518051906001600160401b03821162001291578f90620011ab83620011a160058b015462004249565b60058b0162006026565b602091601f841160011462001212576007948460209560019895620011f99560c0959262001206575b5050600019600383901b1c191690881b1760058b01555b015115156006890162006070565b0194019101909262000d9f565b015190503880620011d4565b919060058901835260208320925b601f1985168110620012785750600794600185819895620011f99560c095602099601f198116106200125e575b505050811b0160058b0155620011eb565b015160001960f88460031b161c191690553880806200124d565b9192602060018192868501518155019401920162001220565b50634e487b7160e01b8f52604160045260248ffd5b60019060208451940193818401550162001135565b6007818102048103620010ef576007838102048303620010ef57600586018c5260208c208360070281015b8d8360070283018210620012fd5750505062000d8c565b906007916200130c8262005b6f565b806001830155806002830155806003830155806004830155620013326005830162005c16565b600682015501620012e6565b8b928c5b601f198316830381106200136057505060051c015538808062000d61565b909360206200137760019284885115159162012470565b9501910162001342565b8c8d5b602081106200139b57508382015560010162000d48565b94906020620013b260019288855115159162012470565b9201950162001384565b80518051906001600160401b03821162000f9f578e90620013ea83620013e3885462004249565b8862006026565b602091601f841160011462001438579280602093600196938796926200142c575b5050600019600383901b1c191690841b1786555b0193019101909162000d08565b0151905038806200140b565b9190601f19841687845260208420935b8181106200148e575093602093600196938796938388951062001474575b505050811b0186556200141f565b015160001960f88460031b161c1916905538808062001466565b9293602060018192878601518155019501930162001448565b82516001600160a01b03168183015560209092019160010162000cd5565b60019060208451940193818401550162000c95565b634e487b7160e01b8c52602160045260248cfd5b600a818102048103620016bb57600a838102048303620016bb576001840188526020882083600a0281015b82600a02820181106200152e575050620006c2565b8981556200153f6001820162005b6f565b6200154d6002820162005b6f565b6200155b6003820162005c68565b6200156f600482018054908c8155620123de565b60058101548a6005830155806200164c575b5060068101548a600683015580620015cf575b5080620015ac6007600a93018054908d8155620123de565b620015ba6008820162005cf6565b620015c86009820162005cf6565b0162001519565b60068181020481036200163857600682018b5260208b20906006028101905b818110620015fd575062001594565b808c600692558c6001820155620016176002820162005e12565b8c60038201556200162b6004820162005c16565b8c600582015501620015ee565b634e487b7160e01b8b52601160045260248bfd5b60078181020481036200163857600582018b5260208b20906007028101905b8181106200167a575062001581565b806200168860079262005b6f565b8c60018201558c60028201558c60038201558c6004820155620016ae6005820162005c16565b8c6006820155016200166b565b634e487b7160e01b88526011600452602488fd5b634e487b7160e01b84526011600452602484fd5b60405162461bcd60e51b815260206004820152601d60248201527f766f74696e6720697320616c726561647920696e2070726f67726573730000006044820152606490fd5b8280fd5b5034620001c4576020366003190112620001c45760043590612710821015620017e1576200176e826200176760018260031b01549162006b44565b90620069da565b90156200178057602090604051908152f35b60405162461bcd60e51b815260206004820152603360248201527f73756d566f74696e67576569676874466f72546f6b656e436c6173733a20766f60448201527274696e67576569676874206f766572666c6f7760681b6064820152608490fd5b634e487b7160e01b81526032600452602490fd5b5034620001c4576020366003190112620001c45760043581526202712b602052604080822081519182016001600160401b0381118382101762002b215760405280546001600160a01b03168252600181018054620018538162003c62565b9162001863604051938462003c3e565b81835285526020808620869184015b838310620018d957620018ae878787602083015260ff600682015491600860078201549101549060405195869560a0875260a0870190620045b5565b9360208601526040850152620018ca6060850183831662003d5f565b60081c16151560808301520390f35b6040516001600160401b03606082019081119082111762002b0d576060810160405282546001600160a01b0381168252602260a082901c60ff16101562002af95760a01c60ff1660208201526040516001600160401b0361012082019081119082111762002ae5576101208101604052620019576001850162004198565b81526200196760028501620041ed565b60208201526200197a6003850162004336565b6040820152600484018a604051809283916020825491828152019184526020842093905b80601f830110620029115762001ae1945491818110620028fa575b818110620028e0575b818110620028c6575b818110620028ac575b81811062002893575b81811062002879575b8181106200285f575b81811062002845575b8181106200282b575b81811062002811575b818110620027f7575b818110620027dd575b818110620027c3575b818110620027a9575b8181106200278f575b81811062002775575b8181106200275b575b81811062002741575b81811062002727575b8181106200270d575b818110620026f3575b818110620026d9575b818110620026bf575b818110620026a5575b8181106200268b575b81811062002671575b81811062002657575b8181106200263d575b81811062002623575b81811062002609575b818110620025ef575b10620025de575b509b9a999897969594939b038262003c3e565b60608a015260058301805462001af78162003c62565b9162001b07604051938462003c3e565b8183528c526020808d20908d9084015b838210620025a9575050505060808a01526006830198895462001b3a8162003c62565b9a62001b4a6040519c8d62003c3e565b818c5260208c01908d528c6020812091815b8483106200243a57505050505090919293949596979860a0820152604051806007860190602082549182815201918d5260208d20908d915b81601f840110620021315784600a97946020979460019a979462001cdb94549181811062002113575b818110620020f2575b818110620020d1575b818110620020b0575b81811062002090575b8181106200206f575b8181106200204e575b8181106200202d575b8181106200200c575b81811062001feb575b81811062001fca575b81811062001fa9575b81811062001f88575b81811062001f67575b81811062001f46575b81811062001f25575b81811062001f04575b81811062001ee3575b81811062001ec2575b81811062001ea1575b81811062001e80575b81811062001e5f575b81811062001e3e575b81811062001e1d575b81811062001dfc575b81811062001ddb575b81811062001dba575b81811062001d99575b81811062001d78575b81811062001d57575b81811062001d36575b1062001d1b575b50038262003c3e565b60c082015262001cee600888016200442b565b60e082015262001d016009880162004488565b610100820152604082015281520192019201919062001872565b90889160f81c62001d2c8162003db9565b8152013862001cd2565b928a8d9160ff8560f01c1662001d4c8162003db9565b815201930162001ccb565b928a8d9160ff8560e81c1662001d6d8162003db9565b815201930162001cc2565b928a8d9160ff8560e01c1662001d8e8162003db9565b815201930162001cb9565b928a8d9160ff8560d81c1662001daf8162003db9565b815201930162001cb0565b928a8d9160ff8560d01c1662001dd08162003db9565b815201930162001ca7565b928a8d9160ff8560c81c1662001df18162003db9565b815201930162001c9e565b928a8d9160ff8560c01c1662001e128162003db9565b815201930162001c95565b928a8d9160ff8560b81c1662001e338162003db9565b815201930162001c8c565b928a8d9160ff8560b01c1662001e548162003db9565b815201930162001c83565b928a8d9160ff8560a81c1662001e758162003db9565b815201930162001c7a565b928a8d9160ff8560a01c1662001e968162003db9565b815201930162001c71565b928a8d9160ff8560981c1662001eb78162003db9565b815201930162001c68565b928a8d9160ff8560901c1662001ed88162003db9565b815201930162001c5f565b928a8d9160ff8560881c1662001ef98162003db9565b815201930162001c56565b928a8d9160ff8560801c1662001f1a8162003db9565b815201930162001c4d565b928a8d9160ff8560781c1662001f3b8162003db9565b815201930162001c44565b928a8d9160ff8560701c1662001f5c8162003db9565b815201930162001c3b565b928a8d9160ff8560681c1662001f7d8162003db9565b815201930162001c32565b928a8d9160ff8560601c1662001f9e8162003db9565b815201930162001c29565b928a8d9160ff8560581c1662001fbf8162003db9565b815201930162001c20565b928a8d9160ff8560501c1662001fe08162003db9565b815201930162001c17565b928a8d9160ff8560481c16620020018162003db9565b815201930162001c0e565b928a8d9160ff8560401c16620020228162003db9565b815201930162001c05565b928a8d9160ff8560381c16620020438162003db9565b815201930162001bfc565b928a8d9160ff8560301c16620020648162003db9565b815201930162001bf3565b928a8d9160ff8560281c16620020858162003db9565b815201930162001bea565b928a8d9160ff85831c16620020a58162003db9565b815201930162001be1565b928a8d9160ff8560181c16620020c68162003db9565b815201930162001bd8565b928a8d9160ff8560101c16620020e78162003db9565b815201930162001bcf565b928a8d9160ff8560081c16620021088162003db9565b815201930162001bc6565b928a8d9160ff8516620021268162003db9565b815201930162001bbd565b926001610400602092865460ff81166200214b8162003db9565b825260ff8160081c166200215f8162003db9565b8583015260ff8160101c16620021758162003db9565b604083015260ff8160181c166200218c8162003db9565b606083015260ff81861c16620021a28162003db9565b608083015260ff8160281c16620021b98162003db9565b60a0830152620021cf60ff8260301c1662003db9565b60ff8160301c1660c083015260ff8160381c16620021ed8162003db9565b60e083015260ff8160401c16620022048162003db9565b61010083015260ff8160481c166200221c8162003db9565b61012083015260ff8160501c16620022348162003db9565b61014083015260ff8160581c166200224c8162003db9565b61016083015260ff8160601c16620022648162003db9565b61018083015260ff8160681c166200227c8162003db9565b6101a083015260ff8160701c16620022948162003db9565b6101c083015260ff8160781c16620022ac8162003db9565b6101e083015260ff8160801c16620022c48162003db9565b61020083015260ff8160881c16620022dc8162003db9565b61022083015260ff8160901c16620022f48162003db9565b61024083015260ff8160981c166200230c8162003db9565b61026083015260ff8160a01c16620023248162003db9565b61028083015260ff8160a81c166200233c8162003db9565b6102a083015260ff8160b01c16620023548162003db9565b6102c083015260ff8160b81c166200236c8162003db9565b6102e083015260ff8160c01c16620023848162003db9565b61030083015260ff8160c81c166200239c8162003db9565b61032083015260ff8160d01c16620023b48162003db9565b61034083015260ff8160d81c16620023cc8162003db9565b61036083015260ff8160e01c16620023e48162003db9565b61038083015260ff8160e81c16620023fc8162003db9565b6103a083015260ff8160f01c16620024148162003db9565b6103c083015260f81c620024288162003db9565b6103e082015201940192019162001b94565b60405190620024498262003bcd565b6200245960ff8654168362004411565b600185015460208301526002850154620024738162003c62565b9162002483604051938462003c3e565b81835260028701815260208082209084015b8383106200251b57505050509d9e95969798999a9b9c9d600192826020926040600695015260038701546060820152620024d26004880162004286565b608082015260ff6005880154818116151560a0840152818160081c16151560c084015260101c16151560e08201528152019301910190918e9d9c9b9a9998979695949d62001b5c565b60096020600192604051620025308162003bb1565b855481526200257460ff868801548181166200254c8162003db9565b86850152818160081c16620025618162003cf8565b604085015260101c16606083016200441e565b620025826002870162004198565b60808201526200259560038701620044e5565b60a082015281520192019201919062002495565b600760209d9e969798999a9b9c9d600192620025c58662004393565b8152019301910190919c9b9a9998979695949c62001b17565b60f81c151581526020013862001ace565b92602060019160ff8560f01c161515815201930162001ac7565b92602060019160ff8560e81c161515815201930162001abe565b92602060019160ff8560e01c161515815201930162001ab5565b92602060019160ff8560d81c161515815201930162001aac565b92602060019160ff8560d01c161515815201930162001aa3565b92602060019160ff8560c81c161515815201930162001a9a565b92602060019160ff8560c01c161515815201930162001a91565b92602060019160ff8560b81c161515815201930162001a88565b92602060019160ff8560b01c161515815201930162001a7f565b92602060019160ff8560a81c161515815201930162001a76565b92602060019160ff8560a01c161515815201930162001a6d565b92602060019160ff8560981c161515815201930162001a64565b92602060019160ff8560901c161515815201930162001a5b565b92602060019160ff8560881c161515815201930162001a52565b92602060019160ff8560801c161515815201930162001a49565b92602060019160ff8560781c161515815201930162001a40565b92602060019160ff8560701c161515815201930162001a37565b92602060019160ff8560681c161515815201930162001a2e565b92602060019160ff8560601c161515815201930162001a25565b92602060019160ff8560581c161515815201930162001a1c565b92602060019160ff8560501c161515815201930162001a13565b92602060019160ff8560481c161515815201930162001a0a565b92602060019160ff8560401c161515815201930162001a01565b92602060019160ff8560381c1615158152019301620019f8565b92602060019160ff8560301c1615158152019301620019ef565b92602060019160ff8560281c1615158152019301620019e6565b92602060019160ff85831c1615158152019301620019dd565b92602060019160ff8560181c1615158152019301620019d4565b92602060019160ff8560101c1615158152019301620019cb565b92602060019160ff8560081c1615158152019301620019c2565b92602060019160ff851615158152019301620019b9565b916020919350610400600191865460ff81161515825260ff8160081c1615158583015260ff8160101c161515604083015260ff8160181c161515606083015260ff8160808282891c16151581860152828260281c16151560a0860152828260c092828260301c16151584890152828260381c16151560e0890152828260401c161515610100890152828260481c161515610120890152828260501c161515610140890152828260581c161515610160890152828260601c161515610180890152828260681c1615156101a0890152828260701c1615156101c0890152828260781c1615156101e08901521c161515610200860152828260881c161515610220860152828260901c161515610240860152828260981c161515610260860152828260a01c161515610280860152828260a81c1615156102a0860152828260b01c1615156102c0860152828260b81c1615156102e08601521c16151561030083015260ff8160c81c16151561032083015260ff8160d01c16151561034083015260ff8160d81c16151561036083015260ff8160e01c16151561038083015260ff8160e81c1615156103a083015260ff8160f01c1615156103c083015260f81c15156103e08201520194019201849293916200199e565b634e487b7160e01b8a52604160045260248afd5b634e487b7160e01b8a52602160045260248afd5b634e487b7160e01b89526041600452602489fd5b634e487b7160e01b84526041600452602484fd5b5034620001c4576020366003190112620001c45760043590612710821015620017e1575060031b600181015460028201549162002b9d62002b7e60056006840154930162004286565b6040519485948552602085015260806040850152608084019062003d92565b9060608301520390f35b5034620001c45780600319360112620001c45762013882805462002bcb8162003c62565b9162002bdb604051938462003c3e565b81835283526020808420849184015b83831062002d8c5785856201388380549062002c068262003c62565b9362002c16604051958662003c3e565b82855260208501918152602081209080925b84841062002c5e5762002c4f866200049b8960405193849360408552604085019062003f44565b90838203602085015262003f44565b60405162002c6c8162003bcd565b62002c7c60ff8554168262004411565b6001840154602082015260028401805462002c978162003c62565b9162002ca7604051938462003c3e565b8183528552602080862090869084015b83821062002d26575050505060019282602092604060069501526003870154606082015262002ce96004880162004286565b608082015260ff6005880154818116151560a0840152818160081c16151560c084015260101c16151560e082015281520193019301929162002c28565b6009602060019260405162002d3b8162003bb1565b8654815262002d5760ff868901548181166200254c8162003db9565b62002d656002880162004198565b608082015262002d7860038801620044e5565b60a082015281520193019101909162002cb7565b60405162002d9a8162003bcd565b62002daa60ff8454168262004411565b6001830154602082015260028301805462002dc58162003c62565b9162002dd5604051938462003c3e565b81835289526020808a20908a9084015b83821062002e54575050505060019282602092604060069501526003860154606082015262002e176004870162004286565b608082015260ff6005870154818116151560a0840152818160081c16151560c084015260101c16151560e082015281520192019201919062002bea565b6009602060019260405162002e698162003bb1565b8654815262002e8560ff868901548181166200254c8162003db9565b62002e936002880162004198565b608082015262002ea660038801620044e5565b60a082015281520193019101909162002de5565b5034620001c4576020366003190112620001c4576020906040906001600160a01b0362002ee662003b4e565b1681526201388583522054604051908152f35b5034620001c45780600319360112620001c4576202712680546001600160a01b0319163317905562027129805460ff19166001908117909155604051909190819062002f458162003c06565b5290620138828054600082558062003253575b508252818060405162002f6b8162003c06565b526200323f576201388380546000825580620031c0575b5082526127106202712a556040519162002f9c8362003bea565b818352805b60208082101562003017576040516020929162002fbe8262003bb1565b8482528481830152846040830152606085818401526080908082850152806040519262002feb8462003bb1565b8184528185850152816040850152818085015283015260a0908183015283015282870101520162002fa1565b8284620031b0876040516200302c8162003c06565b8481526040516200303d8162003c06565b8581526040516200304e8162003c06565b8681526040516200305f8162003c06565b878152604051620030708162003c06565b88815260405191620030828362003c06565b89835260405193620030948562003c06565b8a855260405195620030a68762003bb1565b8652602086015260408501526060840152608083015260a082015260405191620030d08362003bb1565b86835260036020840152866040840152866060840152608083015260a0820152620030fb8262005a6a565b52620031078162005a6a565b506200315e6040516200311a8162003bcd565b600481528460208201528260408201528560608201526040516200313e8162003c06565b86815260808201528460a08201528460c08201528460e082015262006833565b604051906200316d8262003bcd565b600282528360208301526040820152836060820152604051620031908162003c06565b84815260808201528260a08201528260c08201528360e082015262006880565b6113886201388b556201388c5580f35b925060068381029381850403620032295760009382855260208520908101905b818110620031f057505062002f82565b80868492558686820155620032086002820162005e12565b8660038201556200321c6004820162005c16565b86600582015501620031e0565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b82526041600452602482fd5b925060068381029381850403620032295760009382855260208520908101905b8181106200328357505062002f58565b808684925586868201556200329b6002820162005e12565b866003820155620032af6004820162005c16565b8660058201550162003273565b5034620001c45780600319360112620001c4576020604051338152f35b5034620001c45780600319360112620001c45760206202712d54604051908152f35b5034620001c4576020366003190112620001c45760043590612710821015620017e1576200049b6200333360048460031b01620041ed565b6040519182918262003d19565b5034620001c45780600319360112620001c4576040516201388180548083529083526020808301937fcd6f7cece5c70f73af31bb8ed8b80ae1c2a9e5eb261bd5ab2d9374b0c38719c892915b828210620033a7576200049b85620033338189038262003c3e565b83546001600160a01b0316865294850194600193840193909101906200338c565b5034620001c45760209081600319360112620001c457604090620033eb62003b4e565b8160608451620033fb8162003b7f565b82815286810183905285810182905201526001600160a01b0316815262013880835220604051906200342d8262003b7f565b6200349781549160ff83161515845260ff8585019360081c161515835260026200345a6001830162004286565b916040860192835201549260608501938452604051958695818752511515908601525115156040850152516080606085015260a084019062003d92565b905160808301520390f35b5034620001c45780600319360112620001c45760206202712e54604051908152f35b5034620001c4576020366003190112620001c45760043590612710821015620017e15760206200350d62003505846200176760028260031b01549162006b44565b9190620068ec565b604051908152f35b5034620001c45780600319360112620001c4576201388b54620035726200353b62012d29565b916200354d6127109384831062005a27565b620035676201388e546201388c5411156200046462012d97565b6201388d54620069da565b90506200357e62012ded565b50825b828110620035a4575b60206200359a8585850462006c94565b9050604051908152f35b909260ff60078360031b01541615620035ee5781620035d8620035e492620035d16200046b969562006959565b9062006c06565b94906200046462012ded565b9290919262003581565b92906200358a565b5034620001c4576020366003190112620001c457602062003619600435620125f9565b62003628604051809262003d5f565bf35b5034620001c45780600319360112620001c4576040516201388680548083529083526020808301937f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa492915b82821062003691576200049b85620033338189038262003c3e565b83546001600160a01b03168652948501946001938401939091019062003676565b5034620001c4576040366003190112620001c4576004356024356001600160a01b03811690819003620017285761271082101562003704579160036040926020948352811b0183522054604051908152f35b634e487b7160e01b83526032600452602483fd5b5034620001c45780600319360112620001c4576040516201388880548083529083526020808301937ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df92915b8282106200377f576200049b85620033338189038262003c3e565b83546001600160a01b03168652948501946001938401939091019062003764565b5034620001c45780600319360112620001c457602060ff62027129541660405190620037cc8162003cf8565b8152f35b5034620001c4576040366003190112620001c457620037ee62003b4e565b60249081356001600160401b03811162003b2a576200381290369060040162003c88565b91600260ff620271295416620038288162003cf8565b0362003aea576202712d5442101562003aac5760018060a01b0382168085526202712c92602093808552604087206202712e91825491828a52875260ff60408a20541662003a6e57875194828a526202712b95868952600260408c2001540362003a08578952865260408820908852855260408720956001968760ff198254161790558688905b620038b8578880f35b815181101562003a0457620038ce818362005ab0565b51156200397e578254808a528588526200392388620008f3848d60406003918c620039158d620035d1876200390881898989200162006ac7565b905490891b1c92620124a5565b979099835252200162006ac7565b156200393b57620039349062005a5a565b87620038af565b60405162461bcd60e51b815260048101889052601c818801527b766f74696e6720666f7220706f776572596573206f766572666c6f7760201b6044820152606490fd5b8254808a52858852620039b188620008f3848d60406003918c620039158d620035d1876200390881898989200162006ac7565b15620039c257620039349062005a5a565b60405162461bcd60e51b815260048101889052601b818801527a766f74696e6720666f7220706f7765724e6f206f766572666c6f7760281b6044820152606490fd5b8880f35b60405162461bcd60e51b8152600481018990526039818901527f746865206e756d626572206f6620766f74657320646f6573206e6f74206d6174604482015278636820746865206e756d626572206f6620706f6c696369657360381b6064820152608490fd5b60405162461bcd60e51b815260048101889052601781880152761d9bdd195c881a185cc8185b1c9958591e481d9bdd1959604a1b6044820152606490fd5b60649060176040519162461bcd60e51b835260206004840152820152761d9bdd1a5b99c81c195c9a5bd9081a185cc8195b991959604a1b6044820152fd5b60649060196040519162461bcd60e51b83526020600484015282015278766f74696e67206973206e6f7420696e2070726f677265737360381b6044820152fd5b8380fd5b9050346200049f57816003193601126200049f5760209062027127548152f35b600435906001600160a01b038216820362003b6557565b600080fd5b35906001600160a01b038216820362003b6557565b608081019081106001600160401b0382111762003b9b57604052565b634e487b7160e01b600052604160045260246000fd5b60c081019081106001600160401b0382111762003b9b57604052565b61010081019081106001600160401b0382111762003b9b57604052565b604081019081106001600160401b0382111762003b9b57604052565b602081019081106001600160401b0382111762003b9b57604052565b606081019081106001600160401b0382111762003b9b57604052565b601f909101601f19168101906001600160401b0382119082101762003b9b57604052565b6001600160401b03811162003b9b5760051b60200190565b3590811515820362003b6557565b81601f8201121562003b655780359162003ca28362003c62565b9262003cb2604051948562003c3e565b808452602092838086019260051b82010192831162003b65578301905b82821062003cde575050505090565b83809162003cec8462003c7a565b81520191019062003ccf565b6004111562003d0357565b634e487b7160e01b600052602160045260246000fd5b6020908160408183019282815285518094520193019160005b82811062003d41575050505090565b83516001600160a01b03168552938101939281019260010162003d32565b90600382101562003d035752565b60005b83811062003d815750506000910152565b818101518382015260200162003d70565b9060209162003dad8151809281855285808601910162003d6d565b601f01601f1916010190565b6005111562003d0357565b90815180825260208080930193019160005b82811062003de5575050505090565b83518552938101939281019260010162003dd6565b90815180825260208080930193019160005b82811062003e1b575050505090565b83516001600160a01b03168552938101939281019260010162003e0c565b90815180825260208092019182818360051b85019501936000915b84831062003e655750505050505090565b909192939495848062003e8183856001950387528a5162003d92565b980193019301919493929062003e54565b90815180825260208092019182818360051b82019501936000915b84831062003ebe5750505050505090565b909192939495848062003eda83856001950387528a5162003dc4565b980193019301919493929062003ead565b90815180825260208092019182818360051b82019501936000915b84831062003f175750505050505090565b909192939495848062003f3383856001950387528a5162003dfa565b980193019301919493929062003f06565b9060208251918281520190819060208160051b84019401926000905b82821062003f7057505050505090565b909192939481810385528551906101008082018351600681101562003d0357835260208401516020840152604084015191604084015281518091526101206020818501918360051b86010193019160005b8181106200402b575050505060019260209262003ff7849360608085015190840152608080850151908483039085015262003d92565b9160a08082015115159083015260c08082015115159083015260e08091015115159101529701950192019092919262003f60565b9091929361011f9c9b9c19868203018452845190815181526020820151620040538162003db9565b60208201526040820151620040688162003cf8565b60408201526060820151603d81101562003d0357606082015260a06200409e608084015160c0608085015260c084019062003dc4565b9201519060a081840391015260a06200411d6200410a620040f7620040e4620040d1865160c0895260c089019062003dc4565b602087015188820360208a015262003dfa565b6040860151878203604089015262003e39565b6060850151868203606088015262003e92565b6080840151858203608087015262003eeb565b9101519160a081830391015281519081815260208101906020808460051b8301019401926000915b8183106200416a5750505050506020806001929e9d9e96019401910191909162003fc1565b90919293946020806200418a600193601f19868203018952895162003e39565b970195019301919062004145565b9060405191828154918282526020928383019160005283600020936000905b828210620041d257505050620041d09250038362003c3e565b565b855484526001958601958895509381019390910190620041b7565b9060405191828154918282526020928383019160005283600020936000905b8282106200422557505050620041d09250038362003c3e565b85546001600160a01b0316845260019586019588955093810193909101906200420c565b90600182811c921680156200427b575b60208310146200426557565b634e487b7160e01b600052602260045260246000fd5b91607f169162004259565b90604051918260008254926200429c8462004249565b908184526001948581169081600014620043115750600114620042ca575b5050620041d09250038362003c3e565b9093915060005260209081600020936000915b818310620042f8575050620041d093508201013880620042ba565b85548884018501529485019487945091830191620042dd565b915050620041d094506020925060ff191682840152151560051b8201013880620042ba565b908154620043448162003c62565b9262004354604051948562003c3e565b818452600090815260208082208186015b84841062004374575050505050565b6001838192620043848562004286565b81520192019301929062004365565b60405190919060e081016001600160401b0381118282101762003b9b5760405260c060ff60068395620043c68162004198565b85526001810154602086015260028101546040860152600381015460608601528260048201541615156080860152620044026005820162004286565b60a08601520154161515910152565b600682101562003d035752565b603d82101562003d035752565b908154620044398162003c62565b9262004449604051948562003c3e565b818452600090815260208082208186015b84841062004469575050505050565b6001838192620044798562004198565b8152019201930192906200445a565b908154620044968162003c62565b92620044a6604051948562003c3e565b818452600090815260208082208186015b848410620044c6575050505050565b6001838192620044d685620041ed565b815201920193019290620044b7565b9060405191620044f58362003bb1565b82620045018262004198565b81526001600562004514828501620041ed565b93602094858501526200452a6002820162004336565b60408501526200453d600382016200442b565b6060850152620045506004820162004488565b608085015201805490620045648262003c62565b9462004574604051968762003c3e565b82865260009182528082208187015b848410620045975750505050505060a00152565b85838192620045a68562004336565b81520192019301929062004583565b906020604082019260018060a01b0381511683520151916040602083015282518091526060820190602060608260051b8501019401926000905b828210620045ff57505050505090565b9091929394605f19828203018552855160018060a01b038151168252602081015190602282101562003d03576040916020840152015190606060408201526200468d620046766200465f8451610120606086015261018085019062003dc4565b6020850151848203605f1901608086015262003dfa565b6040840151838203605f190160a085015262003e39565b606083015190605f198382030160c0840152602080835192838152019201906000905b80821062004a3457505050608083015190605f198382030160e0840152815180825260208201906020808260051b85010194019260005b828110620049b057505050505060a083015190605f1983820301610100840152815190818152602081016020808460051b8401019401926000925b818410620047d257505050505060c083015190605f1983820301610120840152602080835192838152019201906000905b808210620047ae57505050620047a08360209361010062004789869560e06001990151605f198583030161014086015262003e92565b92015190610160605f198285030191015262003eeb565b9701950193920190620045ef565b9091926020806001928651620047c48162003db9565b815201940192019062004753565b9091929394601f9d9c9d198282030184528551908151600681101562003d03578152602082015160208201526040820151610100604083015261010082018151809152610120830160206101208360051b8601019301916000905b8082106200489857505050509d9e9d8260209260e0806200486886956060600199015160608601526080860151858203608087015262003d92565b9360a0810151151560a085015260c0810151151560c0850152015115159101529701940194019293919062004722565b9091929361011f19868203018452845190815181526020820151620048bd8162003db9565b60208201526040820151620048d28162003cf8565b60408201526060820151603d81101562003d0357606082015260a062004908608084015160c0608085015260c084019062003dc4565b9201519060a081840391015260a06200493b6200410a620040f7620040e4620040d1865160c0895260c089019062003dc4565b9101519160a0818303910152815180825260208201906020808260051b8501019401926000915b80831062004982575050505050602080600192960194019201906200482d565b9091929394602080620049a2600193601f19878203018952895162003e39565b970195019301919062004962565b9091929394602080600192601f1986820301885288519060c08062004a1e620049e3855160e0865260e086019062003dc4565b8686015187860152604086015160408601526060860151606086015260808601511515608086015260a086015185820360a087015262003d92565b93015115159101529701950193929101620046e7565b909192602080600192865115158152019401920190620046b0565b81601f8201121562003b655780359162004a698362003c62565b9262004a79604051948562003c3e565b808452602092838086019260051b82010192831162003b65578301905b82821062004aa5575050505090565b8135815290830190830162004a96565b81601f8201121562003b655780359162004acf8362003c62565b9262004adf604051948562003c3e565b808452602092838086019260051b82010192831162003b65578301905b82821062004b0b575050505090565b83809162004b198462003b6a565b81520191019062004afc565b81601f8201121562003b65578035906001600160401b03821162003b9b576040519262004b5d601f8401601f19166020018562003c3e565b8284526020838301011162003b6557816000926020809301838601378301015290565b9080601f8301121562003b655781359062004b9b8262003c62565b9262004bab604051948562003c3e565b828452602092838086019160051b8301019280841162003b6557848301915b84831062004bdb5750505050505090565b82356001600160401b03811162003b6557869162004bff8484809489010162004b25565b81520192019162004bca565b9080601f8301121562003b655781359062004c268262003c62565b9262004c36604051948562003c3e565b828452602092838086019160051b8301019280841162003b6557848301915b84831062004c665750505050505090565b82356001600160401b03811162003b6557869162004c8a8484809489010162004a4f565b81520192019162004c55565b9080601f8301121562003b655781359062004cb18262003c62565b9262004cc1604051948562003c3e565b828452602092838086019160051b8301019280841162003b6557848301915b84831062004cf15750505050505090565b82356001600160401b03811162003b6557869162004d158484809489010162004ab5565b81520192019162004ce0565b9190826040918161056052806105a052031262003b655760408051929083016001600160401b0381118482101762003b9b5760405262004d62839162003b6a565b83526105605160208101356106408190526001600160401b03811162003b65576105a051910190601f8201121562003b6557359162004da18362003c62565b62004db0604051918262003c3e565b83815260208101610500526105a0516106405161056051019060208660051b8301011162003b6557602090959392949501915b61064051610560510160208760051b82010184101562005917578335906001600160401b03821162003b65578181016106a0526060601f198383016105a05103011262003b65576040516105208190529160608301906001600160401b03821184831017620051715762004e5f92602092604052010162003b6a565b905260406106a0510135602281101562003b655761052051602001526106a05160608101356106808190526001600160401b031062003b65576105a051610120606083013583018203601f19011262003b65576040516106008190526001600160401b036101208201908111908211176200517157610120016040526001600160401b0360608301358301602001351162003b655762004f0f916060810135016020818101359091010162004a4f565b6106005152610680516106a051016040810135906001600160401b03821162003b6557602062004f46926105a05192010162004ab5565b6106005160200152610680516106a051016001600160401b0360608201351162003b65576105a05162004f829160608101350160200162004b80565b6106005160400152610680516106a051016080810135906001600160401b03821162003b6557602062004fbc926105a05192010162003c88565b6106005160600152610680516106a05101936001600160401b0360a08601351162003b65576105a051603f60a0870135870101121562003b65576200500b602060a08701358701013562003c62565b956200501b604051978862003c3e565b60a0860135808701602090810135808a526105a051610680516106a051938c01989493019092019160059190911b82016040011162003b6557604001945b610680516106a0510160a08901359081019089016020013560051b810160400187101562005186578635906001600160401b03821162003b655701906105a0519060e09182603f19858303011262003b6557604051908382016001600160401b0381118382101762005171576040908152850135906001600160401b03821162003b65576040620050ed9287010162004a4f565b8152606084013560208201526080840135604082015260a0840135606082015260c0926200511d84860162003c7a565b6080830152840135926001600160401b03841162003b65576200516161010060209662005155889760406105a0519184010162004b25565b60a08601520162003c7a565b9082015281520195019462005059565b60246000634e487b7160e01b81526041600452fd5b5050949793509450946080610600510152610680516106a0510160c08101356105e05260018060401b0360c08201351162003b65576105a0519060c08101350190603f8201121562003b6557620051ea6020620051f8920135806105c05262003c62565b604051806105405262003c3e565b610540516105c051905260206105405101610660526105a0516105c05160051b9060406105e051610680516106a0510101928301011162003b65576040016106c05292939092905b6105c05160051b6105e051610680516106a05101019060406106c05191830101811015620057865780356105808190526001600160401b031062003b6557610100603f19823584016105a05103011262003b6557604051610620819052916101008301916001600160401b03831184841017620051715760409283523501013590600682101562003b6557526060610580516105e051610680516106a05101010101356020610620510152610580516105e051610680516106a0510101019460018060401b0360808701351162003b65576105a051605f6080880135880101121562003b65576200534d6200533f604060808901358901013562003c62565b604051806106e05262003c3e565b6106e080516080880135808901604001359182905291516105a051610580516105e051610680516106a0516020959095019a96940101019091019160051b82016060011162003b6557606001945b610580516105e051610680516106a05101010160808901359081019089016040013560051b81016060018710156200566b578635906001600160401b03821162003b655701605f1960c081836105a05103011262003b655760405191620054028362003bb1565b606081013583526080810135600581101562003b6557602084015260a0810135600481101562003b6557604084015260c0810135603d81101562003b6557606084015260e08101356001600160401b03811162003b65576105a0516200546d91830160600162004a4f565b6080840152610100810135916001600160401b03831162003b655760c0908383016105a05103011262003b655760405191620054a98362003bb1565b818101606001356001600160401b03811162003b65576105a051620054d5918484010160600162004a4f565b8352818101608001356001600160401b03811162003b65576105a05162005503918484010160600162004ab5565b602084015281810160a001356001600160401b03811162003b65576105a05162005534918484010160600162004b80565b604084015281810160c001356001600160401b03811162003b65576105a05162005565918484010160600162004c0b565b60608401526001600160401b0382820160e001351162003b65576105a0516200559a9083830160e08101350160600162004c96565b60808401528181016101000135906001600160401b03821162003b65576105a05192010190607f8201121562003b6557606081013590620055db8262003c62565b91620055eb604051938462003c3e565b808352602083019160806105a0519260051b82010191821162003b655760808101925b82841062005635575050505060a0808301919091528201528152602095860195016200539b565b83356001600160401b03811162003b65576020916200565f839260806105a0519187010162004b80565b8152019301926200560e565b5050935093919094506106e051604061062051015260a0610580516105e051610680516106a05101010101356060610620510152610580516105e051610680516106a05101010160018060401b0360c08201351162003b65576105a051620056dc9160c08101350160400162004b25565b608061062051015260e06200570581610580516105e051610680516106a0510101010162003c7a565b60a06106205101526200572e610100610580516105e051610680516106a0510101010162003c7a565b60c061062051015262005757610120610580516105e051610680516106a0510101010162003c7a565b90610620510152610620516106605152602061066051016106605260206106c051016106c05290929362005240565b5050610540516106005160a00152610680516106a05193969495929301906001600160401b0360e08301351162003b65576105a0519560e0830135830196603f8801121562003b6557620057de602088013562003c62565b94620057ee604051968762003c3e565b6020888101358088526105a051610680516106a051938a0198930160e0880135019160051b82016040011162003b6557604001955b604060208b013560051b60e0880135610680516106a05101010101871015620058625760058735101562003b6557863581526020968701960162005823565b509592989450959250955060c0610600510152610680516106a051019061010091828101359060018060401b03821162003b65576020620058aa926105a05192010162004c0b565b6106005160e00152610680516106a05101916101208301356001600160401b03811162003b65576105a051602094620058e69201850162004c96565b9061060051015261060051604061052051015261052051610500515281610500510161050052019193949262004de3565b50945091602091500152565b90620041d0604560405180947f496e76616c69642070726f6772616d20616464726573732e204d73672e73656e60208301526403232b91d160dd1b604083015262005978815180926020868601910162003d6d565b810103602581018552018362003c3e565b90620041d06040805180947f2c20616e642070726f6772616d206f70657261746f7220616464726573733a206020830152620059cf815180926020868601910162003d6d565b810103602081018552018362003c3e565b6020620041d091939293604051948162005a04879351809286808701910162003d6d565b820162005a1a8251809386808501910162003d6d565b0103808552018362003c3e565b1562005a305750565b60405162461bcd60e51b81526020600482015290819062005a5690602483019062003d92565b0390fd5b6000198114620032295760010190565b80511562005a785760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101562005a785760400190565b80516002101562005a785760600190565b805182101562005a785760209160051b010190565b9062005ad18262003c62565b60409062005ae28251918262003c3e565b838152809362005af5601f199162003c62565b019160005b83811062005b085750505050565b602090825162005b188162003bcd565b6000815282600081830152606080868401526000818401526080830152600060a0830152600060c0830152600060e083015282860101520162005afa565b81811062005b62575050565b6000815560010162005b56565b8054600082558062005b7f575050565b620041d09160005260206000209081019062005b56565b90600160401b811162003b9b5781549080835581811062005bb657505050565b620041d0926000526020600020918201910162005b56565b600160401b811162003b9b576202711b9081549080835581811062005bb657505050565b600160401b811162003b9b57620138889081549080835581811062005bb657505050565b62005c22815462004249565b908162005c2d575050565b81601f6000931160011462005c40575055565b8183526020832062005c5e91601f0160051c81019060010162005b56565b8160208120915555565b805490600081558162005c79575050565b6000526020600020908101905b81811062005c92575050565b8062005ca060019262005c16565b0162005c86565b90600160401b811162003b9b5781549181815582821062005cc757505050565b600052602060002091820191015b81811062005ce1575050565b8062005cef60019262005c16565b0162005cd5565b805490600081558162005d07575050565b6000526020600020908101905b81811062005d20575050565b8062005d2e60019262005b6f565b0162005d14565b90600160401b811162003b9b5781549181815582821062005d5557505050565b600052602060002091820191015b81811062005d6f575050565b8062005d7d60019262005b6f565b0162005d63565b805490600081558162005d95575050565b6000526020600020908101905b81811062005dae575050565b8062005dbc60019262005c68565b0162005da2565b90600160401b811162003b9b5781549181815582821062005de357505050565b600052602060002091820191015b81811062005dfd575050565b8062005e0b60019262005c68565b0162005df1565b805460008083558162005e2457505050565b600992828402928484040362005ec157815260208120918201915b82811062005e4d5750505050565b808285925582600182015562005e666002820162005b6f565b62005e746003820162005b6f565b62005e826004820162005b6f565b62005e906005820162005c68565b62005e9e6006820162005cf6565b62005eac6007820162005cf6565b62005eba6008820162005d84565b0162005e3f565b634e487b7160e01b82526011600452602482fd5b600160401b821162003b9b5780549082815581831062005ef457505050565b600992828402928484040362003229578084029084820403620032295760009182526020822092830192015b82811062005f2e5750505050565b808285925582600182015562005f476002820162005b6f565b62005f556003820162005b6f565b62005f636004820162005b6f565b62005f716005820162005c68565b62005f7f6006820162005cf6565b62005f8d6007820162005cf6565b62005f9b6008820162005d84565b0162005f20565b51600681101562003d035790565b90600681101562003d035760ff80198354169116179055565b9062005fd58162003db9565b60ff80198354169116179055565b9062005fef8162003cf8565b61ff0082549160081b169061ff001916179055565b90603d81101562003d035762ff000082549160101b169062ff00001916179055565b9190601f81116200603657505050565b620041d0926000526020600020906020601f840160051c8301931062006065575b601f0160051c019062005b56565b909150819062006057565b9060ff801983541691151516179055565b9061ff00825491151560081b169061ff001916179055565b9062ff0000825491151560101b169062ff00001916179055565b8151600681101562003d0357620060cb908262005fb0565b602082015160018201556002810160408301516020815191620060ef838562005ed5565b019160005260206000206000925b828410620062375750505050606082015160038201556080820151805160048301916001600160401b03821162003b9b5762006146826200613f855462004249565b8562006026565b602090601f8311600114620061bf579282600593620041d097969360e096600092620061b3575b50508160011b916000199060031b1c19161790555b01916200619660a082015115158462006070565b620061a860c082015115158462006081565b015115159062006099565b0151905038806200616d565b90601f198316918460005260206000209260005b8181106200621e575093620041d097969360e09693600193836005981062006204575b505050811b01905562006182565b015160001960f88460031b161c19169055388080620061f6565b92936020600181928786015181550195019301620061d3565b805180518355600183016200625c6020830151620062558162003db9565b8262005fc9565b620062776040830151620062708162003cf8565b8262005fe3565b6060820151603d81101562003d0357620062919162006004565b608081015180519060028501906001600160401b03831162003b9b57602090620062bc848462005b96565b0190600052602060002060005b83811062006762575050505060a0015180518051906001600160401b03821162003b9b576020600386019162006300848462005b96565b0190600052602060002060005b8381106200674d575050505060208101518051906001600160401b03821162003b9b576020600486019162006343848462005b96565b0190600052602060002060005b8381106200672f5750505050600583016040820151602081519162006376838562005ca7565b019160005260206000206000925b8284106200663e57505050506006830160608201516020815191620063aa838562005d35565b019160005260206000206000925b828410620065da57505050506007830160808201516020815191620063de838562005d35565b019160005260206000206000925b8284106200656d575050505060a060088401910151602081519162006412838562005dc3565b01916000526020600020916000905b8282106200644157505050506009602060019201920193019290620060fd565b8051602081519162006454838862005ca7565b0190856000526020600020916000905b8282106200648357505050506001602081920194019101909262006421565b80518051906001600160401b03821162003b9b57620064a882620013e3885462004249565b602090601f8311600114620064f8579282600194936020938695600092620064ec575b5050600019600383901b1c191690841b1787555b0194019101909262006464565b015190503880620064cb565b908660005260206000209160005b601f198516811062006554575083602093600196938796938794601f198116106200653a575b505050811b018755620064df565b015160001960f88460031b161c191690553880806200652c565b9192602060018192868501518155019401920162006506565b80518051906001600160401b03821162003b9b5760209062006590838662005b96565b0183600052602060002060005b838110620065bc575050505060016020819201920193019290620063ec565b82516001600160a01b0316818301556020909201916001016200659d565b80518051906001600160401b03821162003b9b57602090620065fd838662005b96565b0183600052602060002060005b83811062006629575050505060016020819201920193019290620063b8565b6001906020845194019381840155016200660a565b80518051906001600160401b03821162003b9b576200666a8262006663865462004249565b8662006026565b602090601f8311600114620066ba579282600194936020938695600092620066ae575b5050600019600383901b1c191690841b1785555b0192019301929062006384565b0151905038806200668d565b908460005260206000209160005b601f198516811062006716575083602093600196938796938794601f19811610620066fc575b505050811b018555620066a1565b015160001960f88460031b161c19169055388080620066ee565b91926020600181928685015181550194019201620066c8565b82516001600160a01b03168183015560209092019160010162006350565b6001906020845194019381840155016200630d565b600190602084519401938184015501620062c9565b90620067838262003c62565b62006792604051918262003c3e565b8281528092620067a5601f199162003c62565b0190602036910137565b62013883805482101562005a78576000526006602060002091020190600090565b62027116805482101562005a78576000526006602060002091020190600090565b62013882805482101562005a78576000526006602060002091020190600090565b62027115805482101562005a78576000526006602060002091020190600090565b620138828054600160401b81101562003b9b576200685791600182019055620067f1565b9190916200686a57620041d091620060b3565b634e487b7160e01b600052600060045260246000fd5b620138838054600160401b81101562003b9b576200685791600182019055620067af565b620271168054600160401b81101562003b9b576200685791600182019055620067d0565b620271158054600160401b81101562003b9b57620068579160018201905562006812565b15620068f457565b60405162461bcd60e51b815260206004820152603760248201527f73756d4469766964656e64576569676874466f72546f6b656e436c6173733a206044820152766469766964656e64576569676874206f766572666c6f7760481b6064820152608490fd5b61271081101562005a78576200350581620017676002620069809460031b01549162006b44565b90565b81156200698e570490565b634e487b7160e01b600052601260045260246000fd5b908115620069d1576064620069bd818402938462006983565b03620069c95760019190565b600091508190565b60019150600090565b91908215620069f257620069bd818402938462006983565b5060019150600090565b62013886805482101562005a785760005260206000200190600090565b62013881805482101562005a785760005260206000200190600090565b6202711d805482101562005a785760005260206000200190600090565b6201388a805482101562005a785760005260206000200190600090565b62027119805482101562005a785760005260206000200190600090565b6202711b805482101562005a785760005260206000200190600090565b62013888805482101562005a785760005260206000200190600090565b805482101562005a785760005260206000200190600090565b1562006ae857565b60405162461bcd60e51b815260206004820152602e60248201527f746f74616c546f6b656e73506572546f6b656e436c6173733a20746f74616c5460448201526d6f6b656e73206f766572666c6f7760901b6064820152608490fd5b612710811015908162005a7857600390811b906004928383019182549260009582879601935b85871062006b7c575050505050505090565b97969091929394959762006bde5762006bd28862006bca62006ba46200046b9a9b8762006ac7565b905490881b1c6001600160a01b0316600090815260208990526040812054909462006c06565b999062006ae0565b95949392919062006b6a565b603282634e487b7160e01b6000525260246000fd5b9060018201918210620069c95760019190565b91908201918210620069c95760019190565b6201388b5462006c2b6200353b62012d29565b91905062006c3862012ded565b5060009081925b81841062006c5a575b62006c5593500462006c94565b905090565b9160ff60078560031b0154161562006c8d5783620035d862006c8692620035d16200046b969762006959565b9262006c3f565b9162006c48565b90801562006cac5762006ca79162006983565b600191565b5050600090600090565b6201388180549190600160401b83101562003b9b578262006ce1916001620041d09501905562006a19565b9080546001600160a01b0360039390931b83811b80199092169390941690931b909216179055565b6040519062006d188262003bea565b60188252772a343290383937b3b930b69034b99032bc32b1baba32b21760411b6020830152565b600091825b6020808401908151805187101562006ed5578162006d678862006d6f9362005ab0565b5101620074c6565b6022928382101562003d0357601a91820362006e2d578762006d92915162005ab0565b5192828401519081101562003d03570362006deb57509362006ddc62006de49262006dd462006dcd60e060406200046b9a0151015162005a6a565b5162005a6a565b519062006c06565b9590620074d4565b9262006d44565b6064906040519062461bcd60e51b82526004820152601b60248201527a2a34329037b831b7b2329034b9903737ba102820acafa1a0a9a41760291b6044820152fd5b9291905062006e468162006d6789869a979a5162005ab0565b8281101562003d035760140362006e7f5750509062006ddc6200046b95620035d162006e788462006de4965162005ab0565b5162007521565b62006e919062006d6785855162005ab0565b9081101562003d035760151462006eaf575b5062006de49062005a5a565b9062006ddc62006ece95620035d162006e788462006de4965162005ab0565b9062006ea3565b50505090925080341060001462006f4b5760405162461bcd60e51b815260206004820152603760248201527f546865207061796d656e74206973206e6f7420656e6f7567682e205468652074604482015276037ba30b6103830bcb6b2b73a1039b437bab6321031329604d1b6064820152608490fd5b80341162007321575b5062027129805460ff811662006f6a8162003cf8565b6001810362006fa0575050508062006f9062006f8a62006f9693620075c8565b620075dd565b62007667565b6200698062006d09565b62006fab8162003cf8565b60028114808062007313575b156200709c575050505062006fcc81620075c8565b156200705d5762006fdd81620075c8565b15620070215762006fee9062007667565b60405162006ffc8162003bea565b60158152742a3432903b37ba329034b99032bc32b1baba32b21760591b602082015290565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c696420766f74652070726f6772616d60601b6044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2103b37ba34b73390383937b3b930b69760491b6044820152606490fd5b620070a78262003cf8565b6003821491828062007305575b1562007192575050505050620070ca81620075c8565b1562007142578062006f9062006f8a620070e493620075c8565b604051620070f28162003c22565b603a81527f5468652070656e64696e672070726f6772616d2069732065786563757465642060208201527930b33a32b9103b37ba34b7339030b7321030b8383937bb30b61760311b604082015290565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c696420657865637574696e672070656e64696e672070726f677261604482015261369760f11b6064820152608490fd5b6200719d8162003cf8565b8180620072f6575b80620072e8575b15620071d657505050509062006f9691600360ff1982541617905562006f9062006f8a82620075c8565b620071e18162003cf8565b8215620072d3575b505080620072c4575b6200722b57505050604051620072088162003bea565b6013815272283937b3b930b6903a32b936b4b730ba32b21760691b602082015290565b60ff191660011790556200723f81620075c8565b1562007259578062006f9062006f8a62006f9693620075c8565b60405162461bcd60e51b815260206004820152603e60248201527f5b4572726f72203030335d5468652070726f6772616d206973206e6f7420612060448201527f76616c696420657865637574652070656e64696e672070726f6772616d2e00006064820152608490fd5b506202712854421015620071f2565b620072e091925062003cf8565b3880620071e9565b5062027128544210620071ac565b506202712754421015620071a5565b5062027128544210620070b4565b506202712754421062006fb7565b60018060a01b0390818351166000526201388590816020526040600020541562007418575b620073529034620074ac565b9015620073d4576200737590838551166000528260205260406000205462006c06565b92901562007393578351166000526020526040600020553862006f54565b60405162461bcd60e51b81526020600482015260196024820152782a3432903732bb903130b630b731b29037bb32b9333637bb9760391b6044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527b2a3432903830bcb6b2b73a103932ba3ab9371037bb32b9333637bb9760211b6044820152606490fd5b6000908162013886928354915b82811062007471575b50156200743f575b50905062007346565b85518516600160401b82101562003b9b5762006ce182620073529560016200746a95019055620069fc565b3862007436565b866200747d82620069fc565b919054818b51169260031b1c1614620074a1576200749b9062005a5a565b62007425565b50506001386200742e565b9190828111620074bd576001920390565b50600091508190565b51602281101562003d035790565b15620074dc57565b60405162461bcd60e51b815260206004820152601f60248201527f54686520746f74616c207061796d656e7420697320746f6f206c617267652e006044820152606490fd5b6000805b604083019060e06200753b818451015162005a8e565b5151841015620075c057620075608462007559838651015162005a8e565b5162005ab0565b51925101519283516002101562005a7857620075af620075a9620075b793620075a1604096620075998660606200046b9b015162005ab0565b5190620069da565b9290620074d4565b62006c06565b9490620074d4565b91905062007525565b509250505090565b602001515115620075d857600190565b600090565b15620075e557565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c69642070726f6772616d60881b6044820152606490fd5b60809060208152602a60208201527f5468652070726f6772616d2069732064656e6965642062792074686520706c7560408201526967696e2073797374656d60b01b60608201520190565b6200767281620109d7565b516201045157600681101562003d035760038114620103f85780620076cf5760405162461bcd60e51b8152602060048201526016602482015275151a19481c1c9bd9dc985b481a5cc81a5b9d985b1a5960521b6044820152606490fd5b6004810362009b6b5750906000905b6020830151805183101562009b655782620076f99162005ab0565b516020810180516022908181101562003d03571562009b225781518181101562003d0357600103620079485750506040809101906200773e6101008351015162005a6a565b51926200776060e062007755818651015162005a6a565b519451015162005a8e565b519562007771855185511462011c60565b62007780855188511462011cc6565b60005b8551811015620078c65762007799818662005ab0565b51612710908181101562005a7857600160ff6007620077c19360031b01541615151462011d28565b620077cd828a62005ab0565b51620077da838862005ab0565b51908282101562005a78576006620077f89260031b01549062006c06565b9062007805848962005ab0565b51918383101562005a78576006620078229360031b015562011d80565b6200782e828a62005ab0565b51906200783c838862005ab0565b518181101562005a78576001600160a01b0393926200787c916003908662007865878e62005ab0565b5116600052811b0160205287600020549062006c06565b62007888848a62005ab0565b519283101562005a785760036200046b93620078c096620078aa878e62005ab0565b5116600052811b01602052876000205562011ddf565b62007783565b509392620078e391929650620078dc9062012c2b565b9262012b0f565b945192620078f18462003c06565b60008452600036813760005b83518110156200792b57806200046b6200791c62007925938762005ab0565b51878a620126f5565b620078fd565b50945092602092506200793f915062005a5a565b919050620076de565b819592939495518181101562003d035760020362007cdc5750506040809201908151938385015191620079a06200798460e08098015162005a6a565b519662007995818751015162005a8e565b519551015162005a9f565b5194835187510362007c8957835185510362007c3557835186510362007bde575060005b865181101562007bc857620079da818862005ab0565b5161271081101562005a7857620079fd60ff6007809360031b0154161562011e38565b62007a09828962005ab0565b5161271081101562005a785760031b01805460ff1916600117905562007a30818562005ab0565b5162007a3d828962005ab0565b519061271082101562005a78578051906001600160401b03821162003b9b5762007a808262007a7360058660031b015462004249565b60058660031b0162006026565b602090601f831160011462007b4d57600592916000918362007b41575b50508160011b916000199060031b1c1916179160031b01555b62007ac2818662005ab0565b5162007acf828962005ab0565b5161271081101562005a785760031b6001015562007aee818762005ab0565b5162007afb828962005ab0565b5161271081101562005a785760031b6002015562007b1a818862005ab0565b519061271082101562005a78576000600662007b3b9360031b015562005a5a565b620079c4565b01519050388062007a9d565b9060058460031b0160005260206000209160005b601f198516811062007baf5750918391600193600595601f1981161062007b95575b505050811b019160031b015562007ab6565b015160001960f88460031b161c1916905538808062007b83565b9192602060018192868501518155019401920162007b61565b509591509350602092506200793f915062005a5a565b5162461bcd60e51b815260206004820152603c6024820152600080516020620133bc83398151915260448201527b1b911a5d9a59195b9915d95a59da1d081a5cc81b9bdd08195c5d585b60221b6064820152608490fd5b5162461bcd60e51b81526020600482015260396024820152600080516020620133bc8339815191526044820152781b959bdd1a5b99d41bddd95c881a5cc81b9bdd08195c5d585b603a1b6064820152608490fd5b5162461bcd60e51b81526020600482015260386024820152600080516020620133bc8339815191526044820152771b925b99195e105c9c985e481a5cc81b9bdd08195c5d585b60421b6064820152608490fd5b8195929395518181101562003d0357600303620082d3575050604084019062007d0b6101008351015162005a6a565b519362007d2260e062007755818651015162005a6a565b519362007d3786518551146200046462012e52565b62007d4a86518651146200046462012e52565b60005b865181101562007db35762007d63818662005ab0565b519061271082101562005a7857600362007dad9260018060a01b038b5116600052811b016020526200046b60406000205462007da0838a62005ab0565b5111156200046462012f56565b62007d4d565b50909493919460005b855181101562007ee75762007dd2818662005ab0565b51906127108083101562005a7857600360018060a01b0393848c5116600052811b0160205262007e1560406000205462007e0d848962005ab0565b5190620074ac565b9062007e22848a62005ab0565b51918383101562005a7857600362007e5193878f5116600052811b016020526040600020556200046462012f56565b62007e5d828862005ab0565b518181101562005a78576003908462007e77858c62005ab0565b5116600052811b0160205262007e9860406000205462006dd4848962005ab0565b62007ea4848a62005ab0565b519283101562005a785760036200046b9362007ee19662007ec6878e62005ab0565b5116600052811b016020526040600020556200046462012fbb565b62007dbc565b5091509162007efe62007f05919695949662012c2b565b9562012b0f565b926040519462007f158662003bea565b6001865260203681880137516001600160a01b031662007f358662005a6a565b526000905b8651821015620082be5762007f50828862005ab0565b516101005262007f61855162006777565b9660009462007f71885162006777565b610260528594865b885181101562008048578a8962007fa96001600160a01b0362007f9d858462005ab0565b511661010051620129f8565b158062008002575b62007fca575b505062007fc49062005a5a565b62007f79565b9862007ff79162000b1382859c62007fee62007fc49760018060a01b039262005ab0565b51169262005ab0565b9790508a8962007fb7565b50505061271061010051101562005a78576001600160a01b0362008027828b62005ab0565b5116600052600361010051811b016020528a89604060002054151562007fb1565b509098949897969291939760005b8851811015620080ea5761271061010051101562005a78576001600160a01b0362008082828b62005ab0565b5116600052600361010051811b0160205260406000205415620080b1575b620080ab9062005a5a565b62008056565b99620080ab90620080e1906001600160a01b03620080d08e8d62005ab0565b511662000b13826102605162005ab0565b9a9050620080a0565b50985096949392919561010051612710811015806102005262005a785760031b6004015496620081256200811f878a620118f8565b62006777565b996000998a60c0525b6102005162005a785760c0518a811015620081df57620081626200817f9160006102005260046101005160031b0162006ac7565b90546102605160039290921b1c6001600160a01b03169062012aba565b156200819c575b6200819360c05162005a5a565b60c0526200812e565b99808c62000b13620081d893620081bf60c05160046101005160031b0162006ac7565b905460039190911b1c6001600160a01b03169262005ab0565b9962008186565b509a939794969299919850946000915b8383106200828457505050506102005162005a78578051906001600160401b03821162003b9b576020906200822e8360046101005160031b0162005b96565b0160046101005160031b01600052602060002060005b8381106200826657505050506200825b9062005a5a565b909295919562007f3a565b82516001600160a01b03168183015560209092019160010162008244565b620082b790620082b0906001600160a01b03620082a2868662005ab0565b511662000b13828962005ab0565b9262005a5a565b91620081ef565b919450506200793f9194506020925062005a5a565b819593949295518181101562003d03576004036200855c5750506040809201610100946200831562008309878451015162005a6a565b51968351015162005a8e565b51946200832c60e062007755818651015162005a6a565b51936200834188518851146200046462012e52565b6200835488518551146200046462012e52565b6200836788518651146200046462012e52565b60005b8851811015620083cf5762008380818662005ab0565b519061271082101562005a7857620083c9916003906001600160a01b03620083a9848e62005ab0565b5116600052811b016020526200046b886000205462007da0838a62005ab0565b6200836a565b50909691959294939660005b83518110156200851057620083f1818862005ab0565b5190612710918281101562005a78576001600160a01b03906003908262008419858a62005ab0565b5116600052811b016020526200843a8b62007e0d848b600020549262005ab0565b9062008447848c62005ab0565b51918583101562005a7857600362008480938562008466888d62005ab0565b5116600052811b016020528a600020556200046462012f56565b6200848c828a62005ab0565b518381101562005a785760039082620084a6858b62005ab0565b5116600052811b01602052620084c78b62006dd4848b600020549262005ab0565b919050620084d6838b62005ab0565b519384101562005a78576200850a93600391620084f4858b62005ab0565b5116600052811b01602052876000205562005a5a565b620083db565b50946200853392975062007efe919394506200852c9062012c2b565b9362012b0f565b9260005b83518110156200792b57806200046b6200791c62008556938762005ab0565b62008537565b819594939551908082101562003d03576005918203620087725750505060409182850190620085a060e062008595818551015162005a6a565b519351015162005a8e565b51928251845103620087215760005b83518110156200860757620085c5818562005ab0565b519061271082101562005a78576003620086019260018060a01b038b5116600052811b016020526200046b876000205462007da0838962005ab0565b620085af565b509092919260005b8451811015620086a25762008625818662005ab0565b51906127108083101562005a7857600360018060a01b0393848c5116600052811b016020526200865f886000205462007e0d848962005ab0565b6200866b848a62005ab0565b519283101562005a785760036200046b936200869c968e5116600052811b0160205289600020556200046462012f56565b6200860f565b50959392620086b391925062012c2b565b91805193620086c28562003bea565b6001855260203681870137516001600160a01b0316620086e28562005a6a565b525194620086f08662003c06565b60008652600036813760005b83518110156200792b57806200046b6200791c6200871b938762005ab0565b620086fc565b845162461bcd60e51b815260206004820152603560248201526000805160206201339c833981519152604482015274195b905b5bdd5b9d081a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b82969496518181101562003d0357600603620089db575050506040809201620087a16101008251015162005a6a565b5194620087b860e062008595818551015162005a6a565b519286518351036200898a5786518451036200893e5760005b87518110156200883657620087e7818562005ab0565b519061271082101562005a785762008830916003906001600160a01b0362008810848d62005ab0565b5116600052811b016020526200046b876000205462007da0838962005ab0565b620087d1565b509092919260005b8751811015620088ea5762008854818662005ab0565b516127108082101562005a78576001600160a01b039291600390846200887b858e62005ab0565b5116600052811b016020526200889b886000205462007e0d848962005ab0565b620088a7848a62005ab0565b519283101562005a785760036200046b93620088e496620088ca8f889062005ab0565b5116600052811b0160205289600020556200046462012f56565b6200883e565b509592620088ff919250620078dc9062012c2b565b9251946200890d8662003c06565b60008652600036813760005b83518110156200792b57806200046b6200791c62008938938762005ab0565b62008919565b845162461bcd60e51b815260206004820152603060248201526000805160206201343c83398151915260448201526f1b9d1cc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b845162461bcd60e51b815260206004820152603560248201526000805160206201333c8339815191526044820152741b90db185cdcd95cc81a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b8296949396518181101562003d035760070362008c4857505050604090939193019062008a0e6101008351015162005a6a565b5193604062008a2260e08551015162005a6a565b51935101519162008a3b86518551146200046462012e52565b6000915b865183101562008c33576001600160a01b0362008a5d848962005ab0565b511660005262013880928360205262008a8360ff60406000205416156200046462012f23565b62008a8f818662005ab0565b5162008a9c828862005ab0565b51906040519562008aad8762003b7f565b600187526000602088019081526040880192835260608801939093526001600160a01b0362008add858d62005ab0565b511660005260205262008b0860406000209262008afe885115158562006070565b5115158362006081565b5180519095906001600160401b03811162003b9b5762008b3b8162008b31600186015462004249565b6001860162006026565b602096601f821160011462008bb357918160609262008b9f97989960029560009262008ba7575b50508160011b916000199060031b1c19161760018501555b01519101556200046b6001600160a01b0362008b97838b62005ab0565b511662006cb6565b919062008a3f565b01519050388062008b62565b966001840160005260206000209760005b601f198416811062008c1a57508262008b9f97989960029593600193606096601f1981161062008c00575b505050811b01600185015562008b7a565b015160001960f88460031b161c1916905538808062008bef565b818301518a556001909901986020928301920162008bc4565b9550939050602092506200793f915062005a5a565b829694959651928184101562003d0357600893840362008d2c575050506101009262008c7c84604080950151015162005a6a565b519460005b865181101562007bc85762008d2690876001600160a01b038062008ca6848462005ab0565b511660005262008cfd888262008ce18662013880968760205262008cdb600160ff809760002054161515146200046462012e82565b62005ab0565b5116600052836020528960002054891c16156200046462012eea565b62008d09838b62005ab0565b5116600052602052856000208761ff001982541617905562005a5a565b62008c81565b8095939495518281101562003d035760090362008e1b5750505062008d5b610100604080950151015162005a6a565b519360005b855181101562008e065762008e0090866001600160a01b038062008d85848462005ab0565b511660005262008dd96001898362008dbb8762013880978860205262008cdb8660ff809760002054161515146200046462012e82565b5116600052846020528a600020548a1c161515146200046462012eb5565b62008de5838a62005ab0565b51166000526020528560002061ff0019815416905562005a5a565b62008d60565b5094909350602092506200793f915062005a5a565b80969593949296518281101562003d0357600f0362008f565750505060400160a09182825101519360005b855181101562007bc85760e062008e6282878751015162005ab0565b5101511562008eed5762008e8662008e7f82878751015162005ab0565b5162006833565b620138828054600019929190838101908111620032295762008ea98a91620067f1565b5001805461ff0019166101001790555491820191821162003229578762008ed462008ee793620067f1565b5001805460ff1916600117905562005a5a565b62008e46565b62008f0862008f0182878751015162005ab0565b5162006880565b620138828054600019929190838101908111620032295762008f2b8a91620067af565b5001805461ff0019166101001790555491820191821162003229578762008ed462008ee793620067af565b80518281101562003d0357600c036200907a5750505060400160a09182825101519360005b855181101562007bc85760e062008f9782878751015162005ab0565b51015115620090185762008fb462008e7f82878751015162005ab0565b620138828054600019929190838101908111620032295762008fd78a91620067f1565b5001805461ff00191661010017905554918201918211620032295787620090026200901293620067f1565b5001805460ff1916905562005a5a565b62008f7b565b6200902c62008f0182878751015162005ab0565b62013882805460001992919083810190811162003229576200904f8a91620067af565b5001805461ff00191661010017905554918201918211620032295787620090026200901293620067af565b8097969593929497518281101562003d0357600d03620091d4575050604001946060620090ac60e08851015162005a6a565b519651015191620090c187518451146201199f565b60005b8751811015620091be578080878a620090e26200915f958962005ab0565b51156200916557620091436200912a848362009115620091086200914e98889762005ab0565b5162013882541162011a28565b62008cdb8d620091316200912a858562005ab0565b51620067f1565b509060ff9889920154901c1662011a80565b500154161562011ae1565b8662008ed46200912a838c62005ab0565b620090c4565b62009143620091a684836200919162009184620091ad98889762005ab0565b5162013883541162011a28565b62008cdb8d62009131620091a6858562005ab0565b51620067af565b8662008ed4620091a6838c62005ab0565b509550939050602092506200793f915062005a5a565b8097949397518281101562003d0357600e03620092bb5750506040019160606200920360e08551015162005a6a565b5193510151956200921884518851146201199f565b60005b8451811015620091be57806200923662009242928a62005ab0565b51620092485762005a5a565b6200921b565b6200926562009258828862005ab0565b5162013882541162011b42565b620092aa876200928f6200927e6200912a858b62005ab0565b5060ff9283910154891c1662011b9b565b88620092a06200912a858b62005ab0565b5001541662011bfd565b86620090026200912a838962005ab0565b91939450915080518281101562003d03576010036200935f5750506040015190620092ef60e060c084015193015162005a6a565b51936200930483518651146200046462012e52565b60005b83518110156200934c57806200046b6200932662009346938762005ab0565b51620093328162003db9565b6200933e838a62005ab0565b519062011906565b62009307565b50935091602091506200793f9062005a5a565b80949394518281101562003d0357601a036200949e5750506200938b60e0604080930151015162005a6a565b5160038151036200945b57620093a18162005a6a565b5191620093ba620093b28362005a8e565b519262005a9f565b5191620094215750916200793f916001602094146000146200941a57620093f990620093ec6201388d91825462006c06565b9091556200046462012ded565b6200046b6201388e6200940d815462006bf3565b9091556200046462012e27565b5062005a5a565b5162461bcd60e51b8152602060048201526014602482015273496e76616c6964207061796d656e74207479706560601b6044820152606490fd5b815162461bcd60e51b815260206004820152601c60248201527b496e76616c6964206e756d626572206f6620706172616d657465727360201b6044820152606490fd5b80949394518281101562003d0357601b036200991d57505050620094d96201388b546200354d620094ce62012d29565b612710831062005a27565b5050620094e562012ded565b506000805b6127108110620098b8575b50506200950162006c18565b90620095116202712a5462006777565b9060009384905b612710821015620098ad578160031b9260ff6007850154161562009669576000976002850154156200965757889798975b62005a785760048501548810156200963d576200956a886004870162006ac7565b9054600391821b1c6001600160a01b0316600081815291870160205260409182902054919a916200959d908a90620069da565b9b90620095a962012ded565b620095b49162005a27565b60009b6002890154620095c791620069da565b90620095d262012ded565b620095dd9162005a27565b828d5262013887602052818d205490620095f79162006c06565b90918d20556200960662012ded565b620096119162005a27565b6200961d828962005ab0565b52620096299062005a5a565b97620096359062005a5a565b979862009549565b929093506200964e91965062005a5a565b90959462009518565b929093506200964e9196975062005a5a565b959392509350505b6200967c8262006777565b91600091825b82811062009817575050506201388890815492620096a56200811f8584620118f8565b9360009081905b808210620097dc57505060005b838110620097385750508351939150506001600160401b03831162003b9b57602090620096e68462005bf2565b0190600052602060002060005b8381106200971a57505050506200793f60209160006201388d5560006201388e5562005a5a565b82516001600160a01b031681830155602090920191600101620096f3565b6000805b83811062009794575b50156200975e575b620097589062005a5a565b620096b9565b9062009758906200978b906001600160a01b036200977d858762005ab0565b511662000b13828a62005ab0565b9190506200974d565b6001600160a01b0380620097a9858862005ab0565b511690620097b8838b62005ab0565b511614620097d157620097cb9062005a5a565b6200973c565b505060013862009745565b9091620082b06200981091620097f28562006aaa565b905460039190911b1c6001600160a01b031662000b13828b62005ab0565b90620096ac565b6000805b85811062009865575b50156200983d575b620098379062005a5a565b62009682565b9262009837906200985c906001600160a01b03620082a2878662005ab0565b9390506200982c565b6001600160a01b03806200987a858762005ab0565b51169062009889838a62005ab0565b511614620098a2576200989c9062005a5a565b6200981b565b505060013862009824565b935050929062009671565b8060031b9060ff60078301541615620099165762009904620075a96200046b94620098f862009910956002620098ee8762006959565b91015490620069da565b92906200046462012ded565b93906200046462012ded565b620094ea565b50620094f5565b80518281101562003d035760140362009abd575050604080910190620099496101008351015162005a6a565b51926200996060e062007755818651015162005a6a565b519562009971855185511462011c60565b62009980855188511462011cc6565b60005b855181101562009a685762009999818962005ab0565b51620099a6828762005ab0565b51612710918282101562005a78576006620099c79260031b01549062006c06565b90620099d4848962005ab0565b51918383101562005a78576006620099f19360031b015562011d80565b620099fd828a62005ab0565b519062009a0b838862005ab0565b518181101562005a78576001600160a01b03939262009a34916003908662007865878e62005ab0565b62009a40848a62005ab0565b519283101562005a785760036200046b9362009a6296620078aa878e62005ab0565b62009983565b50939262009a7e91929650620078dc9062012c2b565b94519262009a8c8462003c06565b60008452600036813760005b83518110156200792b57806200046b6200791c62009ab7938762005ab0565b62009a98565b939293519081101562003d035760150362009ae4576020916200046b6200793f9262011e84565b60405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206f7065726174696f6e207479706560501b6044820152606490fd5b60405162461bcd60e51b815260206004820152601b60248201527a13dc195c985d1a5bdb881d1e5c19481a5cc81d5b9919599a5b9959602a1b6044820152606490fd5b50915050565b6002810362009b8f5760405162461bcd60e51b81528062005a56600482016200761c565b60011462009b9a5750565b9062009baa620138835462005ac5565b805190600160401b821162003b9b5762027116548262027116558083106201037c575b506020016202711660005260206000206000915b8383106201035b575050505060005b620138835481101562009c2a57806200046b62009c1162009c2493620067af565b5062009c1d83620067d0565b906201090c565b62009bf0565b5062009c3a620138825462005ac5565b805190600160401b821162003b9b576202711554826202711555808310620102be575b506020016202711560005260206000206000915b8383106201029d575050505060005b620138825481101562009cb357806200046b62009ca162009cad93620067f1565b5062009c1d8362006812565b62009c80565b5060005b6127108110158062009e7f57600160ff6201389a8460031b01541615151462009ced575b5062009ce79062005a5a565b62009cb7565b916000835b62005a7857620138978360031b015481101562009d5f5762009d569293506000928162009d298593620138978860031b0162006ac7565b9054600391821b1c6001600160a01b031660009081529087901b6201389601602052604081205562005a5a565b90939262009cf2565b50916040519062009d708262003c06565b6000825262005a78578051906001600160401b03821162003b9b5760209062009da283620138978660031b0162005b96565b01620138978360031b01600052602060002060005b83811062009e615750505050600381901b6201389a8101805460ff1916905560006201389382018190556201389482018190556201389582015562013898015462009ce7919062009e089062004249565b601f9081811162009e35575b50506000620138988260031b01556000620138998260031b01559062009cdb565b62009e5991620138988460031b016000526020600020910160051c81019062005b56565b388062009e14565b82516001600160a01b03168183015560209092019160010162009db7565b505060005b612710811062010208575060005b620138815481101562009eef578062009eaf62009ee99262006a19565b60018060a01b0391549060031b1c1660005262027113602052600060026040822082815562009ee16001820162005c16565b015562005a5a565b62009e92565b5062009eff620138815462006777565b8051906001600160401b03821162003b9b57600160401b821162003b9b576020906202711454836202711455808410620101e5575b500162027114600052602060002060005b838110620101c7575050505060005b620138815481101562009fc95762009f6c8162006a19565b9054620271145460039290921b1c6001600160a01b0316919081101562005a785762027114600052600080516020620133dc833981519152810180546001600160a01b03191690921790915562009fc39062005a5a565b62009f54565b509060005b62013881548110156200a08b578062009feb6200a0409262006a19565b9060018060a01b03918291549060031b1c1660005262013880602052604080600020916200a0198462006a19565b90549060031b1c1660005262027113602052600020908082036200a046575b505062005a5a565b62009fce565b600280916200a06c60ff6200a05f818454168762006070565b825460081c168562006081565b6200a07e600182016001860162010592565b015491015538806200a038565b5060005b6202711d548110156200a0df57806200a0ac6200a0d99262006a36565b60018060a01b0391549060031b1c166000526202711c6020526200046b6040600020606481019062005b56565b6200a08f565b506200a0ef6201388a5462006777565b8051906001600160401b03821162003b9b57600160401b821162003b9b576020906202711d54836202711d55808410620101a4575b50016202711d600052602060002060005b83811062010186575050505060005b6201388a548110156200a18857806200046b6200a1656200a1829362006a53565b905460039190911b1c6001600160a01b031662006ce18362006a36565b6200a144565b5060005b6201388a548110156200a21657806200a1a96200a1fd9262006a53565b9060018060a01b03918291549060031b1c1660005262013889602052604080600020916200a1d78462006a53565b90549060031b1c166000526202711c602052600020908082036200a20357505062005a5a565b6200a18c565b6200a20e91620109a0565b38806200a038565b506201388b546202711e556201388c546202711f556201388d5462027120556201388e5462027121556201388f546001600160401b03811162003b9b57600160401b811162003b9b57620271225481620271225580821062010157575b506202712260009081527f846ab89c81ea9339188216a1864da1a19ebe28d411cbec99efa70ca6d389710d80546000805160206201335c83398151915291905b848410620101355750505050506201389054600160401b811162003b9b576202712354816202712355808210620100f2575b506202712360009081526000805160206201337c8339815191527f7f73709277f72a9bc7b284375e83603a53394744e9fa86da811e86c2aa78e05e5b838310620100d457505062013891549150506001600160401b03811162003b9b57600160401b811162003b9b576202712454816202712455808210620100a5575b506202712460009081527f8f332db73d3937798ea82422156d059730b0b3058606439b57b7ae623e9453668054600080516020620133fc83398151915291905b8484106201008357505050505060ff6201389254161515620271259060ff8019835416911617905560005b62027119548110156200a41957806200a3ea6200a4139262006a70565b905460039190911b1c6001600160a01b0316600090815262027118602052604081205562005a5a565b6200a3cd565b506200a429620138865462006777565b8051906001600160401b03821162003b9b57600160401b821162003b9b57602090620271195483620271195580841062010060575b500162027119600052602060002060005b83811062010042575050505060005b62013886548110156200a4c257806200046b6200a49f6200a4bc93620069fc565b905460039190911b1c6001600160a01b031662006ce18362006a70565b6200a47e565b5060005b62013886548110156200a53457806200a4e36200a52e92620069fc565b9060018060a01b03918291549060031b1c166000526201388560205260408060002054916200a51284620069fc565b90549060031b1c16600052620271186020526000205562005a5a565b6200a4c6565b5060005b6202711b548110156200a58457806200a5556200a57e9262006a8d565b905460039190911b1c6001600160a01b031660009081526202711a602052604081205562005a5a565b6200a538565b506200a594620138885462006777565b8051906001600160401b03821162003b9b576020906200a5b48362005bce565b016202711b600052602060002060005b83811062010024575050505060005b62013888548110156200a61757806200046b6200a5f46200a6119362006aaa565b905460039190911b1c6001600160a01b031662006ce18362006a8d565b6200a5d3565b5060005b62013888548110156200a68957806200a6386200a6839262006aaa565b9060018060a01b03918291549060031b1c166000526201388760205260408060002054916200a6678462006aaa565b90549060031b1c166000526202711a6020526000205562005a5a565b6200a61b565b50906000905b602083015180518310156200e52e57826200a6aa9162005ab0565b516020810151602281101562003d03571562009b22576020810151602281101562003d03576001036200ac8957604001906200a6ec6101008351015162005a6a565b51936200a70360e062007755818651015162005a6a565b51916200a714865185511462011c60565b6200a723865184511462011cc6565b60005b86518110156200a886576200a73c818662005ab0565b5161271081101562005a7857600160ff6201389a6200a7649360031b01541615151462011d28565b6200a770818562005ab0565b516200a77d828762005ab0565b519061271082101562005a7857620138996200a79f9260031b01549062006c06565b906200a7ac838862005ab0565b519161271083101562005a7857620138996200a7cd9360031b015562011d80565b6200a7d9818562005ab0565b516200a7e6828762005ab0565b519061271082101562005a78576200a82a9162013896906001600160a01b036200a811868d62005ab0565b511660005260031b016020526040600020549062006c06565b91906200a838828862005ab0565b519061271082101562005a78576200a880936200046b9262013896906001600160a01b036200a868878f62005ab0565b511660005260031b0160205260406000205562011ddf565b6200a726565b50926200a89d9192506200852c9095949562012c2b565b916040516200a8ac8162003c06565b6000815260003681376000945b80518610156200ac6f576200a8cf868262005ab0565b51610600526200a8e0855162006777565b966000946200a8f0845162006777565b6103805260009460005b88518110156200a9c3578a896200a92a6001600160a01b036200a91e858462005ab0565b51166106005162012a61565b15806200a97a575b6200a94b575b50506200a9459062005a5a565b6200a8fa565b986200a96f9162000b1382859c62007fee6200a9459760018060a01b039262005ab0565b9790508a896200a938565b50505061271061060051101562005a78576001600160a01b036200a99f828b62005ab0565b5116600052620138966106005160031b016020528a8960406000205415156200a932565b50909895979498969291939660005b88518110156200aa625761271061060051101562005a78576001600160a01b03806200a9ff838c62005ab0565b5116600052620138966106005160031b01602052604060002054156200aa32575b506200aa2c9062005a5a565b6200a9d2565b819b6200aa5a916200aa496200aa2c948d62005ab0565b511662000b13826103805162005ab0565b9a906200aa20565b5098509695929190939661060051612710811015806101205262005a785760031b620138970154986200aa9a6200811f898c620118f8565b610580526000610540526000610400525b6101205162005a7857610400518a8110156200ab76576200aae26200ab0291600061012052620138976106005160031b0162006ac7565b9054610380516001600160a01b03939260031b9190911c83169062012aba565b156200ab22575b506200ab186104005162005a5a565b610400526200aaab565b6000610120526200ab4261040051620138976106005160031b0162006ac7565b90549060031b1c166200ab5c610540516105805162005ab0565b526200ab6b6105405162005a5a565b61054052386200ab09565b50979294959093985095909560005b8281106200ac23575050506101205162005a785761058051516001600160401b03811162003b9b576200abc481620138976106005160031b0162005b96565b60206105805101620138976106005160031b01600052602060002060005b8381106200ac0557505050506200abf99062005a5a565b9492959091956200a8b9565b82516001600160a01b0316818301556020909201916001016200abe2565b6200ac69906001600160a01b036200ac3c828562005ab0565b51166200ac50610540516105805162005ab0565b526200ac5f6105405162005a5a565b6105405262005a5a565b6200ab85565b5050939092506200ac81915062005a5a565b90916200a68f565b906020829493940151602281101562003d03576002036200af165760408092019081519383850151916200acc66200798460e08098015162005a6a565b5194835187510362007c8957835185510362007c3557835186510362007bde575060005b86518110156200af03576200ad00818862005ab0565b5161271081101562005a785760ff6201389a6200ad249260031b0154161562011e38565b6200ad30818862005ab0565b5161271081101562005a785760031b6201389a01805460ff191660011790556200ad5b818562005ab0565b516200ad68828962005ab0565b519061271082101562005a78578051906001600160401b03821162003b9b576200adaf826200ada0620138988660031b015462004249565b620138988660031b0162006026565b602090601f83116001146200ae8457620138989291600091836200ae78575b50508160011b916000199060031b1c1916179160031b01555b6200adf3818662005ab0565b516200ae00828962005ab0565b5161271081101562005a785760031b6201389401556200ae21818762005ab0565b516200ae2e828962005ab0565b5161271081101562005a785760031b6201389501556200ae4f818862005ab0565b519061271082101562005a78576000620138996200ae729360031b015562005a5a565b6200acea565b0151905038806200adce565b90620138988460031b0160005260206000209160005b601f19851681106200aeea57509183916001936201389895601f198116106200aed0575b505050811b019160031b01556200ade7565b015160001960f88460031b161c191690553880806200aebe565b919260206001819286850151815501940192016200ae9a565b509592509350506200ac81915062005a5a565b9092916020840151602281101562003d03576003036200b5445760408401906200af466101008351015162005a6a565b51906200af5d60e062007755818651015162005a6a565b51936200af7283518551146200046462012e52565b6200af8583518651146200046462012e52565b60005b83518110156200afe4576200af9e818662005ab0565b519061271082101562005a7857620138966200afde9260018060a01b038b511660005260031b016020526200046b60406000205462007da0838a62005ab0565b6200af88565b509095919560005b87518110156200b136576200b002818662005ab0565b5161271081101562005a7857620138969060018060a01b0386511660005260031b016020526200b03d60406000205462007e0d838962005ab0565b906200b04a838862005ab0565b519161271083101562005a7857620138966200b0849360018060a01b0389511660005260031b016020526040600020556200046462012f56565b6200b090818662005ab0565b5161271081101562005a785762013896906001600160a01b036200b0b5848c62005ab0565b511660005260031b016020526200b0d760406000205462006dd4838962005ab0565b91906200b0e5828862005ab0565b519061271082101562005a78576200b13093620138966200046b938d6200b1148760018060a01b039262005ab0565b511660005260031b016020526040600020556200046462012fbb565b6200afec565b50926200b155919294506200b14e9096959662012c2b565b9462012b0f565b92604051906200b1658262003bea565b6001825260203681840137516001600160a01b03166200b1858262005a6a565b526000945b80518610156200ac6f576200b1a0868262005ab0565b516101e0526200b1b1855162006777565b966000946200b1c1845162006777565b6103005260009460005b88518110156200b294578a896200b1fb6001600160a01b036200b1ef858462005ab0565b51166101e05162012a61565b15806200b24b575b6200b21c575b50506200b2169062005a5a565b6200b1cb565b986200b2409162000b1382859c62007fee6200b2169760018060a01b039262005ab0565b9790508a896200b209565b5050506127106101e051101562005a78576001600160a01b036200b270828b62005ab0565b5116600052620138966101e05160031b016020528a8960406000205415156200b203565b50909895979498969291939660005b88518110156200b33a576127106101e051101562005a78576001600160a01b036200b2cf828b62005ab0565b5116600052620138966101e05160031b01602052604060002054156200b301575b6200b2fb9062005a5a565b6200b2a3565b996200b2fb906200b331906001600160a01b036200b3208e8d62005ab0565b511662000b13826103005162005ab0565b9a90506200b2f0565b509850969592919093966101e051612710811015806104405262005a785760031b620138970154986200b3726200811f898c620118f8565b60a05260006101405260006103c0525b6104405162005a78576103c0518a8110156200b44e576200b3b96200b3d691600061044052620138976101e05160031b0162006ac7565b90546103005160039290921b1c6001600160a01b03169062012aba565b156200b3f5575b6200b3eb6103c05162005a5a565b6103c0526200b382565b6000610440526200b4156103c051620138976101e05160031b0162006ac7565b60018060a01b0391549060031b1c166200b4356101405160a05162005ab0565b526200b4446101405162005a5a565b610140526200b3dd565b50979294959093985095909560005b8281106200b4f9575050506104405162005a785760a051516001600160401b03811162003b9b576200b49b81620138976101e05160031b0162005b96565b602060a05101620138976101e05160031b01600052602060002060005b8381106200b4db57505050506200b4cf9062005a5a565b9492959091956200b18a565b82516001600160a01b0316818301556020909201916001016200b4b8565b6200b53e906001600160a01b036200b512828562005ab0565b51166200b5256101405160a05162005ab0565b526200b5346101405162005a5a565b6101405262005a5a565b6200b45d565b90926020810151602281101562003d03576004036200bb9157610100936200b5866200b577866040850151015162005a6a565b51956040840151015162005a8e565b51906200b5ad60e060406200b5a18282880151015162005a6a565b51950151015162005a8e565b51936200b5c287518451146200046462012e52565b6200b5d587518551146200046462012e52565b6200b5e887518651146200046462012e52565b60005b87518110156200b654576200b601818662005ab0565b519061271082101562005a78576200b64e9162013896906001600160a01b036200b62c848d62005ab0565b511660005260031b016020526200046b60406000205462007da0838a62005ab0565b6200b5eb565b509095919593929360005b83518110156200b7bb576200b675818762005ab0565b5161271081101562005a785762013896906001600160a01b036200b69a848862005ab0565b511660005260031b016020526200b6bc60406000205462007e0d838862005ab0565b906200b6c9838962005ab0565b519161271083101562005a78576200b7109262013896906001600160a01b036200b6f4878b62005ab0565b511660005260031b016020526040600020556200046462012f56565b6200b71c818762005ab0565b5161271081101562005a785762013896906001600160a01b036200b741848c62005ab0565b511660005260031b016020526200b76360406000205462006dd4838862005ab0565b9190506200b772818862005ab0565b519161271083101562005a78576200b7b59262013896906001600160a01b036200b79d858e62005ab0565b511660005260031b0160205260406000205562005a5a565b6200b65f565b5091936200b7d791935062007efe6200852c9197969762012c2b565b6000945b80518610156200ac6f576200b7f1868262005ab0565b51610520526200b802855162006777565b966000946200b812845162006777565b6102e05260009460005b88518110156200b8e5578a896200b84c6001600160a01b036200b840858462005ab0565b51166105205162012a61565b15806200b89c575b6200b86d575b50506200b8679062005a5a565b6200b81c565b986200b8919162000b1382859c62007fee6200b8679760018060a01b039262005ab0565b9790508a896200b85a565b50505061271061052051101562005a78576001600160a01b036200b8c1828b62005ab0565b5116600052620138966105205160031b016020528a8960406000205415156200b854565b50909895979498969291939660005b88518110156200b9845761271061052051101562005a78576001600160a01b03806200b921838c62005ab0565b5116600052620138966105205160031b01602052604060002054156200b954575b506200b94e9062005a5a565b6200b8f4565b819b6200b97c916200b96b6200b94e948d62005ab0565b511662000b13826102e05162005ab0565b9a906200b942565b5098509695929190939661052051612710811015806105a05262005a785760031b620138970154986200b9bc6200811f898c620118f8565b6104805260006105605260006102c0525b6105a05162005a78576102c0518a8110156200ba98576200ba046200ba249160006105a052620138976105205160031b0162006ac7565b90546102e0516001600160a01b03939260031b9190911c83169062012aba565b156200ba44575b506200ba3a6102c05162005a5a565b6102c0526200b9cd565b60006105a0526200ba646102c051620138976105205160031b0162006ac7565b90549060031b1c166200ba7e610560516104805162005ab0565b526200ba8d6105605162005a5a565b61056052386200ba2b565b50979294959093985095909560005b8281106200bb45575050506105a05162005a785761048051516001600160401b03811162003b9b576200bae681620138976105205160031b0162005b96565b60206104805101620138976105205160031b01600052602060002060005b8381106200bb2757505050506200bb1b9062005a5a565b9492959091956200b7db565b82516001600160a01b0316818301556020909201916001016200bb04565b6200bb8b906001600160a01b036200bb5e828562005ab0565b51166200bb72610560516104805162005ab0565b526200bb816105605162005a5a565b6105605262005a5a565b6200baa7565b92906020840151602281101562003d03576005036200c1475760408401906200bbc460e062008595818551015162005a6a565b519282518451036200c0f55760005b83518110156200bc2f576200bbe9818562005ab0565b519061271082101562005a7857620138966200bc299260018060a01b038a511660005260031b016020526200046b60406000205462007da0838962005ab0565b6200bbd3565b509060005b83518110156200bcd8576200bc4a818562005ab0565b5161271081101562005a7857620138969060018060a01b0389511660005260031b016020526200bc8560406000205462007e0d838862005ab0565b91906200bc93828762005ab0565b519061271082101562005a78576200bcd293620138966200046b9360018060a01b038d511660005260031b016020526040600020556200046462012f56565b6200bc34565b50916200bce9919495935062012c2b565b92604051926200bcf98462003bea565b6001845260203681860137516001600160a01b03166200bd198462005a6a565b52604051926200bd298462003c06565b6000845260003681376000945b80518610156200ac6f576200bd4c868262005ab0565b51610180526200bd5d855162006777565b966000946200bd6d845162006777565b6105e05260009460005b88518110156200be40578a896200bda76001600160a01b036200bd9b858462005ab0565b51166101805162012a61565b15806200bdf7575b6200bdc8575b50506200bdc29062005a5a565b6200bd77565b986200bdec9162000b1382859c62007fee6200bdc29760018060a01b039262005ab0565b9790508a896200bdb5565b50505061271061018051101562005a78576001600160a01b036200be1c828b62005ab0565b5116600052620138966101805160031b016020528a8960406000205415156200bdaf565b50909895979498969291939660005b88518110156200bee65761271061018051101562005a78576001600160a01b036200be7b828b62005ab0565b5116600052620138966101805160031b01602052604060002054156200bead575b6200bea79062005a5a565b6200be4f565b996200bea7906200bedd906001600160a01b036200becc8e8d62005ab0565b511662000b13826105e05162005ab0565b9a90506200be9c565b5098509695929190939661018051612710811015806104205262005a785760031b620138970154986200bf1e6200811f898c620118f8565b6102405260006104a05260006101a0525b6104205162005a78576101a0518a8110156200bffc576200bf666200bf8391600061042052620138976101805160031b0162006ac7565b90546105e05160039290921b1c6001600160a01b03169062012aba565b156200bfa2575b6200bf986101a05162005a5a565b6101a0526200bf2f565b6000610420526200bfc26101a051620138976101805160031b0162006ac7565b60018060a01b0391549060031b1c166200bfe36104a0516102405162005ab0565b526200bff26104a05162005a5a565b6104a0526200bf8a565b50979294959093985095909560005b8281106200c0a9575050506104205162005a785761024051516001600160401b03811162003b9b576200c04a81620138976101805160031b0162005b96565b60206102405101620138976101805160031b01600052602060002060005b8381106200c08b57505050506200c07f9062005a5a565b9492959091956200bd36565b82516001600160a01b0316818301556020909201916001016200c068565b6200c0ef906001600160a01b036200c0c2828562005ab0565b51166200c0d66104a0516102405162005ab0565b526200c0e56104a05162005a5a565b6104a05262005a5a565b6200c00b565b60405162461bcd60e51b815260206004820152603560248201526000805160206201339c833981519152604482015274195b905b5bdd5b9d081a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b926020810151602281101562003d03576006036200c730576040016200c1736101008251015162005a6a565b51936200c18a60e062008595818551015162005a6a565b519285518351036200c6de5785518451036200c6915760005b86518110156200c20c576200c1b9818562005ab0565b519061271082101562005a78576200c2069162013896906001600160a01b036200c1e4848c62005ab0565b511660005260031b016020526200046b60406000205462007da0838962005ab0565b6200c1a3565b509060005b86518110156200c2b2576200c227818562005ab0565b5161271081101562005a785762013896906001600160a01b036200c24c848b62005ab0565b511660005260031b016020526200c26e60406000205462007e0d838862005ab0565b91906200c27c828762005ab0565b519061271082101562005a78576200c2ac936200046b9262013896906001600160a01b036200b6f4878f62005ab0565b6200c211565b50916200c2c99193506200852c9095949562012c2b565b91604051926200c2d98462003c06565b6000845260003681376000945b80518610156200ac6f576200c2fc868262005ab0565b5160e0526200c30c855162006777565b966000946200c31c845162006777565b6103a05260009460005b88518110156200c3ec578a896200c3556001600160a01b036200c34a858462005ab0565b511660e05162012a61565b15806200c3a5575b6200c376575b50506200c3709062005a5a565b6200c326565b986200c39a9162000b1382859c62007fee6200c3709760018060a01b039262005ab0565b9790508a896200c363565b50505061271060e051101562005a78576001600160a01b036200c3c9828b62005ab0565b51166000526201389660e05160031b016020528a8960406000205415156200c35d565b50909895979498969291939660005b88518110156200c4895761271060e051101562005a78576001600160a01b03806200c427838c62005ab0565b51166000526201389660e05160031b01602052604060002054156200c459575b506200c4539062005a5a565b6200c3fb565b819b6200c481916200c4706200c453948d62005ab0565b511662000b13826103a05162005ab0565b9a906200c447565b5098509695929190939660e051612710811015806102805262005a785760031b620138970154986200c4c06200811f898c620118f8565b6105c0526000610460526000610320525b6102805162005a7857610320518a8110156200c59a576200c5076200c527916000610280526201389760e05160031b0162006ac7565b90546103a0516001600160a01b03939260031b9190911c83169062012aba565b156200c547575b506200c53d6103205162005a5a565b610320526200c4d1565b6000610280526200c566610320516201389760e05160031b0162006ac7565b90549060031b1c166200c580610460516105c05162005ab0565b526200c58f6104605162005a5a565b61046052386200c52e565b50979294959093985095909560005b8281106200c645575050506102805162005a78576105c051516001600160401b03811162003b9b576200c5e7816201389760e05160031b0162005b96565b60206105c051016201389760e05160031b01600052602060002060005b8381106200c62757505050506200c61b9062005a5a565b9492959091956200c2e6565b82516001600160a01b0316818301556020909201916001016200c604565b6200c68b906001600160a01b036200c65e828562005ab0565b51166200c672610460516105c05162005ab0565b526200c6816104605162005a5a565b6104605262005a5a565b6200c5a9565b60405162461bcd60e51b815260206004820152603060248201526000805160206201343c83398151915260448201526f1b9d1cc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b60405162461bcd60e51b815260206004820152603560248201526000805160206201333c8339815191526044820152741b90db185cdcd95cc81a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b6020819493940151602281101562003d03576007036200c9d857604001906200c75f6101008351015162005a6a565b519260406200c77360e08551015162005a6a565b5193510151916200c78c85518551146200046462012e52565b60005b85518110156200c9c6576001600160a01b036200c7ad828862005ab0565b511660005262027113806020526200c7d260ff60406000205416156200046462012f23565b6200c7de828662005ab0565b51906200c7ec838862005ab0565b5191604051916200c7fd8362003b7f565b600183526000602084019081526040840192835260608401949094526001600160a01b036200c82d868c62005ab0565b51166000526020526200c8586040600020936200c84e845115158662006070565b5115158462006081565b518051906001600160401b03821162003b9b576200c889826200c87f600187015462004249565b6001870162006026565b602090601f83116001146200c94c579180600294926060946000926200c940575b50508160011b916000199060031b1c19161760018501555b01519101556001600160a01b036200c8db828862005ab0565b516202711454929116600160401b83101562003b9b576001830180620271145583101562005a785762027114600052600080516020620133dc83398151915290920180546001600160a01b0319169092179091556200c93a9062005a5a565b6200c78f565b0151905038806200c8aa565b906001850160005260206000209160005b601f19851681106200c9ad5750926002949260019260609583601f198116106200c993575b505050811b0160018501556200c8c2565b015160001960f88460031b161c191690553880806200c982565b919260206001819286850151815501940192016200c95d565b5094915092506200ac81915062005a5a565b6020819392930151602281101562003d03576008036200cacb5761010060406200ca06920151015162005a6a565b519160005b83518110156200cabc576200cab6906001600160a01b03806200ca2f838862005ab0565b51166000526202711390816020526200ca59600160ff604060002054161515146200046462012e82565b806200ca66848962005ab0565b5116600052816020526200ca8a60ff60406000205460081c16156200046462012eea565b6200ca96838862005ab0565b5116600052602052604060002061010061ff001982541617905562005a5a565b6200ca0b565b50926200ac8191925062005a5a565b6020810151602281101562003d03576009036200cbac5761010060406200caf6920151015162005a6a565b519160005b83518110156200cabc576200cba6906001600160a01b03806200cb1f838862005ab0565b51166000526202711390816020526200cb49600160ff604060002054161515146200046462012e82565b806200cb56848962005ab0565b5116600052816020526200cb7e600160ff60406000205460081c161515146200046462012eb5565b6200cb8a838862005ab0565b5116600052602052604060002061ff0019815416905562005a5a565b6200cafb565b906020820151602281101562003d0357600f036200ccf75760a0604083015101519260005b84518110156200cce65760e06200cbf18260a06040880151015162005ab0565b510151156200cc73576200cc196200cc128260a06040880151015162005ab0565b51620068c8565b6202711554600019919082810190811162003229576200cc3b60059162006812565b500161010061ff00198254161790556202711554918281810111620032295762008ed46005916200cc6d940162006812565b6200cbd1565b6200cc926200cc8b8260a06040880151015162005ab0565b51620068a4565b6202711654600019919082810190811162003229576200ccb4600591620067d0565b500161010061ff00198254161790556202711654918281810111620032295762008ed46005916200cc6d9401620067d0565b50939092506200ac81915062005a5a565b6020820151602281101562003d0357600c036200ce225760a0604083015101519260005b84518110156200cce65760e06200cd3b8260a06040880151015162005ab0565b510151156200cdb6576200cd5c6200cc128260a06040880151015162005ab0565b6202711554600019919082810190811162003229576200cd7e60059162006812565b500161010061ff001982541617905562027115549182818101116200322957620090026005916200cdb0940162006812565b6200cd1b565b6200cdce6200cc8b8260a06040880151015162005ab0565b6202711654600019919082810190811162003229576200cdf0600591620067d0565b500161010061ff001982541617905562027116549182818101116200322957620090026005916200cdb09401620067d0565b9291906020810151602281101562003d0357600d036200cf7b576040019260606200ce5260e08651015162005a6a565b5194510151916200ce6785518451146201199f565b60005b85518110156200cf6b57806200ce856200ceff928662005ab0565b51156200cf05576200cea96200ce9c828962005ab0565b5162027115541162011a28565b6200ced560ff60056200cec86200cec1858c62005ab0565b5162006812565b50015460081c1662011a80565b6200ceed60ff6005620091436200cec1858c62005ab0565b600562008ed46200cec1838a62005ab0565b6200ce6a565b6200cf226200cf15828962005ab0565b5162027116541162011a28565b6200cf4160ff60056200cec86200cf3a858c62005ab0565b51620067d0565b6200cf5960ff6005620091436200cf3a858c62005ab0565b600562008ed46200cf3a838a62005ab0565b509350916200ac81915062005a5a565b6020810151602281101562003d0357600e036200d0b3576040019260606200cfa860e08651015162005a6a565b5194510151916200cfbd85518451146201199f565b60005b85518110156200cf6b57806200cfdb6200d04e928662005ab0565b51156200d054576200cfff6200cff2828962005ab0565b5162027115541162011b42565b6200d02460ff60056200d0176200cec1858c62005ab0565b50015460081c1662011b9b565b6200d03c60ff6005620092a06200cec1858c62005ab0565b6005620090026200cec1838a62005ab0565b6200cfc0565b6200d0716200d064828962005ab0565b5162027116541162011b42565b6200d08960ff60056200d0176200cf3a858c62005ab0565b6200d0a160ff6005620092a06200cf3a858c62005ab0565b6005620090026200cf3a838a62005ab0565b6020810151602281101562003d03576010036200d1f95760400151926200d0e360e060c086015195015162005a6a565b51916200d0f885518451146200046462012e52565b60005b85518110156200cf6b57806200d1166200d18c928862005ab0565b516200d1228162003db9565b6200d12e828762005ab0565b51906200d13b8162003db9565b6200d1526200d14962012f85565b82151562005a27565b6200d15d8162003db9565b600181036200d19257506200d1816200d17562012f85565b61271083111562005a27565b6202711e5562005a5a565b6200d0fb565b6200d19d8162003db9565b600281036200d1b257506202711f5562005a5a565b6200d1bd8162003db9565b600381036200d1d25750620271205562005a5a565b806200d1e060049262003db9565b146200d1ed575062005a5a565b6202712155386200941a565b602081949392940151602281101562003d0357601a036200d3b15760e060406200d227920151015162005a6a565b519060038251036200d36d576200d23e8262005a6a565b516200d2566200d24e8462005a8e565b519362005a9f565b51926200d331576200ac81926001036200941a576200d27e6200d2dd91620271205462006c06565b6202712055604051906200d2928262003c22565b603282527f6469766964656e6461626c652062616c616e6365206f766572666c6f772077686020830152710cadc40e0e4dec6cae6e6d2dcce40c6c2e6d60731b604083015262005a27565b6200046b6200d2f0620271215462006bf3565b6202712155604051906200d3048262003bea565b601a8252796469766964656e647320636f756e746572206f766572666c6f7760301b602083015262005a27565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207061796d656e74207479706560601b6044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527b496e76616c6964206e756d626572206f6620706172616d657465727360201b6044820152606490fd5b6020819392930151602281101562003d0357601b036200d9d657506202711e929192546200d3e2620094ce62012d29565b62027121546202711f5411156200d4036200d3fc62012d97565b8262005a27565b6202712054906200d4158383620069da565b50506200d42162012ded565b506000805b61271082106200d92a575b5050906200d4616200d46793926200d4576200d44c62012d29565b612710861062005a27565b6200046462012d97565b620069da565b90506200d47362012ded565b5060009060005b61271081106200d852575b50906127106200d496920462006c94565b90506200d4a76202712a5462006777565b906000946000905b6127108210156200d845578160031b9460ff6201389a87015416156200d60d5760009662013895870154156200d5fc57600098975b62005a7857620138978701548910156200d5e2576200d5098962013897890162006ac7565b600160a01b6001900391549060031b1c169788600052620138968801602052604098868a60002054906200d53d91620069da565b9a906200d54962012ded565b6200d5549162005a27565b60009a620138958b01546200d56991620069da565b906200d57462012ded565b6200d57f9162005a27565b826000526202711a6020528160002054906200d59b9162006c06565b9091600020556200d5ab62012ded565b6200d5b69162005a27565b6200d5c2828962005ab0565b526200d5ce9062005a5a565b986200d5da9062005a5a565b98976200d4e4565b929095506200d5f49196975062005a5a565b90946200d4af565b929095506200d5f491965062005a5a565b95969392509350505b6200d6218262006777565b9160009160005b8281106200d7af575050506202711b54916200d6496200811f8484620118f8565b926000906000905b8082106200d77457505060005b8381106200d6de5750508251929150506001600160401b03821162003b9b576020906200d68b8362005bce565b016202711b600052602060002060005b8381106200d6c057505050506200ac8190600062027120556000620271215562005a5a565b82516001600160a01b0316818301556020909201916001016200d69b565b6000805b8381106200d72c575b50156200d704575b6200d6fe9062005a5a565b6200d65e565b906200d6fe906200d723906001600160a01b03620082a2858762005ab0565b9190506200d6f3565b6001600160a01b03806200d741858862005ab0565b5116906200d750838a62005ab0565b5116146200d769576200d7639062005a5a565b6200d6e2565b50506001386200d6eb565b9091620082b06200d7a8916200d78a8562006a8d565b905460039190911b1c6001600160a01b031662000b13828a62005ab0565b906200d651565b6000805b8581106200d7fd575b50156200d7d5575b6200d7cf9062005a5a565b6200d628565b926200d7cf906200d7f4906001600160a01b03620082a2878662005ab0565b9390506200d7c4565b6001600160a01b03806200d812858762005ab0565b5116906200d821838a62005ab0565b5116146200d83a576200d8349062005a5a565b6200d7b3565b50506001386200d7bc565b939495929150506200d616565b90918160039695961b60ff6201389a82015416156200d91e5762013895810154620138978201546000928391825b8184106200d8bc5750505050620075a96200d8b3936200d8ab6200046b979694620035d894620069da565b9290620068ec565b9493946200d47a565b94929462005a78576200d917856200d90f6200d8e26200046b9862013897870162006ac7565b905460039190911b1c6001600160a01b031660009081526201389686016020526040812054909662006c06565b979062006ae0565b926200d880565b5091909493946200d485565b8160039897981b60ff6201389a82015416156200d9cc576201389581015490600062013897820154916000926000925b8184106200d9975750505050620075a96200d98d93620098f8846200d4616200350562009904966200046b9a98620069da565b909695966200d426565b93929362005a78576200d9c5846200d9bd6200d8e26200046b9762013897870162006ac7565b969062006ae0565b926200d95a565b509695966200d431565b6020819492940151602281101562003d03576014036200df2357604001906200da056101008351015162005a6a565b51936200da1c60e062007755818651015162005a6a565b51916200da2d865185511462011c60565b6200da3c865184511462011cc6565b60005b86518110156200db3a576200da55818562005ab0565b516200da62828762005ab0565b519061271082101562005a7857620138996200da849260031b01549062006c06565b906200da91838862005ab0565b519161271083101562005a7857620138996200dab29360031b015562011d80565b6200dabe818562005ab0565b516200dacb828762005ab0565b519061271082101562005a78576200daf69162013896906001600160a01b036200a811868d62005ab0565b91906200db04828862005ab0565b519061271082101562005a78576200db34936200046b9262013896906001600160a01b036200a868878f62005ab0565b6200da3f565b50926200db519192506200852c9095949562012c2b565b916040516200db608162003c06565b6000815260003681376000945b80518610156200ac6f576200db83868262005ab0565b51610220526200db94855162006777565b966000946200dba4845162006777565b6103605260009460005b88518110156200dc77578a896200dbde6001600160a01b036200dbd2858462005ab0565b51166102205162012a61565b15806200dc2e575b6200dbff575b50506200dbf99062005a5a565b6200dbae565b986200dc239162000b1382859c62007fee6200dbf99760018060a01b039262005ab0565b9790508a896200dbec565b50505061271061022051101562005a78576001600160a01b036200dc53828b62005ab0565b5116600052620138966102205160031b016020528a8960406000205415156200dbe6565b50909895979498969291939660005b88518110156200dd165761271061022051101562005a78576001600160a01b03806200dcb3838c62005ab0565b5116600052620138966102205160031b01602052604060002054156200dce6575b506200dce09062005a5a565b6200dc86565b819b6200dd0e916200dcfd6200dce0948d62005ab0565b511662000b13826103605162005ab0565b9a906200dcd4565b5098509695929190939661022051612710811015806103405262005a785760031b620138970154986200dd4e6200811f898c620118f8565b6104e0526000610500526000610160525b6103405162005a7857610160518a8110156200de2a576200dd966200ddb691600061034052620138976102205160031b0162006ac7565b9054610360516001600160a01b03939260031b9190911c83169062012aba565b156200ddd6575b506200ddcc6101605162005a5a565b610160526200dd5f565b6000610340526200ddf661016051620138976102205160031b0162006ac7565b90549060031b1c166200de10610500516104e05162005ab0565b526200de1f6105005162005a5a565b61050052386200ddbd565b50979294959093985095909560005b8281106200ded7575050506103405162005a78576104e051516001600160401b03811162003b9b576200de7881620138976102205160031b0162005b96565b60206104e05101620138976102205160031b01600052602060002060005b8381106200deb957505050506200dead9062005a5a565b9492959091956200db6d565b82516001600160a01b0316818301556020909201916001016200de96565b6200df1d906001600160a01b036200def0828562005ab0565b51166200df04610500516104e05162005ab0565b526200df136105005162005a5a565b6105005262005a5a565b6200de39565b926020840151602281101562003d035760150362009ae45760408401906200df516101008351015162005a6a565b51906200df6860e062007755818651015162005a6a565b51936200df7d83518551146200046462012e52565b6200df9083518651146200046462012e52565b60005b83518110156200dfef576200dfa9818662005ab0565b519061271082101562005a7857620138966200dfe99260018060a01b038b511660005260031b016020526200046b60406000205462007da0838a62005ab0565b6200df93565b509095919560005b87518110156200e125576200e00d818662005ab0565b5161271081101562005a7857620138969060018060a01b0386511660005260031b016020526200e04860406000205462007e0d838962005ab0565b906200e055838862005ab0565b519161271083101562005a7857620138966200e08f9360018060a01b0389511660005260031b016020526040600020556200046462012f56565b6200e09b818662005ab0565b5161271081101562005a785762013896906001600160a01b036200e0c0848c62005ab0565b511660005260031b016020526200e0e260406000205462006dd4838962005ab0565b91906200e0f0828862005ab0565b519061271082101562005a78576200e11f93620138966200046b938d6200b1148760018060a01b039262005ab0565b6200dff7565b50926200e13d919294506200b14e9096959662012c2b565b92604051906200e14d8262003bea565b6001825260203681840137516001600160a01b03166200e16d8262005a6a565b526000945b80518610156200ac6f576200e188868262005ab0565b516102a0526200e199855162006777565b966000946200e1a9845162006777565b60805260009460005b88518110156200e27b578a896200e1e26001600160a01b036200e1d6858462005ab0565b51166102a05162012a61565b15806200e232575b6200e203575b50506200e1fd9062005a5a565b6200e1b2565b986200e2279162000b1382859c62007fee6200e1fd9760018060a01b039262005ab0565b9790508a896200e1f0565b5050506127106102a051101562005a78576001600160a01b036200e257828b62005ab0565b5116600052620138966102a05160031b016020528a8960406000205415156200e1ea565b50909895979498969291939660005b88518110156200e320576127106102a051101562005a78576001600160a01b036200e2b6828b62005ab0565b5116600052620138966102a05160031b01602052604060002054156200e2e8575b6200e2e29062005a5a565b6200e28a565b996200e2e2906200e317906001600160a01b036200e3078e8d62005ab0565b511662000b138260805162005ab0565b9a90506200e2d7565b509850969592919093966102a051612710811015806106205262005a785760031b620138970154986200e3586200811f898c620118f8565b6101c05260006104c05260006103e0525b6106205162005a78576103e0518a8110156200e435576200e3a06200e3bc91600061062052620138976102a05160031b0162006ac7565b905460805160039290921b1c6001600160a01b03169062012aba565b156200e3db575b6200e3d16103e05162005a5a565b6103e0526200e369565b6000610620526200e3fb6103e051620138976102a05160031b0162006ac7565b60018060a01b0391549060031b1c166200e41c6104c0516101c05162005ab0565b526200e42b6104c05162005a5a565b6104c0526200e3c3565b50979294959093985095909560005b8281106200e4e2575050506106205162005a78576101c051516001600160401b03811162003b9b576200e48381620138976102a05160031b0162005b96565b60206101c05101620138976102a05160031b01600052602060002060005b8381106200e4c457505050506200e4b89062005a5a565b9492959091956200e172565b82516001600160a01b0316818301556020909201916001016200e4a1565b6200e528906001600160a01b036200e4fb828562005ab0565b51166200e50f6104c0516101c05162005ab0565b526200e51e6104c05162005a5a565b6104c05262005a5a565b6200e444565b509190506200e53d8162010df2565b90600681101562003d0357600281036200e56c5760405162461bcd60e51b81528062005a56600482016200761c565b600381036200e61f5750303b1562003b655790604051809263a2f7d10160e01b82526044820160406004840152815180915260206064840192019060005b8181106200e605575050506200e5d08291600094600319848303016024850152620045b5565b038183305af180156200e5f9576200e5e55750565b6001600160401b03811162003b9b57604052565b6040513d6000823e3d90fd5b82518452869450602093840193909201916001016200e5aa565b60059150146200e62c5750565b906000905b6020830151805183101562009b6557826200e64c9162005ab0565b516020810151602281101562003d03571562009b22576020810151602281101562003d03576001036200e89557604001906200e68e6101008351015162005a6a565b51936200e6a560e062007755818651015162005a6a565b51916200e6b6865185511462011c60565b6200e6c5865184511462011cc6565b60005b86518110156200e81c576200e6de818662005ab0565b5161271081101562005a7857600160ff60076200e7049360031b01541615151462011d28565b6200e710818562005ab0565b516200e71d828762005ab0565b519061271082101562005a785760066200e73d9260031b01549062006c06565b906200e74a838862005ab0565b519161271083101562005a785760066200e7699360031b015562011d80565b6200e775818562005ab0565b516200e782828762005ab0565b519061271082101562005a78576200e7c3916003906001600160a01b036200e7ab868d62005ab0565b5116600052811b016020526040600020549062006c06565b91906200e7d1828862005ab0565b519061271082101562005a78576200e816936200046b926003906001600160a01b036200e7ff878f62005ab0565b5116600052811b0160205260406000205562011ddf565b6200e6c8565b50949150916200e8306200e8379162012c2b565b9162012b0f565b93604051926200e8478462003c06565b60008452600036813760005b83518110156200e87857806200046b6200791c6200e872938762005ab0565b6200e853565b50945092602092506200e88c915062005a5a565b9190506200e631565b9091926020820151602281101562003d03576002036200eb035760408092019081519383850151916200e8d16200798460e08098015162005a6a565b5194835187510362007c8957835185510362007c3557835186510362007bde575060005b86518110156200eaed576200e90b818862005ab0565b5161271081101562005a785760ff60076200e92d9260031b0154161562011e38565b6200e939818862005ab0565b5161271081101562005a785760031b600701805460ff191660011790556200e962818562005ab0565b516200e96f828962005ab0565b519061271082101562005a78578051906001600160401b03821162003b9b576200e9a58262007a7360058660031b015462004249565b602090601f83116001146200ea725760059291600091836200ea66575b50508160011b916000199060031b1c1916179160031b01555b6200e9e7818662005ab0565b516200e9f4828962005ab0565b5161271081101562005a785760031b600101556200ea13818762005ab0565b516200ea20828962005ab0565b5161271081101562005a785760031b600201556200ea3f818862005ab0565b519061271082101562005a7857600060066200ea609360031b015562005a5a565b6200e8f5565b0151905038806200e9c2565b9060058460031b0160005260206000209160005b601f19851681106200ead45750918391600193600595601f198116106200eaba575b505050811b019160031b01556200e9db565b015160001960f88460031b161c191690553880806200eaa8565b919260206001819286850151815501940192016200ea86565b509591509350602092506200e88c915062005a5a565b9291906020810151602281101562003d03576003036200eb3057602091926200046b6200e88c9262011e84565b6020810151602281101562003d03576004036200edce576200eb5b6101006040830151015162005a6a565b51936200eb716101006040840151015162005a8e565b51906200eb8c60e060406200b5a18282880151015162005a6a565b51936200eba187518451146200046462012e52565b6200ebb487518551146200046462012e52565b6200ebc787518651146200046462012e52565b60005b87518110156200ec30576200ebe0818662005ab0565b519061271082101562005a78576200ec2a916003906001600160a01b036200ec09848d62005ab0565b5116600052811b016020526200046b60406000205462007da0838a62005ab0565b6200ebca565b509095919593929360005b83518110156200ed8b576200ec51818762005ab0565b5161271081101562005a78576003906001600160a01b036200ec74848862005ab0565b5116600052811b016020526200ec9560406000205462007e0d838862005ab0565b906200eca2838962005ab0565b519161271083101562005a78576200ece6926003906001600160a01b036200eccb878b62005ab0565b5116600052811b016020526040600020556200046462012f56565b6200ecf2818762005ab0565b5161271081101562005a78576003906001600160a01b036200ed15848c62005ab0565b5116600052811b016020526200ed3660406000205462006dd4838862005ab0565b9190506200ed45818862005ab0565b519161271083101562005a78576200ed85926003906001600160a01b036200ed6e858e62005ab0565b5116600052811b0160205260406000205562005a5a565b6200ec3b565b50936200eda591929693506200852c62007efe9162012c2b565b9260005b83518110156200e87857806200046b6200791c6200edc8938762005ab0565b6200eda9565b926020840151602281101562003d03576005036200ef8c5760408401906200ee0060e062008595818551015162005a6a565b519282518451036200c0f55760005b83518110156200ee68576200ee25818562005ab0565b519061271082101562005a785760036200ee629260018060a01b038a5116600052811b016020526200046b60406000205462007da0838962005ab0565b6200ee0f565b509060005b83518110156200ef0b576200ee83818562005ab0565b5161271081101562005a785760039060018060a01b03895116600052811b016020526200eebb60406000205462007e0d838862005ab0565b91906200eec9828762005ab0565b519061271082101562005a78576200ef059360036200046b9360018060a01b038d5116600052811b016020526040600020556200046462012f56565b6200ee6d565b50949250906200ef1b9062012c2b565b90604051926200ef2b8462003bea565b6001845260203681860137516001600160a01b03166200ef4b8462005a6a565b52604051946200ef5b8662003c06565b60008652600036813760005b83518110156200e87857806200046b6200791c6200ef86938762005ab0565b6200ef67565b926020810151602281101562003d03576006036200f145576040016200efb86101008251015162005a6a565b51936200efcf60e062008595818551015162005a6a565b519285518351036200c6de5785518451036200c6915760005b86518110156200f04e576200effe818562005ab0565b519061271082101562005a78576200f048916003906001600160a01b036200f027848c62005ab0565b5116600052811b016020526200046b60406000205462007da0838962005ab0565b6200efe8565b509060005b86518110156200f0ef576200f069818562005ab0565b5161271081101562005a78576003906001600160a01b036200f08c848b62005ab0565b5116600052811b016020526200f0ad60406000205462007e0d838862005ab0565b91906200f0bb828762005ab0565b519061271082101562005a78576200f0e9936200046b926003906001600160a01b036200eccb878f62005ab0565b6200f053565b5094916200f1049193506200e8309062012c2b565b91604051946200f1148662003c06565b60008652600036813760005b83518110156200e87857806200046b6200791c6200f13f938762005ab0565b6200f120565b90926020820151602281101562003d03576007036200f36c57926200f1736101006040840151015162005a6a565b51936040806200f18a60e082870151015162005a6a565b519401510151916200f1a486518551146200046462012e52565b6000915b86518310156200f357576001600160a01b036200f1c6848962005ab0565b51166000526201388092836020526200f1ec60ff60406000205416156200046462012f23565b6200f1f8818662005ab0565b516200f205828862005ab0565b5190604051956200f2168762003b7f565b600187526000602088019081526040880192835260608801939093526001600160a01b036200f246858d62005ab0565b51166000526020526200f26760406000209262008afe885115158562006070565b5180519095906001600160401b03811162003b9b576200f2908162008b31600186015462004249565b602096601f82116001146200f2f25791816060926200f2ea97989960029560009262008ba75750508160011b916000199060031b1c191617600185015501519101556200046b6001600160a01b0362008b97838b62005ab0565b91906200f1a8565b966001840160005260206000209760005b601f19841681106200f33e5750826200f2ea97989960029593600193606096601f1981161062008c0057505050811b01600185015562008b7a565b818301518a55600190990198602092830192016200f303565b9550939050602092506200e88c915062005a5a565b9192906020810151602281101562003d03576008036200f4055761010060406200f39a920151015162005a6a565b519160005b83518110156200f3f3576200f3ed906001600160a01b03806200f3c3838862005ab0565b51166000526201388090816020526200ca59600160ff604060002054161515146200046462012e82565b6200f39f565b509260209192506200e88c9062005a5a565b6020810151602281101562003d03576009036200f4895761010060406200f430920151015162005a6a565b519160005b83518110156200f3f3576200f483906001600160a01b03806200f459838862005ab0565b51166000526201388090816020526200cb49600160ff604060002054161515146200046462012e82565b6200f435565b906020820151602281101562003d0357600f036200f5d05760a0604083015101519260005b84518110156200f5bd5760e06200f4ce8260a06040880151015162005ab0565b510151156200f54d576200f4ef62008e7f8260a06040880151015162005ab0565b62013882548060001981011162003229576200f51160059160001901620067f1565b5001805461ff001916610100179055620138825490600019820182106200322957600562008ed46200f5479360001901620067f1565b6200f4ae565b6200f56562008f018260a06040880151015162005ab0565b62013882548060001981011162003229576200f58760059160001901620067af565b5001805461ff001916610100179055620138825490600019820182106200322957600562008ed46200f5479360001901620067af565b50936200e88c9193506020925062005a5a565b6020820151602281101562003d0357600c036200f7035760a0604083015101519260005b84518110156200f5bd5760e06200f6148260a06040880151015162005ab0565b510151156200f693576200f63562008e7f8260a06040880151015162005ab0565b62013882548060001981011162003229576200f65760059160001901620067f1565b5001805461ff0019166101001790556201388254906000198201821062003229576005620090026200f68d9360001901620067f1565b6200f5f4565b6200f6ab62008f018260a06040880151015162005ab0565b62013882548060001981011162003229576200f6cd60059160001901620067af565b5001805461ff0019166101001790556201388254906000198201821062003229576005620090026200f68d9360001901620067af565b9291906020810151602281101562003d0357600d036200f82a576040019260606200f73360e08651015162005a6a565b5194510151916200f74885518451146201199f565b60005b85518110156200f81757806200f7666200f7bf928662005ab0565b51156200f7c5576200f77d62009108828962005ab0565b6200f79560ff60056200cec86200912a858c62005ab0565b6200f7ad60ff6005620091436200912a858c62005ab0565b600562008ed46200912a838a62005ab0565b6200f74b565b6200f7d562009184828962005ab0565b6200f7ed60ff60056200cec8620091a6858c62005ab0565b6200f80560ff600562009143620091a6858c62005ab0565b600562008ed4620091a6838a62005ab0565b50935091602091506200e88c9062005a5a565b6020819492940151602281101562003d0357600e036200f8f1576040019060606200f85a60e08451015162005a6a565b5192510151936200f86f83518651146201199f565b60005b83518110156200f81757806200f88d6200f899928862005ab0565b516200f89f5762005a5a565b6200f872565b6200f8af62009258828762005ab0565b6200f8c760ff60056200d0176200912a858a62005ab0565b6200f8df60ff6005620092a06200912a858a62005ab0565b6005620090026200912a838862005ab0565b6020810151602281101562003d03576010036200f95e5760400151906200f92160e060c084015193015162005a6a565b51936200f93683518651146200046462012e52565b60005b83518110156200f81757806200046b620093266200f958938762005ab0565b6200f939565b6020819392930151602281101562003d0357601a036200fa0e5760e060406200f98b920151015162005a6a565b5160038151036200d36d576200f9a18162005a6a565b51916200f9b2620093b28362005a8e565b51916200d331576020926200e88c926001036200941a576200f9dd6200f9ec916201388d5462006c06565b6201388d556200046462012ded565b6200046b6200f9ff6201388e5462006bf3565b6201388e556200046462012e27565b6020819392930151602281101562003d0357601b036200fe4a57506200fa436201388b939293546200354d620094ce62012d29565b50506200fa4f62012ded565b506000805b61271081106200fdfe575b50506200fa6b62006c18565b6200fa7a6202712a5462006777565b906000946000905b6127108210156200fdf1578160031b9460ff600787015416156200fbd5576000966002870154156200fbc457600098975b62005a785760048701548910156200fbaa576200fad4896004890162006ac7565b9054600391821b1c6001600160a01b03166000818152918901602052604091829020549199916200fb07908890620069da565b9a906200fb1362012ded565b6200fb1e9162005a27565b60009a60028b01546200fb3191620069da565b906200fb3c62012ded565b6200fb479162005a27565b82600052620138876020528160002054906200fb639162006c06565b9091600020556200fb7362012ded565b6200fb7e9162005a27565b6200fb8a828962005ab0565b526200fb969062005a5a565b986200fba29062005a5a565b98976200fab3565b929095506200fbbc9196975062005a5a565b90946200fa82565b929095506200fbbc91965062005a5a565b95969392509350505b6200fbe98262006777565b9160009160005b8281106200fd5b575050506201388854916200fc116200811f8484620118f8565b926000906000905b8082106200fd3e57505060005b8381106200fca85750508251929150506001600160401b03821162003b9b576020906200fc538362005bf2565b0162013888600052602060002060005b8381106200fc8a57505050506200e88c60209160006201388d5560006201388e5562005a5a565b82516001600160a01b0316818301556020909201916001016200fc63565b6000805b8381106200fcf6575b50156200fcce575b6200fcc89062005a5a565b6200fc26565b906200fcc8906200fced906001600160a01b03620082a2858762005ab0565b9190506200fcbd565b6001600160a01b03806200fd0b858862005ab0565b5116906200fd1a838a62005ab0565b5116146200fd33576200fd2d9062005a5a565b6200fcac565b50506001386200fcb5565b9091620082b06200fd54916200d78a8562006aaa565b906200fc19565b6000805b8581106200fda9575b50156200fd81575b6200fd7b9062005a5a565b6200fbf0565b926200fd7b906200fda0906001600160a01b03620082a2878662005ab0565b9390506200fd70565b6001600160a01b03806200fdbe858762005ab0565b5116906200fdcd838a62005ab0565b5116146200fde6576200fde09062005a5a565b6200fd5f565b50506001386200fd68565b939495929150506200fbde565b8060039594951b9060ff600783015416156200fe405762009904620075a96200046b94620098f86200fe37956002620098ee8762006959565b9392936200fa54565b509392936200fa5f565b6020810151602281101562003d03576014036200fff857604001906200fe766101008351015162005a6a565b51936200fe8d60e062007755818651015162005a6a565b51916200fe9e865185511462011c60565b6200fead865184511462011cc6565b60005b86518110156200ffa3576200fec6818562005ab0565b516200fed3828762005ab0565b519061271082101562005a785760066200fef39260031b01549062006c06565b906200ff00838862005ab0565b519161271083101562005a785760066200ff1f9360031b015562011d80565b6200ff2b818562005ab0565b516200ff38828762005ab0565b519061271082101562005a78576200ff61916003906001600160a01b036200e7ab868d62005ab0565b91906200ff6f828862005ab0565b519061271082101562005a78576200ff9d936200046b926003906001600160a01b036200e7ff878f62005ab0565b6200feb0565b50949150916200e8306200ffb79162012c2b565b93604051926200ffc78462003c06565b60008452600036813760005b83518110156200e87857806200046b6200791c6200fff2938762005ab0565b6200ffd3565b6020819392930151602281101562003d035760150362009ae4576020916200046b6200e88c9262011e84565b82516001600160a01b0316818301556020909201916001016200a5c4565b82516001600160a01b0316818301556020909201916001016200a46f565b6201007c90620271196000528484600020918201910162005b56565b386200a45e565b600191820180546001600160a01b03909216848601559390910192906200a3a2565b62027124600052620100cd90600080516020620133fc83398151915290810190830162005b56565b386200a362565b60018082620100e582948662010592565b019201920191906200a321565b620271236000526000805160206201337c833981519152908282015b8183018110620101205750506200a2e5565b806201012e60019262005c16565b016201010e565b600191820180546001600160a01b03909216848601559390910192906200a2b3565b620271226000526201017f906000805160206201335c83398151915290810190830162005b56565b386200a273565b82516001600160a01b0316818301556020909201916001016200a135565b620101c0906202711d6000528484600020918201910162005b56565b386200a124565b82516001600160a01b03168183015560209092019160010162009f45565b6201020190620271146000528484600020918201910162005b56565b3862009f34565b806201022a9160031b600160ff60078301541615151462010230575062005a5a565b62009e84565b620102446004820162013897830162010523565b6201389a8101600160ff198254161790558054816201389301556001810154620138948201556002810154620138958201556201028a6005820162013898830162010592565b620138996006820154910155386200941a565b6006602082620102b16001945186620060b3565b0192019201919062009c71565b6006818102048103620032295760068381020483036200322957620271156000527f0f9b10e190177c3c56fc6ce7689c8130c567df57aa02c08e7a090a59992adf926006840281015b82600602820181106201031c57505062009c5d565b8060006006925560006001820155620103386002820162005e12565b600060038201556201034d6004820162005c16565b600060058201550162010307565b60066020826201036f6001945186620060b3565b0192019201919062009be1565b8060060290600682040362003229578260060260068104840362003229576000906202711682526020822092830192015b828110620103bd57505062009bcd565b808260069255826001820155620103d76002820162005e12565b826003820155620103eb6004820162005c16565b82600582015501620103ad565b608460405162461bcd60e51b815260206004820152604060248201526000805160206201341c83398151915260448201527f656d2073686f756c64206e6f742072657475726e20766f7465206e65656465646064820152fd5b60405162461bcd60e51b815260206004820152604760248201526000805160206201341c83398151915260448201527f656d2073686f756c64206e6f742072657475726e206120766f74696e672072756064820152661b19481b1a5cdd60ca1b608482015260a490fd5b8181146201051f578154916001600160401b03831162003b9b57620104e1838362005b96565b60005260206000209060005260206000208154916000925b84841062010508575050505050565b6001809192019384549281850155019290620104f9565b5050565b8181146201051f578154916001600160401b03831162003b9b5762010549838362005b96565b60005260206000209060005260206000208154916000925b84841062010570575050505050565b600191820180546001600160a01b039092168486015593909101929062010561565b908082146201051f57620105a7815462004249565b906001600160401b03821162003b9b578190620105ca8262006663865462004249565b600090601f83116001146201060457600092620105f8575b50508160011b916000199060031b1c1916179055565b015490503880620105e2565b81526020808220858352818320935090601f1985169083905b8282106201065a57505090846001959493921062010640575b505050811b019055565b015460001960f88460031b161c1916905538808062010636565b84958192958501548155600180910196019401906201061d565b8181146201051f578154916201068b838362005ca7565b6000526020600020906000526020600020906000905b838210620106af5750505050565b80620106be6001928562010592565b928101929181019101620106a1565b8181146201051f57815491620106e4838362005d35565b6000526020600020906000526020600020906000905b838210620107085750505050565b806201071760019285620104bb565b928101929181019101620106fa565b8181146201051f578154916201073d838362005d35565b6000526020600020906000526020600020906000905b838210620107615750505050565b80620107706001928562010523565b92810192918101910162010753565b8181146201051f5781549162010796838362005dc3565b6000526020600020906000526020600020906000905b838210620107ba5750505050565b80620107c96001928562010674565b928101929181019101620107ac565b8181146201051f57815491620107ef838362005ed5565b6000526020600020906000526020600020906000905b838210620108135750505050565b80600191840362010830575b600980910193019101909162010805565b8054845581620108728186019183019160ff62010851818554168362005fc9565b8354936201086682600896871c168462005fe3565b5460101c169062006004565b620108846002808401908701620104bb565b6003828101919086018387036201089f575b5050506201081f565b6201090392620108af91620104bb565b620108c1600480850190880162010523565b620108d3600580850190880162010674565b620108e56006808501908801620106cd565b620108f7600780850190880162010726565b8083019086016201077f565b38808062010896565b91906200686a578082036201091f575050565b60ff600580620041d09462010938848654168262005fb0565b60018501546001820155620109546002860160028301620107d8565b6003850154600382015562010970600486016004830162010592565b01920162010982828254168462006070565b6201099482825460081c168462006081565b5460101c169062006099565b908082146201051f57908154906000915b60648310620109c05750505050565b6001809194019283549481840155019192620109b1565b9062013882546020600093019081515190620109f38262003c62565b9162010a03604051938462003c3e565b80835262010a14601f199162003c62565b0136602084013762010a2983515182620069da565b901562010d9a5762010a3b9062006777565b9085928451511562010d915762010a528262006777565b965b85515181101562010bda5760008080805b86811062010af15750905062010a878162010a81858762005ab0565b62004411565b600681101562003d035760031462010aac575b5062010aa69062005a5a565b62010a54565b6000905b80821062010abf575062010a9a565b909562010ae362010aea9162010ad6898d62005ab0565b5162000b13828a62005ab0565b9662005a5a565b9062010ab0565b62010b0a8162010b03878d5162005ab0565b51620111b3565b9390948083118062010bc6575b1562010b7d57505091838562010b73575b600681101562003d035760038e911462010b53575b505062010b4a9062005a5a565b91909162010a65565b9462010b6a9162000b138262010b4a959862005ab0565b93908c62010b3d565b6000955062010b28565b809492959195148062010bb2575b1562010b3d57600681101562003d035760038e911462010b5357505062010b4a9062005a5a565b50600681101562003d035780151562010b8b565b50600686101562003d035785151562010b17565b5093505090929350600093845b835186101562010d2c5762010c0762010c01878662005ab0565b62005fa2565b9060068083101562003d0357600292830362010c3257505062010c2b909562005a5a565b9462010be7565b62010c4262010c01898862005ab0565b928184101562003d035760018094148062010d18575b1562010c6d5750505062010c2b909562005a5a565b62010c8262010c018a899b9694959b62005ab0565b928084101562003d03576004809414928362010cec575b508262010cc1575b505062010cb5575b5062010c2b9062005a5a565b955062010c2b62010ca9565b90915088101562010cd757871415388062010ca1565b602182634e487b7160e01b6000525260246000fd5b908093508a101562010d0357891415913862010c99565b602184634e487b7160e01b6000525260246000fd5b508183101562003d03578083141562010c58565b925092909350600682101562003d03576003820362010d88575b62010d518162006777565b9360005b82811062010d64575050509190565b8062010d7562010d82928462005ab0565b5162000b13828962005ab0565b62010d55565b50600062010d46565b50909392505050565b60405162461bcd60e51b815260206004820152602a60248201527f546865206c656e677468206f6620766f74696e672072756c65206c697374206960448201526973206f766572666c6f7760b01b6064820152608490fd5b906201388354602060009301908151519062010e0e8262003c62565b9162010e1e604051938462003c3e565b80835262010e2f601f199162003c62565b0136602084013762010e4483515182620069da565b901562010d9a5762010e569062006777565b9085928451511562010d915762010e6d8262006777565b965b85515181101562010fdb5760008080805b86811062010ef25750905062010e9c8162010a81858762005ab0565b600681101562003d035760031462010ec1575b5062010ebb9062005a5a565b62010e6f565b6000905b80821062010ed4575062010eaf565b909562010ae362010eeb9162010ad6898d62005ab0565b9062010ec5565b62010f0b8162010f04878d5162005ab0565b516201124f565b9390948083118062010fc7575b1562010f7e57505091838562010f74575b600681101562003d035760038e911462010f54575b505062010f4b9062005a5a565b91909162010e80565b9462010f6b9162000b138262010f4b959862005ab0565b93908c62010f3e565b6000955062010f29565b809492959195148062010fb3575b1562010f3e57600681101562003d035760038e911462010f5457505062010f4b9062005a5a565b50600681101562003d035780151562010f8c565b50600686101562003d035785151562010f18565b5093505090929350600093845b8351861015620110fd576201100262010c01878662005ab0565b9060068083101562003d035760029283036201102d57505062011026909562005a5a565b9462010fe8565b6201103d62010c01898862005ab0565b928184101562003d0357600380941480620110e9575b15620110685750505062011026909562005a5a565b6201107d62010c018a899b9694959b62005ab0565b928084101562003d035760058094149283620110d2575b5082620110bc575b5050620110b0575b50620110269062005a5a565b955062011026620110a4565b90915088101562003d035787141538806201109c565b908093508a101562003d0357891415913862011094565b508183101562003d03578083141562011053565b925092909350600682101562003d0357600382036201114c575b620111228162006777565b9360005b82811062011135575050509190565b8062010d7562011146928462005ab0565b62011126565b50600062011117565b156201115d57565b60405162461bcd60e51b815260206004820152602860248201527f506c7567696e466163746f72793a20706c7567696e20696e646578206f7574206044820152676f662072616e676560c01b6064820152608490fd5b9091600080938193620111cc6201388254831062011155565b60ff6005620111db84620067f1565b50015460081c161562011243578282620111f7926001620113bb565b62011203575b50929190565b8094506001929350620112179150620067f1565b5001549060036201123860ff6201122e86620067f1565b50541694620067f1565b5001549138620111fd565b50509150915080918190565b9091600080938193620112686201388354831062011155565b60ff60056201127784620067af565b50015460081c161562011243578282620112929282620113bb565b6201129d5750929190565b8094506001929350620112b19150620067af565b5001549060036201123860ff620112c886620067af565b50541694620067af565b15620112da57565b60405162461bcd60e51b815260206004820152603160248201527f436865636b696e6720636f6e646974696f6e206578703a20706c7567696e20696044820152706e646578206f7574206f662072616e676560781b6064820152608490fd5b156201134157565b60405162461bcd60e51b815260206004820152602f60248201527f436865636b696e6720636f6e646974696f6e206578703a206e6f646520696e6460448201526e6578206f7574206f662072616e676560881b6064820152608490fd5b805482101562005a78576000526009602060002091020190600090565b9092919080156201172a57620113d762013882548310620112d2565b620113f36002620113e884620067f1565b500154841062011339565b80156201170c576201142360016201141a8560026201141287620067f1565b50016201139e565b50015460ff1690565b6201142e8162003db9565b806201143e575050505050600090565b620114498162003db9565b600381036201145c575050505050600190565b620114678162003db9565b600481036201147a575050505050600090565b620114858162003db9565b6001908082036201149e57505092620069809362011752565b909293620114ac8262003db9565b6002809214620114c2575b505050505050600090565b8215620116ef57620114eb84620114df8385620114128a620067f1565b50015460081c60ff1690565b925b60009586865b6201167d575b50620115058762006777565b9760005b88811062011620575050505050620115218262003cf8565b8183036201158057505091906000915b8183106201153f5750505090565b909192806201155d575b62011555909362005a5a565b919062011531565b50620115556201157862011572858462005ab0565b51151590565b905062011549565b9091506201158e8262003cf8565b8103620115e757509060009182915b818310620115ab5750505090565b9091928015620115ca575b620115c2909362005a5a565b91906201159d565b50620115c2620115df62011572858462005ab0565b9050620115b6565b60039150620115f68162003cf8565b14620116095750388080808080620114b7565b6201161c62011572620069809262005a6a565b1590565b808a6201165c6201165362011649848b620116418c82620114128d620067af565b500162006ac7565b90549060031b1c90565b868689620113bb565b6201167062011677946200046b9362005ab0565b9015159052565b62011509565b846201168f85826201141286620067af565b500154811015620116e957620116b56201164982876201164188826201141289620067af565b620116ce575b620116c7879162005a5a565b90620114f3565b96620116c7620116df889262005a5a565b98915050620116bb565b620114f9565b6201170584620114df8385620114128a620067af565b92620114ed565b6201172460016201141a8560026201141287620067af565b62011423565b6201173b62013883548310620112d2565b6201174c6002620113e884620067af565b620113f3565b9092916003620117a49183600014620118265760ff60016201177b8760026201141286620067f1565b50015460101c16945b841562011815576002620114126201179c93620067f1565b5001620044e5565b91603d81101562003d0357602c8103620117e5575050620117c86020915162005a6a565b51910151602281101562003d0357620117e19062012fee565b1490565b90929060018103620117fa5750505050600090565b6003146201180a57505050600090565b620069809262011896565b6002620114126201179c93620067af565b60ff60016201183c8760026201141286620067af565b50015460101c169462011784565b156201185257565b606460405162461bcd60e51b815260206004820152602060248201527f4f70657261746f722061646472657373206973206e6f742070726f76696465646044820152fd5b9190608062006dcd9201620118b06001825151146201184a565b620118cb6001620118c2835162005a6a565b5151146201184a565b516001600160a01b03928391620118e3919062005a6a565b51169215620118f25751161490565b51161490565b919082018092116200322957565b620119118162003db9565b6201191f6200d14962012f85565b6201192a8162003db9565b60018103620119495750620119426200d17562012f85565b6201388b55565b620119548162003db9565b600281036201196557506201388c55565b620119708162003db9565b600381036201198157506201388d55565b806201198f60049262003db9565b14620119985750565b6201388e55565b15620119a757565b60405162461bcd60e51b815260206004820152604d60248201527f546865206c656e677468206f662074686520706c7567696e20696e646578657360448201527f20617272617920616e642074686520626f6f6c65616e206172726179206d757360648201526c74206265207468652073616d6560981b608482015260a490fd5b1562011a3057565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c696420706c7567696e20696e64657820746f20626520656e61626c604482015261195960f21b6064820152608490fd5b1562011a8857565b60405162461bcd60e51b815260206004820152602b60248201527f54686520706c7567696e20746f20626520656e61626c6564206973206e6f742060448201526a1a5b9a5d1a585b1a5e995960aa1b6064820152608490fd5b1562011ae957565b60405162461bcd60e51b815260206004820152602b60248201527f54686520706c7567696e20746f20626520656e61626c656420697320616c726560448201526a18591e48195b98589b195960aa1b6064820152608490fd5b1562011b4a57565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c696420706c7567696e20696e64657820746f2062652064697361626044820152621b195960ea1b6064820152608490fd5b1562011ba357565b60405162461bcd60e51b815260206004820152602c60248201527f54686520706c7567696e20746f2062652064697361626c6564206973206e6f7460448201526b081a5b9a5d1a585b1a5e995960a21b6064820152608490fd5b1562011c0557565b60405162461bcd60e51b815260206004820152602d60248201527f54686520706c7567696e20746f2062652064697361626c656420697320616c7260448201526c1958591e48191a5cd8589b1959609a1b6064820152608490fd5b1562011c6857565b60405162461bcd60e51b815260206004820152603060248201527f546865206c656e677468206f662074617267657420616e6420746f6b656e436c60448201526f185cdcc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b1562011cce57565b60405162461bcd60e51b815260206004820152602c60248201527f546865206c656e677468206f662074617267657420616e6420616d6f756e742060448201526b1a5cc81b9bdd08195c5d585b60a21b6064820152608490fd5b1562011d3057565b60405162461bcd60e51b815260206004820152602260248201527f54686520746f6b656e20636c617373206973206e6f7420696e697469616c697a604482015261195960f21b6064820152608490fd5b1562011d8857565b60405162461bcd60e51b815260206004820152602960248201527f54686520746f74616c20737570706c79206f662074686520746f6b656e206973604482015268206f766572666c6f7760b81b6064820152608490fd5b1562011de757565b60405162461bcd60e51b8152602060048201526024808201527f5468652062616c616e6365206f662074686520746f6b656e206973206f766572604482015263666c6f7760e01b6064820152608490fd5b1562011e4057565b606460405162461bcd60e51b815260206004820152602060248201527f54686520746f6b656e20697320616c726561647920696e697469616c697a65646044820152fd5b604081019062011e9a6101008351015162005a6a565b519162011ebc60e062011eb1818451015162005a6a565b519251015162005a8e565b519362011ed184518351146200046462012e52565b62011ee484518651146200046462012e52565b60005b845181101562011f415762011efd818462005ab0565b519061271082101562005a785762011f3b9160018060a01b03865116600052600390811b016020526200046b60406000205462007da0838a62005ab0565b62011ee7565b5092919360005b83518110156201206c5762011f5e818462005ab0565b5190612710918281101562005a785760018060a01b03908189511660005260039081602091811b01815262011f9e60406000205462007e0d868962005ab0565b9062011fab868a62005ab0565b51918783101562005a78578462011fd893878f5116600052811b0184526040600020556200046462012f56565b62011fe4848862005ab0565b518581101562005a785782908462011ffd878c62005ab0565b5116600052811b0181526201201d60406000205462006dd4868962005ab0565b9190926201202c868a62005ab0565b519687101562005a785762012066966200046b956201204c888d62005ab0565b5116600052811b0190526040600020556200046462012fbb565b62011f48565b50506200e8306201207d9162012c2b565b90604051936201208d8562003bea565b60018552602036818701376001600160a01b036106e0819052905116620120b48562005a6a565b526000935b8151851015620123d757620120cf858362005ab0565b5194620120dd845162006777565b91600093620120ed825162006777565b6106a0528496855b875181101562012196576201211c6106e05162012113838b62005ab0565b51168b620129f8565b15806201215e575b6201213b575b620121359062005a5a565b620120f5565b956201215562012135916106e0516200977d8a8c62005ab0565b9690506201212a565b506127108a101562005a78576106e0516201217a828a62005ab0565b511660005260038a811b01602052604060002054151562012124565b509793929096949195976000986127108610159560031b9860038a019a5b895181101562012230578762005a78576106e051620121d4828c62005ab0565b51166000528b60205260406000205415620121fb575b620121f59062005a5a565b620121b4565b9762012227620121f5918b620122168c6106e0519262005ab0565b511662000b13826106a05162005ab0565b989050620121ea565b50949591939650985096909596806106805262005a785760040180610640525495620122616200811f8689620118f8565b61066052600097886106c0525b6106805162005a78576106c051888110156201230c576201229d620122b3916000610680526106405162006ac7565b6106e05191549060031b1c166106a05162012aba565b15620122d2575b620122c86106c05162005a5a565b6106c0526201226e565b976201230590620122ea6106c0516106405162006ac7565b6106e05191549060031b1c1662000b13826106605162005ab0565b97620122ba565b5095939096509690969391936000915b838310620123a657505050506106805162005a785761066051516001600160401b03811162003b9b5762012354816106405162005b96565b6020610660510161064051600052602060002060006106e051905b8481106201238f575050505050620123879062005a5a565b9392620120b9565b60019060208386511695019481850155016201236f565b620082b0620123d0916106e051620123bf868662005ab0565b511662000b13826106605162005ab0565b916201231c565b5050509050565b9080620123e9575050565b620041d091600052601f6020600020910160051c81019062005b56565b90600160401b811162003b9b5781548183558082106201242557505050565b620041d092600052601f6020600020918180850160051c840194168062012454575b500160051c019062005b56565b600019908186019182549160200360031b1c1690553862012447565b9060031b60ff811b9283911b169119161790565b62013884805482101562005a78576000526007602060002091020190600090565b600092620124bf620124b8859462012484565b5062004393565b9380935b855151851015620125ad575061271084101562005a785760039380851b9460018060a01b038516600052602090860181526201250c6040966001886000205491015490620069da565b93849115620125785790620125219162006c06565b9690156201253e575050620125369062005a5a565b9390620124c3565b60649250519062461bcd60e51b825260048201526014602482015273746f74616c20706f776572206f766572666c6f7760601b6044820152fd5b875162461bcd60e51b815260048101849052600e60248201526d706f776572206f766572666c6f7760901b6044820152606490fd5b93505092505090565b15620125be57565b60405162461bcd60e51b815260206004820152601360248201527263757272656e74596573206f766572666c6f7760681b6044820152606490fd5b6001620126068262012484565b5001546202712e546000928184526202712b90816020526201262f816003604088200162006ac7565b90549060031b1c918386528060205262012650826004604089200162006ac7565b90549060031b1c93865260205260ff6006620126856201267784600560408b200162006ac7565b90549060031b1c9362012484565b50015416620126d35750620126c39262001767620126b59383620126ad620126bb95620069a4565b9690620125b6565b620118f8565b9290620125b6565b1115620126cd5790565b50600190565b6200d4619250620126c393620126ed620126bb93620069a4565b9490620125b6565b9092919262012705825162006777565b60009162012714815162006777565b8390845b8651811015620127af576001600160a01b036201273b8162012113848b62005ab0565b15806201277a575b6201275b575b50620127559062005a5a565b62012718565b81966201277291620082a262012755948b62005ab0565b959062012749565b506127108a101562005a78578062012793838a62005ab0565b511660005260038a811b01602052604060002054151562012743565b509295919694509260005b87518110156201283e5761271086101562005a78576001600160a01b0380620127e4838b62005ab0565b5116600052600387811b016020526040600020541562012811575b506201280b9062005a5a565b620127ba565b81956201283691620128286201280b948c62005ab0565b511662000b13828862005ab0565b9490620127ff565b509250945092612710831015938462005a785760049586600395861b01968754946201286f6200811f8288620118f8565b9460009689889a5b620129e357818b10156201291857506000998b620128b26201289a838362006ac7565b90546001600160a01b0392918e1b1c82168a62012aba565b15620128d5575b505090620128ca8b94939262005a5a565b9a9091929362012877565b91998c959493929091620128eb908c9062006ac7565b9054908d1b1c16620128fe828b62005ab0565b526201290a9062005a5a565b9890919293508b38620128b9565b9697949a98505091975092506000915b838310620129be5750505050620129a9578051926001600160401b03841162012994575062012958838362005b96565b602080910191600052806000209060005b84811062012978575050505050565b83516001600160a01b0316838201559281019260010162012969565b604190634e487b7160e01b6000525260246000fd5b603283634e487b7160e01b6000525260246000fd5b620129dc90620082b0906001600160a01b036200977d868662005ab0565b9162012928565b603285634e487b7160e01b6000525260246000fd5b9060005b61271083101562005a78576003600484821b01805483101562012a57578262012a259162006ac7565b9054911b1c6001600160a01b039081169083161462012a4f5762012a499062005a5a565b620129fc565b505050600190565b5050505050600090565b9060005b61271083101562005a785760036201389784821b01805483101562012a57578262012a909162006ac7565b9054911b1c6001600160a01b039081169083161462012a4f5762012ab49062005a5a565b62012a65565b9060005b825181101562012af9576001600160a01b038062012add838662005ab0565b51169083161462012a4f5762012af39062005a5a565b62012abe565b505050600090565b801562003229576000190190565b9081519060005b600019838101848111620032295782101562012bdd576001820180831162003229575b84811062012b5457505062012b4e9062005a5a565b62012b16565b6001600160a01b038062012b69858962005ab0565b51168162012b78848a62005ab0565b51161462012b93575b5062012b8d9062005a5a565b62012b39565b8286929601828111620032295762012b8d9262012bd69262012bba62012bcf938b62005ab0565b511662012bc8898b62005ab0565b5262012b01565b9562012b01565b9062012b81565b50509062012beb8162006777565b9060005b81811062012bfe575090925050565b62012c25906001600160a01b0362012c17828862005ab0565b511662000b13828662005ab0565b62012bef565b80519160005b600019848101858111620032295782101562012ce3576001820180831162003229575b85811062012c6f57505062012c699062005a5a565b62012c31565b62012c7b838662005ab0565b5162012c88828762005ab0565b511462012ca1575b62012c9b9062005a5a565b62012c54565b9481810190808211620032295762012cd462012cdb9162012cc762012c9b948962005ab0565b5162012bc88a8a62005ab0565b9662012b01565b905062012c90565b5050909162012cf28162006777565b9060005b81811062012d05575090925050565b8062012d1662012d23928762005ab0565b5162000b13828662005ab0565b62012cf6565b60405162012d378162003b7f565b604481527f496e76616c6964206469766964656e64207065726d797269616420706572207460208201527f72616e73616374696f6e2e2053686f756c64206265206c657373207468616e206040820152630313030360e41b606082015290565b60405162012da58162003c22565b603281527f4e6f20656e6f756768206e756d626572206f66207472616e73616374696f6e7360208201527108199bdc88191a5d9a59195b991cc81e595d60721b604082015290565b60405162012dfb8162003bea565b601c81527b6469766964656e6473206f7065726174696f6e206f766572666c6f7760201b602082015290565b60405162012e358162003bea565b600d81526c2ab735b737bbb71022b93937b960991b602082015290565b60405162012e608162003bea565b6012815271496e76616c696420506172616d657465727360701b602082015290565b60405162012e908162003bea565b601581527413595b58995c88191bd95cc81b9bdd08195e1a5cdd605a1b602082015290565b60405162012ec38162003bea565b601781527613595b58995c881a5cc81b9bdd081cdd5cdc195b991959604a1b602082015290565b60405162012ef88162003bea565b601b81527a13595b58995c881a5cc8185b1c9958591e481cdd5cdc195b991959602a1b602082015290565b60405162012f318162003bea565b60158152744d656d62657220616c72656164792065786973747360581b602082015290565b60405162012f648162003bea565b60118152704e6f20656e6f7567682062616c616e636560781b602082015290565b60405162012f938162003bea565b6018815277125b9d985b1a59081c185c985b595d195c881d1bc81cd95d60421b602082015290565b60405162012fc98162003bea565b6015815274546f6b656e20616d6f756e74206f766572666c6f7760581b602082015290565b602281101562003d03578015620131dc5760018114620126cd5760028114620131d65760038114620131d05760048114620131ca5760058114620131c45760068114620131be5760078114620131b85760088114620131b25760098114620131ac57600a8114620131a657600b8114620131a057600c81146201319a57600d81146201319457600e81146201318e57600f81146201318857601081146201318257601181146201317c57601281146201317657601381146201317057601481146201316a57601581146201316457601881146201315e57601781146201315857601981146201315257601a81146201314c57601b81146201314657601c81146201314057601d81146201313a57601e81146201313457601f81146201312e576020811462013128576021146201312357600090565b602190565b50602090565b50601f90565b50601e90565b50601d90565b50601c90565b50601b90565b50601a90565b50601990565b50601790565b50601690565b50601590565b50601490565b50601390565b50601290565b50601190565b50601090565b50600f90565b50600e90565b50600d90565b50600c90565b50600b90565b50600a90565b50600990565b50600890565b50600790565b50600690565b50600590565b50600490565b50600390565b50600290565b50600090565b90815181101562005a78570160200190565b60405190620132038262003c22565b60288252604036602084013760005b601481106201322057505090565b6013908082039182116200322957600382901b916001600160fd1b03811603620032295760ff8083116200322957600192620132699084901b6001600160a01b03861662006983565b60f081168282160391821162003229576201328d9060f41b600f60f81b16620132f6565b82841b916001600160ff1b03841684036200322957620132ca9160001a620132b68489620131e2565b5360f81b6001600160f81b031916620132f6565b9281018091116200322957620132e9620132f09360001a9186620131e2565b5362005a5a565b62013212565b60f81c600a8110156201331f5760300160ff8111620032295760f81b6001600160f81b03191690565b60570160ff8111620032295760f81b6001600160f81b0319169056fe546865206c656e677468206f662061646472657373657320616e6420746f6b651f4fe3ad533e3985b88710ce05a205152f02825e155777f3bcb8b3bbfcfb03a24ad859a97f543436e70c22b09d31fb4c7b9e987d7a008c98817c9b50a97b1224546865206c656e677468206f6620746f6b656e436c61737320616e6420746f6b546865206c656e677468206f6620746f6b656e496e666f20616e6420746f6b658e71c125ecfe4aeed61c8cf4b09183dd0bf2a3230d826486f04e5f6f0de58e2c18baa939e2e21be0e012ec26e9ec87e9e6faa065bd9f5835250457786300ece8546865206265666f7265206f7065726174696f6e20706c7567696e2073797374546865206c656e677468206f662061646472657373657320616e6420616d6f75a26469706673582212205acddd0e839937cf85abeb6e0ca1497280e5aef0b9680f5ad71a86008aa58f3864736f6c63430008110033",
- "linkReferences": {},
- "deployedLinkReferences": {}
-}
diff --git a/darc-js/dist/darcBinary/darcBinary.d.ts b/darc-js/dist/darcBinary/darcBinary.d.ts
deleted file mode 100644
index 3cb97084..00000000
--- a/darc-js/dist/darcBinary/darcBinary.d.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export declare enum DARC_VERSION {
- Test = 0
-}
-export type DARCBinaryStruct = {
- version: DARC_VERSION;
- bytecode: any;
- abi: any;
-};
-export declare function darcBinary(version: DARC_VERSION): DARCBinaryStruct;
-//# sourceMappingURL=darcBinary.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/darcBinary/darcBinary.d.ts.map b/darc-js/dist/darcBinary/darcBinary.d.ts.map
deleted file mode 100644
index bfa255e1..00000000
--- a/darc-js/dist/darcBinary/darcBinary.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"darcBinary.d.ts","sourceRoot":"","sources":["../../src/darcBinary/darcBinary.ts"],"names":[],"mappings":"AAEA,oBAAY,YAAY;IACtB,IAAI,IAAA;CACL;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,GAAG,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;CACV,CAAA;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CAUlE"}
\ No newline at end of file
diff --git a/darc-js/dist/darcBinary/darcBinary.js b/darc-js/dist/darcBinary/darcBinary.js
deleted file mode 100644
index ed913bb7..00000000
--- a/darc-js/dist/darcBinary/darcBinary.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import * as DARCTest from "./DARC-test.json";
-export var DARC_VERSION;
-(function (DARC_VERSION) {
- DARC_VERSION[DARC_VERSION["Test"] = 0] = "Test";
-})(DARC_VERSION || (DARC_VERSION = {}));
-export function darcBinary(version) {
- if (version === DARC_VERSION.Test) {
- return {
- version: DARC_VERSION.Test,
- bytecode: DARCTest.bytecode,
- abi: DARCTest.abi,
- };
- }
- throw new Error("DARC version not supported yet.");
-}
-//# sourceMappingURL=darcBinary.js.map
\ No newline at end of file
diff --git a/darc-js/dist/darcBinary/darcBinary.js.map b/darc-js/dist/darcBinary/darcBinary.js.map
deleted file mode 100644
index 573fa0ef..00000000
--- a/darc-js/dist/darcBinary/darcBinary.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"darcBinary.js","sourceRoot":"","sources":["../../src/darcBinary/darcBinary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAE7C,MAAM,CAAN,IAAY,YAEX;AAFD,WAAY,YAAY;IACtB,+CAAI,CAAA;AACN,CAAC,EAFW,YAAY,KAAZ,YAAY,QAEvB;AAQD,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,IAAI,OAAO,KAAK,YAAY,CAAC,IAAI,EAAC;QAChC,OAAO;YACL,OAAO,EAAE,YAAY,CAAC,IAAI;YAC1B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG;SAClB,CAAA;KACF;IAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACrD,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/darcjs.d.ts b/darc-js/dist/darcjs.d.ts
deleted file mode 100644
index 8846c192..00000000
--- a/darc-js/dist/darcjs.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { deployDARC } from './deployDARC/deployDARC';
-import { transpiler } from './SDK/transpiler';
-import { DARC, InitParam, TokenInfo, MemberInfo } from './DARC/DARC';
-import { darcBinary, DARCBinaryStruct, DARC_VERSION } from './darcBinary/darcBinary';
-import { ethers } from 'ethers';
-import { run } from './SDK/runtime';
-export { deployDARC, transpiler, DARC, InitParam, TokenInfo, MemberInfo, darcBinary, DARCBinaryStruct, DARC_VERSION, ethers, run };
-//# sourceMappingURL=darcjs.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/darcjs.d.ts.map b/darc-js/dist/darcjs.d.ts.map
deleted file mode 100644
index 3b9e4647..00000000
--- a/darc-js/dist/darcjs.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"darcjs.d.ts","sourceRoot":"","sources":["../src/darcjs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAC;AAElC,OAAO,EACL,UAAU,EACV,UAAU,EACV,IAAI,EACJ,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,MAAM,EACN,GAAG,EACJ,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/darcjs.js b/darc-js/dist/darcjs.js
deleted file mode 100644
index 47617037..00000000
--- a/darc-js/dist/darcjs.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { deployDARC } from './deployDARC/deployDARC';
-import { transpiler } from './SDK/transpiler';
-import { DARC } from './DARC/DARC';
-import { darcBinary, DARC_VERSION } from './darcBinary/darcBinary';
-import { ethers } from 'ethers';
-import { run } from './SDK/runtime';
-export { deployDARC, transpiler, DARC, darcBinary, DARC_VERSION, ethers, run };
-//# sourceMappingURL=darcjs.js.map
\ No newline at end of file
diff --git a/darc-js/dist/darcjs.js.map b/darc-js/dist/darcjs.js.map
deleted file mode 100644
index 6b61d370..00000000
--- a/darc-js/dist/darcjs.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"darcjs.js","sourceRoot":"","sources":["../src/darcjs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAoC,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,UAAU,EAAoB,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAC;AAElC,OAAO,EACL,UAAU,EACV,UAAU,EACV,IAAI,EAIJ,UAAU,EAEV,YAAY,EACZ,MAAM,EACN,GAAG,EACJ,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/index.d.ts b/darc-js/dist/index.d.ts
deleted file mode 100644
index 6e0f163b..00000000
--- a/darc-js/dist/index.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as darcjs from './darcjs';
-export { darcjs };
-//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/index.d.ts.map b/darc-js/dist/index.d.ts.map
deleted file mode 100644
index 0ebad036..00000000
--- a/darc-js/dist/index.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/index.js b/darc-js/dist/index.js
deleted file mode 100644
index 61437046..00000000
--- a/darc-js/dist/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import * as darcjs from './darcjs';
-export { darcjs };
-//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/darc-js/dist/index.js.map b/darc-js/dist/index.js.map
deleted file mode 100644
index 62576bef..00000000
--- a/darc-js/dist/index.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/instructions.d.ts b/darc-js/dist/instructions.d.ts
deleted file mode 100644
index 4698d20f..00000000
--- a/darc-js/dist/instructions.d.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { TokenOperations } from "./SDK/struct/token-operation-map";
-import { Plugin } from "./SDK/struct/Plugin";
-declare function transfer_tokens(targetAddress: string, amount: number, tokenID: number): void;
-declare function mint_tokens(tokenID: number, amount: number, targetAddress: string): void;
-declare function create_token_class(tokenName: string, tokenVotingWeight: number, tokenDividendWeight: number): void;
-declare function withdraw_dividends(): void;
-declare function withdraw_money(amount: number): void;
-declare function withdraw_money_and_send_to_address(amount: number, targetAddress: string): void;
-declare function pay_money(amount: number): void;
-declare function enable_plugin_index(pluginIndex: number): void;
-declare function disable_plugin_index(pluginIndex: number): void;
-declare function add_plugin(currentRestrictionPlugin: Plugin): void;
-declare function add_and_enable_plugin(currentRestrictionPlugin: Plugin): void;
-declare function burn_tokens(tokenID: number, amount: number, targetAddress: string): void;
-declare function batch_transfer_tokens(tokenOperations: TokenOperations): void;
-declare function batch_mint_tokens(tokenOperations: TokenOperations): void;
-declare function batch_burn_tokens(tokenOperations: TokenOperations): void;
-declare function call_emergency(emergency_id: number): void;
-declare function set_parameter(parameter: string, value: string): void;
-declare function add_to_member_list(alias: string, role: string, address: string): void;
-declare function modify_member_list(alias: string, role: string, address: string): void;
-declare function suspend_member_list(address: string): void;
-declare function reactivate_member_list(address: string): void;
-export { transfer_tokens, mint_tokens, create_token_class, withdraw_dividends, withdraw_money, withdraw_money_and_send_to_address, pay_money, enable_plugin_index, disable_plugin_index, add_plugin, add_and_enable_plugin, burn_tokens, batch_transfer_tokens, batch_mint_tokens, batch_burn_tokens, call_emergency, set_parameter, add_to_member_list, modify_member_list, suspend_member_list, reactivate_member_list };
-//# sourceMappingURL=instructions.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/instructions.d.ts.map b/darc-js/dist/instructions.d.ts.map
deleted file mode 100644
index fe77f1e0..00000000
--- a/darc-js/dist/instructions.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,iBAAS,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAC9E;AAED,iBAAS,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAC1E;AAED,iBAAS,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,QAEpG;AAED,iBAAS,kBAAkB,SAE1B;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,QAErC;AAED,iBAAS,kCAAkC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAEhF;AAED,iBAAS,SAAS,CAAC,MAAM,EAAE,MAAM,QAEhC;AAED,iBAAS,mBAAmB,CAAC,WAAW,EAAE,MAAM,QAE/C;AAED,iBAAS,oBAAoB,CAAC,WAAW,EAAE,MAAM,QAEhD;AAED,iBAAS,UAAU,CAAC,wBAAwB,EAAE,MAAM,QAEnD;AAED,iBAAS,qBAAqB,CAAC,wBAAwB,EAAE,MAAM,QAE9D;AAED,iBAAS,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,QAE1E;AAED,iBAAS,qBAAqB,CAAC,eAAe,EAAE,eAAe,QAE9D;AAED,iBAAS,iBAAiB,CAAC,eAAe,EAAE,eAAe,QAE1D;AAED,iBAAS,iBAAiB,CAAC,eAAe,EAAE,eAAe,QAE1D;AAED,iBAAS,cAAc,CAAC,YAAY,EAAE,MAAM,QAE3C;AAED,iBAAS,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAEtD;AAED,iBAAS,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAEvE;AAED,iBAAS,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAEvE;AAED,iBAAS,mBAAmB,CAAC,OAAO,EAAE,MAAM,QAE3C;AAED,iBAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,QAE9C;AAED,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,kCAAkC,EAAE,SAAS,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,UAAU,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAC,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/instructions.js b/darc-js/dist/instructions.js
deleted file mode 100644
index 96899215..00000000
--- a/darc-js/dist/instructions.js
+++ /dev/null
@@ -1,46 +0,0 @@
-// all the included instructions are here, mostly instructions for operations
-// todo: add backend support for current operations
-function transfer_tokens(targetAddress, amount, tokenID) {
-}
-function mint_tokens(tokenID, amount, targetAddress) {
-}
-function create_token_class(tokenName, tokenVotingWeight, tokenDividendWeight) {
-}
-function withdraw_dividends() {
-}
-function withdraw_money(amount) {
-}
-function withdraw_money_and_send_to_address(amount, targetAddress) {
-}
-function pay_money(amount) {
-}
-function enable_plugin_index(pluginIndex) {
-}
-function disable_plugin_index(pluginIndex) {
-}
-function add_plugin(currentRestrictionPlugin) {
-}
-function add_and_enable_plugin(currentRestrictionPlugin) {
-}
-function burn_tokens(tokenID, amount, targetAddress) {
-}
-function batch_transfer_tokens(tokenOperations) {
-}
-function batch_mint_tokens(tokenOperations) {
-}
-function batch_burn_tokens(tokenOperations) {
-}
-function call_emergency(emergency_id) {
-}
-function set_parameter(parameter, value) {
-}
-function add_to_member_list(alias, role, address) {
-}
-function modify_member_list(alias, role, address) {
-}
-function suspend_member_list(address) {
-}
-function reactivate_member_list(address) {
-}
-export { transfer_tokens, mint_tokens, create_token_class, withdraw_dividends, withdraw_money, withdraw_money_and_send_to_address, pay_money, enable_plugin_index, disable_plugin_index, add_plugin, add_and_enable_plugin, burn_tokens, batch_transfer_tokens, batch_mint_tokens, batch_burn_tokens, call_emergency, set_parameter, add_to_member_list, modify_member_list, suspend_member_list, reactivate_member_list };
-//# sourceMappingURL=instructions.js.map
\ No newline at end of file
diff --git a/darc-js/dist/instructions.js.map b/darc-js/dist/instructions.js.map
deleted file mode 100644
index 28d0684a..00000000
--- a/darc-js/dist/instructions.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,mDAAmD;AAKnD,SAAS,eAAe,CAAC,aAAqB,EAAE,MAAc,EAAE,OAAe;AAC/E,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,MAAc,EAAE,aAAqB;AAC3E,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB,EAAE,iBAAyB,EAAE,mBAA2B;AAErG,CAAC;AAED,SAAS,kBAAkB;AAE3B,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;AAEtC,CAAC;AAED,SAAS,kCAAkC,CAAC,MAAc,EAAE,aAAqB;AAEjF,CAAC;AAED,SAAS,SAAS,CAAC,MAAc;AAEjC,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB;AAEhD,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB;AAEjD,CAAC;AAED,SAAS,UAAU,CAAC,wBAAgC;AAEpD,CAAC;AAED,SAAS,qBAAqB,CAAC,wBAAgC;AAE/D,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,MAAc,EAAE,aAAqB;AAE3E,CAAC;AAED,SAAS,qBAAqB,CAAC,eAAgC;AAE/D,CAAC;AAED,SAAS,iBAAiB,CAAC,eAAgC;AAE3D,CAAC;AAED,SAAS,iBAAiB,CAAC,eAAgC;AAE3D,CAAC;AAED,SAAS,cAAc,CAAC,YAAoB;AAE5C,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB,EAAE,KAAa;AAEvD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,IAAY,EAAE,OAAe;AAExE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,IAAY,EAAE,OAAe;AAExE,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;AAE5C,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe;AAE/C,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,kCAAkC,EAAE,SAAS,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,UAAU,EAAE,qBAAqB,EAAE,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAC,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/plugin/ConditionNode.d.ts b/darc-js/dist/plugin/ConditionNode.d.ts
deleted file mode 100644
index 280b3a11..00000000
--- a/darc-js/dist/plugin/ConditionNode.d.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { Expression } from "./Expression";
-declare enum ConditionNodeType {
- ExpressionNode = 0,
- LogicalOperatorNode = 1,
- BooleanValueNode = 2
-}
-declare enum LogicalOperatorType {
- AND = 0,
- OR = 1,
- NOT = 2
-}
-declare class ConditionNode {
- type: ConditionNodeType;
- expression: Expression | null;
- logicalOperator: LogicalOperatorType | null;
- expressionParameters: (number | string | bigint)[] | null;
- booleanValue: boolean | null;
- childList: ConditionNode[];
- constructor(type: ConditionNodeType, expression: Expression | null, logicalOperator: LogicalOperatorType | null, expressionParameters: (number | string | bigint)[] | null, booleanValue?: boolean | null);
- serializeToString(): string;
- isValidLogicalOperatorNode(): void;
- isValidExpressionNode(): void;
- isValidBooleanValueNode(): void;
-}
-export { ConditionNode, Expression, ConditionNodeType, LogicalOperatorType };
-//# sourceMappingURL=ConditionNode.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/plugin/ConditionNode.d.ts.map b/darc-js/dist/plugin/ConditionNode.d.ts.map
deleted file mode 100644
index fb54ebeb..00000000
--- a/darc-js/dist/plugin/ConditionNode.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"ConditionNode.d.ts","sourceRoot":"","sources":["../../src/plugin/ConditionNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,aAAK,iBAAiB;IAAG,cAAc,IAAA;IAAE,mBAAmB,IAAA;IAAE,gBAAgB,IAAA;CAAC;AAC/E,aAAK,mBAAmB;IAAE,GAAG,IAAA;IAAE,EAAE,IAAA;IAAE,GAAG,IAAA;CAAC;AAEvC,cAAM,aAAa;IACf,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5C,oBAAoB,EAAE,CAAC,MAAM,GAAC,MAAM,GAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IACtD,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,aAAa,EAAE,CAAM;gBACpB,IAAI,EAAE,iBAAiB,EAC/B,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,eAAe,EAAE,mBAAmB,GAAG,IAAI,EAC3C,oBAAoB,EAAG,CAAC,MAAM,GAAC,MAAM,GAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EACtD,YAAY,GAAE,OAAO,GAAG,IAAW;IAavC,iBAAiB,IAAI,MAAM;IAsL3B,0BAA0B;IA0B1B,qBAAqB;IAiBrB,uBAAuB;CA6B1B;AAGD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/plugin/ConditionNode.js b/darc-js/dist/plugin/ConditionNode.js
deleted file mode 100644
index c700a0e4..00000000
--- a/darc-js/dist/plugin/ConditionNode.js
+++ /dev/null
@@ -1,258 +0,0 @@
-// The basic abstact syntax tree node of the expression tree
-// representing the condition of a restriction plugin condition
-import { Expression } from "./Expression";
-var ConditionNodeType;
-(function (ConditionNodeType) {
- ConditionNodeType[ConditionNodeType["ExpressionNode"] = 0] = "ExpressionNode";
- ConditionNodeType[ConditionNodeType["LogicalOperatorNode"] = 1] = "LogicalOperatorNode";
- ConditionNodeType[ConditionNodeType["BooleanValueNode"] = 2] = "BooleanValueNode";
-})(ConditionNodeType || (ConditionNodeType = {}));
-var LogicalOperatorType;
-(function (LogicalOperatorType) {
- LogicalOperatorType[LogicalOperatorType["AND"] = 0] = "AND";
- LogicalOperatorType[LogicalOperatorType["OR"] = 1] = "OR";
- LogicalOperatorType[LogicalOperatorType["NOT"] = 2] = "NOT";
-})(LogicalOperatorType || (LogicalOperatorType = {}));
-class ConditionNode {
- constructor(type, expression, logicalOperator, expressionParameters, booleanValue = null) {
- this.childList = [];
- this.type = type;
- this.expression = expression;
- this.logicalOperator = logicalOperator;
- this.expressionParameters = expressionParameters;
- this.childList = [];
- this.booleanValue = booleanValue;
- // validate the node
- this.isValidLogicalOperatorNode();
- this.isValidExpressionNode();
- }
- serializeToString() {
- const childListString = this.childList.length == 0 ? this.childList.map((child) => child.serializeToString()).join(" ") : null;
- let returnString = "";
- if (this.type === ConditionNodeType.ExpressionNode) {
- returnString += `Expression: ${this.expression}(${this.expressionParameters})`;
- }
- else if (this.type === ConditionNodeType.LogicalOperatorNode) {
- returnString += `LogicalOperator: ${this.logicalOperator}`;
- }
- else if (this.type === ConditionNodeType.BooleanValueNode) {
- returnString += `BooleanValue: ${this.booleanValue}`;
- }
- if (childListString) {
- returnString += ` Child List: ${childListString}`;
- }
- return returnString;
- }
- // operator overloading for '&' operator
- [Symbol.for('&')](rightOperand) {
- // if the current node is an expression node
- if (this.type === ConditionNodeType.ExpressionNode) {
- // if the right operand is an expression node, create a new logical operator node of type OR
- if (rightOperand.type == ConditionNodeType.BooleanValueNode || rightOperand.type == ConditionNodeType.ExpressionNode) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- // if the right operand is a logical operator node, add the current node as the left child of the right operand
- else if (rightOperand.type == ConditionNodeType.LogicalOperatorNode) {
- // if the right operand is an AND operator, add the current node as the child to the child list of the right operand
- if (rightOperand.logicalOperator == LogicalOperatorType.AND) {
- rightOperand.childList.push(this);
- return rightOperand;
- }
- else if (rightOperand.logicalOperator == LogicalOperatorType.OR) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- else if (rightOperand.logicalOperator == LogicalOperatorType.NOT) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- // else throw an exception
- else {
- throw new Error("Invalid logical operator type");
- }
- }
- }
- // if the current node is a logical operator node
- else if (this.type === ConditionNodeType.LogicalOperatorNode) {
- // if the right operand is an expression node, add the right operand as the right child of the current node
- if (this.logicalOperator === LogicalOperatorType.AND) {
- this.childList.push(rightOperand);
- return this;
- }
- // if the right operand is a logical operator node, add the right operand as the right child of the current node
- else if (this.logicalOperator === LogicalOperatorType.OR) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- else if (this.logicalOperator === LogicalOperatorType.NOT) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- }
- else if (this.type === ConditionNodeType.BooleanValueNode) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.AND, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- throw new Error("Invalid condition node type");
- }
- // operator overloading for '|' operator
- [Symbol.for('|')](rightOperand) {
- // if the current node is an expression node
- if (this.type === ConditionNodeType.ExpressionNode) {
- // if the right operand is an expression node, create a new logical operator node of type OR
- if (rightOperand.type == ConditionNodeType.BooleanValueNode || rightOperand.type == ConditionNodeType.ExpressionNode) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- // if the right operand is a logical operator node, add the current node as the left child of the right operand
- else if (rightOperand.type == ConditionNodeType.LogicalOperatorNode) {
- // if the right operand is an AND operator, add the current node as the child to the child list of the right operand
- if (rightOperand.logicalOperator == LogicalOperatorType.OR) {
- rightOperand.childList.push(this);
- return rightOperand;
- }
- else if (rightOperand.logicalOperator == LogicalOperatorType.AND) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- else if (rightOperand.logicalOperator == LogicalOperatorType.NOT) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- // else throw an exception
- else {
- throw new Error("Invalid logical operator type");
- }
- }
- }
- // if the current node is a logical operator node
- else if (this.type === ConditionNodeType.LogicalOperatorNode) {
- // if the right operand is an expression node, add the right operand as the right child of the current node
- if (this.logicalOperator === LogicalOperatorType.OR) {
- this.childList.push(rightOperand);
- return this;
- }
- // if the right operand is a logical operator node, add the right operand as the right child of the current node
- else if (this.logicalOperator === LogicalOperatorType.AND) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- else if (this.logicalOperator === LogicalOperatorType.NOT) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- }
- else if (this.type === ConditionNodeType.BooleanValueNode) {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.OR, null);
- logicalOperatorNode.childList.push(this);
- logicalOperatorNode.childList.push(rightOperand);
- return logicalOperatorNode;
- }
- throw new Error("Invalid condition node type");
- }
- // if an operator "!" is used, the expression will return a
- // logical operator node with current node as left child, and
- // a null object as right child, and the operator type is "!"
- [Symbol.for('!')]() {
- let logicalOperatorNode = new ConditionNode(ConditionNodeType.LogicalOperatorNode, null, LogicalOperatorType.NOT, null);
- logicalOperatorNode.childList.push(this);
- return logicalOperatorNode;
- }
- // check if the current node is a valid logical operator node,
- // and throw an exception if it is not
- isValidLogicalOperatorNode() {
- if (this.type === ConditionNodeType.LogicalOperatorNode) {
- // check if the logical operator type is null
- if (this.logicalOperator === null) {
- throw new Error("The logical operator type of the current node is null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- // if operator is AND, OR, make sure that child list has at least 2 elements
- if (this.logicalOperator === LogicalOperatorType.AND || this.logicalOperator === LogicalOperatorType.OR) {
- if (this.childList.length < 2) {
- throw new Error("The list of all child nodes has less than 2 elements, which is illegal.\n\
- Current node:\n " + JSON.stringify(this));
- }
- }
- // if operator is NOT, make sure that the child list has only 1 element
- if (this.logicalOperator === LogicalOperatorType.NOT) {
- if (this.childList.length !== 1) {
- throw new Error("Invalid length of child node for NOT operator.\n\
- Current node:\n " + JSON.stringify(this));
- }
- }
- }
- }
- // check if the current node is a valid expression node,
- // and throw an exception if it is not
- isValidExpressionNode() {
- if (this.type === ConditionNodeType.ExpressionNode) {
- // check if the expression type is null
- if (this.expression === null) {
- throw new Error("The expression type of the current expression node is null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- // make sure that the child list is empty
- if (this.childList.length !== 0) {
- throw new Error("Illegal element in child node list of an expression node.\n\
- Current node:\n " + JSON.stringify(this));
- }
- }
- }
- // check if the current node is a valid boolean value node,
- // and throw an exception if it is not
- isValidBooleanValueNode() {
- if (this.type === ConditionNodeType.BooleanValueNode) {
- // check if the boolean value is null
- if (this.booleanValue === null) {
- throw new Error("The boolean value of the current boolean value node is null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- // make sure that the left and right child are null
- if (this.childList.length !== 0) {
- throw new Error("The child list node of current node is not empty for a boolean value node.\n\
- Current node:\n " + JSON.stringify(this));
- }
- // make sure that the expression type is null
- if (this.expression !== null) {
- throw new Error("The expression type of the current boolean value node is not null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- // make sure that the logical operator type is null
- if (this.logicalOperator !== null) {
- throw new Error("The logical operator type of the current boolean value node is not null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- // make sure that the expression parameters is null
- if (this.expressionParameters !== null) {
- throw new Error("The expression parameters of the current boolean value node is not null. \n\
- Current node:\n " + JSON.stringify(this));
- }
- }
- }
-}
-export { ConditionNode, Expression, ConditionNodeType, LogicalOperatorType };
-//# sourceMappingURL=ConditionNode.js.map
\ No newline at end of file
diff --git a/darc-js/dist/plugin/ConditionNode.js.map b/darc-js/dist/plugin/ConditionNode.js.map
deleted file mode 100644
index 1737406a..00000000
--- a/darc-js/dist/plugin/ConditionNode.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"ConditionNode.js","sourceRoot":"","sources":["../../src/plugin/ConditionNode.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,+DAA+D;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,IAAK,iBAA0E;AAA/E,WAAK,iBAAiB;IAAG,6EAAc,CAAA;IAAE,uFAAmB,CAAA;IAAE,iFAAgB,CAAA;AAAA,CAAC,EAA1E,iBAAiB,KAAjB,iBAAiB,QAAyD;AAC/E,IAAK,mBAAkC;AAAvC,WAAK,mBAAmB;IAAE,2DAAG,CAAA;IAAE,yDAAE,CAAA;IAAE,2DAAG,CAAA;AAAA,CAAC,EAAlC,mBAAmB,KAAnB,mBAAmB,QAAe;AAEvC,MAAM,aAAa;IAOf,YAAY,IAAuB,EAC/B,UAA6B,EAC7B,eAA2C,EAC3C,oBAAsD,EACtD,eAA+B,IAAI;QALvC,cAAS,GAAoB,EAAE,CAAC;QAM5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,oBAAoB;QACpB,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAED,iBAAiB;QACb,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/H,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,cAAc,EAAE;YAChD,YAAY,IAAG,eAAe,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC;SACjF;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,mBAAmB,EAAE;YAC1D,YAAY,IAAG,oBAAoB,IAAI,CAAC,eAAe,EAAE,CAAC;SAC7D;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,gBAAgB,EAAE;YACvD,YAAY,IAAG,iBAAiB,IAAI,CAAC,YAAY,EAAE,CAAC;SACvD;QACD,IAAI,eAAe,EAAE;YACjB,YAAY,IAAG,gBAAgB,eAAe,EAAE,CAAC;SACpD;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,wCAAwC;IACxC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,YAA2B;QAE1C,4CAA4C;QAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,cAAc,EAAE;YAEhD,4FAA4F;YAC5F,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,gBAAgB,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,cAAc,EAAC;gBACjH,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;YAED,+GAA+G;iBAC1G,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,mBAAmB,EAAE;gBAEjE,oHAAoH;gBACpH,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,GAAG,EAAE;oBACzD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClC,OAAO,YAAY,CAAC;iBACvB;qBAEI,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,EAAE,EAAE;oBAC7D,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,OAAO,mBAAmB,CAAC;iBAC9B;qBAEI,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,GAAG,EAAE;oBAC9D,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,OAAO,mBAAmB,CAAC;iBAC9B;gBAED,0BAA0B;qBACrB;oBACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;iBACpD;aACJ;SACJ;QAED,iDAAiD;aAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,mBAAmB,EAAE;YAE1D,2GAA2G;YAC3G,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAClC,OAAO,IAAI,CAAC;aACf;YAED,gHAAgH;iBAC3G,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,EAAE,EAAE;gBACtD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;iBACI,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBACvD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;SACJ;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,gBAAgB,EAAE;YACvD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjD,OAAO,mBAAmB,CAAC;SAC9B;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAEnD,CAAC;IAED,wCAAwC;IACxC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,YAA2B;QAE1C,4CAA4C;QAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,cAAc,EAAE;YAEhD,4FAA4F;YAC5F,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,gBAAgB,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,cAAc,EAAC;gBACjH,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;YAED,+GAA+G;iBAC1G,IAAI,YAAY,CAAC,IAAI,IAAI,iBAAiB,CAAC,mBAAmB,EAAE;gBAEjE,oHAAoH;gBACpH,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,EAAE,EAAE;oBACxD,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClC,OAAO,YAAY,CAAC;iBACvB;qBAEI,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,GAAG,EAAE;oBAC9D,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,OAAO,mBAAmB,CAAC;iBAC9B;qBAEI,IAAI,YAAY,CAAC,eAAe,IAAI,mBAAmB,CAAC,GAAG,EAAE;oBAC9D,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,OAAO,mBAAmB,CAAC;iBAC9B;gBAED,0BAA0B;qBACrB;oBACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;iBACpD;aACJ;SACJ;QAED,iDAAiD;aAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,mBAAmB,EAAE;YAE1D,2GAA2G;YAC3G,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,EAAE,EAAE;gBACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAClC,OAAO,IAAI,CAAC;aACf;YAED,gHAAgH;iBAC3G,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBACvD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;iBACI,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBACvD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,OAAO,mBAAmB,CAAC;aAC9B;SACJ;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,gBAAgB,EAAE;YACvD,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACvH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjD,OAAO,mBAAmB,CAAC;SAC9B;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAED,2DAA2D;IAC3D,6DAA6D;IAC7D,6DAA6D;IAC7D,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,IAAI,mBAAmB,GAAG,IAAI,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxH,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,8DAA8D;IAC9D,sCAAsC;IACtC,0BAA0B;QACtB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,mBAAmB,EAAC;YACpD,6CAA6C;YAC7C,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,4EAA4E;YAC5E,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,EAAE,EAAC;gBACpG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC;qCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC7C;aACJ;YACD,uEAAuE;YACvE,IAAI,IAAI,CAAC,eAAe,KAAK,mBAAmB,CAAC,GAAG,EAAC;gBACjD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAC;oBAC5B,MAAM,IAAI,KAAK,CAAC;qCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC7C;aACJ;SACJ;IACL,CAAC;IAED,wDAAwD;IACxD,sCAAsC;IACtC,qBAAqB;QACjB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,cAAc,EAAC;YAC/C,uCAAuC;YACvC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAC;gBACzB,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,yCAAyC;YACzC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;SACJ;IACL,CAAC;IAED,2DAA2D;IAC3D,sCAAsC;IACtC,uBAAuB;QACnB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,CAAC,gBAAgB,EAAC;YACjD,qCAAqC;YACrC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,mDAAmD;YACnD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,6CAA6C;YAC7C,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAC;gBACzB,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,mDAAmD;YACnD,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;YACD,mDAAmD;YACnD,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAC;gBACnC,MAAM,IAAI,KAAK,CAAC;iCACC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;SACJ;IACL,CAAC;CACJ;AAGD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/plugin/Expression.d.ts b/darc-js/dist/plugin/Expression.d.ts
deleted file mode 100644
index 1fb38c6d..00000000
--- a/darc-js/dist/plugin/Expression.d.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export declare enum Expression {
- Operator_Address_Equals = 1,
- Operator_Alias_Equals = 2,
- Operator_Role_Equals = 3,
- Operator_Address_Not_Equals = 4,
- Operator_Alias_Not_Equals = 5,
- Operator_Role_Not_Equals = 6,
- Operator_Address_In_List = 7,
- Operator_Alias_In_List = 8,
- Operator_Role_In_List = 9,
- Operator_Address_Not_In_List = 10,
- Operator_Alias_Not_In_List = 11,
- Operator_Role_Not_In_List = 12,
- Operation_Equals = 1000,
- Operation_Not_Equals = 1001
-}
-//# sourceMappingURL=Expression.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/plugin/Expression.d.ts.map b/darc-js/dist/plugin/Expression.d.ts.map
deleted file mode 100644
index 07eeea8e..00000000
--- a/darc-js/dist/plugin/Expression.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"Expression.d.ts","sourceRoot":"","sources":["../../src/plugin/Expression.ts"],"names":[],"mappings":"AAEA,oBAAY,UAAU;IAEpB,uBAAuB,IAAI;IAC3B,qBAAqB,IAAI;IACzB,oBAAoB,IAAI;IACxB,2BAA2B,IAAI;IAC/B,yBAAyB,IAAI;IAC7B,wBAAwB,IAAI;IAC5B,wBAAwB,IAAI;IAC5B,sBAAsB,IAAI;IAC1B,qBAAqB,IAAI;IACzB,4BAA4B,KAAK;IACjC,0BAA0B,KAAK;IAC/B,yBAAyB,KAAK;IAG9B,gBAAgB,OAAO;IACvB,oBAAoB,OAAO;CAI5B"}
\ No newline at end of file
diff --git a/darc-js/dist/plugin/Expression.js b/darc-js/dist/plugin/Expression.js
deleted file mode 100644
index 3d3de73b..00000000
--- a/darc-js/dist/plugin/Expression.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// All the expressions that can be used in the by-law script
-export var Expression;
-(function (Expression) {
- // operator identifiers
- Expression[Expression["Operator_Address_Equals"] = 1] = "Operator_Address_Equals";
- Expression[Expression["Operator_Alias_Equals"] = 2] = "Operator_Alias_Equals";
- Expression[Expression["Operator_Role_Equals"] = 3] = "Operator_Role_Equals";
- Expression[Expression["Operator_Address_Not_Equals"] = 4] = "Operator_Address_Not_Equals";
- Expression[Expression["Operator_Alias_Not_Equals"] = 5] = "Operator_Alias_Not_Equals";
- Expression[Expression["Operator_Role_Not_Equals"] = 6] = "Operator_Role_Not_Equals";
- Expression[Expression["Operator_Address_In_List"] = 7] = "Operator_Address_In_List";
- Expression[Expression["Operator_Alias_In_List"] = 8] = "Operator_Alias_In_List";
- Expression[Expression["Operator_Role_In_List"] = 9] = "Operator_Role_In_List";
- Expression[Expression["Operator_Address_Not_In_List"] = 10] = "Operator_Address_Not_In_List";
- Expression[Expression["Operator_Alias_Not_In_List"] = 11] = "Operator_Alias_Not_In_List";
- Expression[Expression["Operator_Role_Not_In_List"] = 12] = "Operator_Role_Not_In_List";
- // operations
- Expression[Expression["Operation_Equals"] = 1000] = "Operation_Equals";
- Expression[Expression["Operation_Not_Equals"] = 1001] = "Operation_Not_Equals";
- // todo: add more operations
-})(Expression || (Expression = {}));
-//# sourceMappingURL=Expression.js.map
\ No newline at end of file
diff --git a/darc-js/dist/plugin/Expression.js.map b/darc-js/dist/plugin/Expression.js.map
deleted file mode 100644
index dabdcf15..00000000
--- a/darc-js/dist/plugin/Expression.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"Expression.js","sourceRoot":"","sources":["../../src/plugin/Expression.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,MAAM,CAAN,IAAY,UAqBX;AArBD,WAAY,UAAU;IACpB,uBAAuB;IACvB,iFAA2B,CAAA;IAC3B,6EAAyB,CAAA;IACzB,2EAAwB,CAAA;IACxB,yFAA+B,CAAA;IAC/B,qFAA6B,CAAA;IAC7B,mFAA4B,CAAA;IAC5B,mFAA4B,CAAA;IAC5B,+EAA0B,CAAA;IAC1B,6EAAyB,CAAA;IACzB,4FAAiC,CAAA;IACjC,wFAA+B,CAAA;IAC/B,sFAA8B,CAAA;IAE9B,aAAa;IACb,sEAAuB,CAAA;IACvB,8EAA2B,CAAA;IAE3B,4BAA4B;AAE9B,CAAC,EArBW,UAAU,KAAV,UAAU,QAqBrB"}
\ No newline at end of file
diff --git a/darc-js/dist/runtime/runtime.d.ts b/darc-js/dist/runtime/runtime.d.ts
deleted file mode 100644
index 35bc618f..00000000
--- a/darc-js/dist/runtime/runtime.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { ethers } from 'ethers';
-import { DARC_VERSION } from '../darcBinary/darcBinary';
-export declare function deployDARC(version: DARC_VERSION, signer: ethers.Wallet): Promise;
-//# sourceMappingURL=runtime.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/runtime/runtime.d.ts.map b/darc-js/dist/runtime/runtime.d.ts.map
deleted file mode 100644
index 70de7c40..00000000
--- a/darc-js/dist/runtime/runtime.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAE9B,OAAO,EAAC,YAAY,EAA+B,MAAM,0BAA0B,CAAC;AAapF,wBAAsB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS9F"}
\ No newline at end of file
diff --git a/darc-js/dist/runtime/runtime.js b/darc-js/dist/runtime/runtime.js
deleted file mode 100644
index 4d8d377c..00000000
--- a/darc-js/dist/runtime/runtime.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-};
-import { ethers } from 'ethers';
-import { darcBinary } from '../darcBinary/darcBinary';
-export function deployDARC(version, signer) {
- return __awaiter(this, void 0, void 0, function* () {
- const darcBinaryStruct = darcBinary(version);
- const bytecode = darcBinaryStruct.bytecode;
- const abi = darcBinaryStruct.abi;
- const contractFactory = new ethers.ContractFactory(abi, bytecode, signer);
- const contract = yield contractFactory.deploy();
- yield contract.initialize();
- const deployed_address = contract.address;
- return deployed_address;
- });
-}
-//# sourceMappingURL=runtime.js.map
\ No newline at end of file
diff --git a/darc-js/dist/runtime/runtime.js.map b/darc-js/dist/runtime/runtime.js.map
deleted file mode 100644
index fea72ee0..00000000
--- a/darc-js/dist/runtime/runtime.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAE9B,OAAO,EAAiC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AAapF,MAAM,UAAgB,UAAU,CAAC,OAAqB,EAAE,MAAqB;;QAC3E,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QAC3C,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC;QACjC,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAA;QAC3B,MAAM,gBAAgB,GAAI,QAAQ,CAAC,OAAO,CAAC;QAC3C,OAAO,gBAAgB,CAAC;IAC1B,CAAC;CAAA"}
\ No newline at end of file
diff --git a/darc-js/dist/struct/restriction-plugin.d.ts b/darc-js/dist/struct/restriction-plugin.d.ts
deleted file mode 100644
index 0a047885..00000000
--- a/darc-js/dist/struct/restriction-plugin.d.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { ConditionNode } from "../plugin/ConditionNode";
-import { VotingParameters } from "./voting-param";
-declare class RestrictionPlugin {
- restrictionPluginDescription: string;
- conditionExpressionTreeRootNode: ConditionNode;
- restrictionPluginReturnType: RestrictionPluginReturnType;
- votingParameters: VotingParameters | null;
- restrictionPluginType: RestrictionPluginType;
- constructor(restrictionPluginDescription: string, conditionExpressionTreeRootNode: ConditionNode, restrictionPluginReturnType: RestrictionPluginReturnType, votingParameters: VotingParameters | null, restrictionPluginType: RestrictionPluginType);
-}
-declare enum RestrictionPluginReturnType {
- NO = 0,
- ABSOLUTELY_YES = 1,
- VOTING_NEEDED = 2
-}
-declare enum RestrictionPluginType {
- BEFORE_OPERATION = 0,
- AFTER_OPERATION = 1
-}
-export { RestrictionPlugin, RestrictionPluginReturnType, RestrictionPluginType };
-//# sourceMappingURL=restriction-plugin.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/struct/restriction-plugin.d.ts.map b/darc-js/dist/struct/restriction-plugin.d.ts.map
deleted file mode 100644
index 73cc813d..00000000
--- a/darc-js/dist/struct/restriction-plugin.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"restriction-plugin.d.ts","sourceRoot":"","sources":["../../src/struct/restriction-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,cAAM,iBAAiB;IACrB,4BAA4B,EAAE,MAAM,CAAC;IACrC,+BAA+B,EAAE,aAAa,CAAC;IAC/C,2BAA2B,EAAE,2BAA2B,CAAC;IACzD,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,qBAAqB,EAAE,qBAAqB,CAAC;gBACjC,4BAA4B,EAAE,MAAM,EAAE,+BAA+B,EAAE,aAAa,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,EAAE,qBAAqB,EAAE,qBAAqB;CAOpP;AAED,aAAK,2BAA2B;IAC9B,EAAE,IAAA;IACF,cAAc,IAAA;IACd,aAAa,IAAA;CACd;AAED,aAAK,qBAAqB;IACxB,gBAAgB,IAAA;IAChB,eAAe,IAAA;CAChB;AAED,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/struct/restriction-plugin.js b/darc-js/dist/struct/restriction-plugin.js
deleted file mode 100644
index f18385b4..00000000
--- a/darc-js/dist/struct/restriction-plugin.js
+++ /dev/null
@@ -1,22 +0,0 @@
-class RestrictionPlugin {
- constructor(restrictionPluginDescription, conditionExpressionTreeRootNode, restrictionPluginReturnType, votingParameters, restrictionPluginType) {
- this.restrictionPluginDescription = restrictionPluginDescription;
- this.conditionExpressionTreeRootNode = conditionExpressionTreeRootNode;
- this.restrictionPluginReturnType = restrictionPluginReturnType;
- this.votingParameters = votingParameters;
- this.restrictionPluginType = restrictionPluginType;
- }
-}
-var RestrictionPluginReturnType;
-(function (RestrictionPluginReturnType) {
- RestrictionPluginReturnType[RestrictionPluginReturnType["NO"] = 0] = "NO";
- RestrictionPluginReturnType[RestrictionPluginReturnType["ABSOLUTELY_YES"] = 1] = "ABSOLUTELY_YES";
- RestrictionPluginReturnType[RestrictionPluginReturnType["VOTING_NEEDED"] = 2] = "VOTING_NEEDED";
-})(RestrictionPluginReturnType || (RestrictionPluginReturnType = {}));
-var RestrictionPluginType;
-(function (RestrictionPluginType) {
- RestrictionPluginType[RestrictionPluginType["BEFORE_OPERATION"] = 0] = "BEFORE_OPERATION";
- RestrictionPluginType[RestrictionPluginType["AFTER_OPERATION"] = 1] = "AFTER_OPERATION";
-})(RestrictionPluginType || (RestrictionPluginType = {}));
-export { RestrictionPlugin, RestrictionPluginReturnType, RestrictionPluginType };
-//# sourceMappingURL=restriction-plugin.js.map
\ No newline at end of file
diff --git a/darc-js/dist/struct/restriction-plugin.js.map b/darc-js/dist/struct/restriction-plugin.js.map
deleted file mode 100644
index 03509abf..00000000
--- a/darc-js/dist/struct/restriction-plugin.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"restriction-plugin.js","sourceRoot":"","sources":["../../src/struct/restriction-plugin.ts"],"names":[],"mappings":"AAGA,MAAM,iBAAiB;IAMrB,YAAY,4BAAoC,EAAE,+BAA8C,EAAE,2BAAwD,EAAE,gBAAyC,EAAE,qBAA4C;QACjP,IAAI,CAAC,4BAA4B,GAAG,4BAA4B,CAAC;QACjE,IAAI,CAAC,+BAA+B,GAAG,+BAA+B,CAAC;QACvE,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QAC/D,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACrD,CAAC;CACF;AAED,IAAK,2BAIJ;AAJD,WAAK,2BAA2B;IAC9B,yEAAE,CAAA;IACF,iGAAc,CAAA;IACd,+FAAa,CAAA;AACf,CAAC,EAJI,2BAA2B,KAA3B,2BAA2B,QAI/B;AAED,IAAK,qBAGJ;AAHD,WAAK,qBAAqB;IACxB,yFAAgB,CAAA;IAChB,uFAAe,CAAA;AACjB,CAAC,EAHI,qBAAqB,KAArB,qBAAqB,QAGzB;AAED,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,CAAC"}
\ No newline at end of file
diff --git a/darc-js/dist/struct/token-operation-map.d.ts b/darc-js/dist/struct/token-operation-map.d.ts
deleted file mode 100644
index 8273bd77..00000000
--- a/darc-js/dist/struct/token-operation-map.d.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export declare class TokenOperations {
- arrayTokenOperations: Array<[number, string, number]>;
- constructor();
- add_token_ownership_tuple(tokenID: number, ownerAddress: string, amount: number): void;
-}
-//# sourceMappingURL=token-operation-map.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/struct/token-operation-map.d.ts.map b/darc-js/dist/struct/token-operation-map.d.ts.map
deleted file mode 100644
index fb94cc29..00000000
--- a/darc-js/dist/struct/token-operation-map.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"token-operation-map.d.ts","sourceRoot":"","sources":["../../src/struct/token-operation-map.ts"],"names":[],"mappings":"AAEA,qBAAa,eAAe;IAEnB,oBAAoB,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;;IAItD,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAGvF"}
\ No newline at end of file
diff --git a/darc-js/dist/struct/token-operation-map.js b/darc-js/dist/struct/token-operation-map.js
deleted file mode 100644
index e85b525a..00000000
--- a/darc-js/dist/struct/token-operation-map.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// TokenOwnershipMap is a map of tokenID to owner address and amount
-export class TokenOperations {
- constructor() {
- this.arrayTokenOperations = new Array();
- }
- add_token_ownership_tuple(tokenID, ownerAddress, amount) {
- this.arrayTokenOperations.push([tokenID, ownerAddress, amount]);
- }
-}
-//# sourceMappingURL=token-operation-map.js.map
\ No newline at end of file
diff --git a/darc-js/dist/struct/token-operation-map.js.map b/darc-js/dist/struct/token-operation-map.js.map
deleted file mode 100644
index 6fac6142..00000000
--- a/darc-js/dist/struct/token-operation-map.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"token-operation-map.js","sourceRoot":"","sources":["../../src/struct/token-operation-map.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,MAAM,OAAO,eAAe;IAG1B;QACI,IAAI,CAAC,oBAAoB,GAAG,IAAI,KAAK,EAA4B,CAAC;IACtE,CAAC;IACM,yBAAyB,CAAC,OAAe,EAAE,YAAoB,EAAE,MAAc;QAClF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE,CAAC;CACF"}
\ No newline at end of file
diff --git a/darc-js/dist/struct/voting-param.d.ts b/darc-js/dist/struct/voting-param.d.ts
deleted file mode 100644
index b12389b4..00000000
--- a/darc-js/dist/struct/voting-param.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export declare class VotingParameters {
- votingPeriodInSeconds: number;
- votingThresholdInPercentage: number;
- votingTokenIDList: Array;
- constructor(votingPeriodInSeconds: number, votingThresholdInPercentage: number, votingTokenIDList: Array);
-}
-//# sourceMappingURL=voting-param.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/struct/voting-param.d.ts.map b/darc-js/dist/struct/voting-param.d.ts.map
deleted file mode 100644
index 769e7296..00000000
--- a/darc-js/dist/struct/voting-param.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"voting-param.d.ts","sourceRoot":"","sources":["../../src/struct/voting-param.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAgB;IAE3B,qBAAqB,EAAE,MAAM,CAAC;IAG9B,2BAA2B,EAAE,MAAM,CAAC;IAIpC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAErB,qBAAqB,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC;CAKjH"}
\ No newline at end of file
diff --git a/darc-js/dist/struct/voting-param.js b/darc-js/dist/struct/voting-param.js
deleted file mode 100644
index 100b186f..00000000
--- a/darc-js/dist/struct/voting-param.js
+++ /dev/null
@@ -1,8 +0,0 @@
-export class VotingParameters {
- constructor(votingPeriodInSeconds, votingThresholdInPercentage, votingTokenIDList) {
- this.votingPeriodInSeconds = votingPeriodInSeconds;
- this.votingThresholdInPercentage = votingThresholdInPercentage;
- this.votingTokenIDList = votingTokenIDList;
- }
-}
-//# sourceMappingURL=voting-param.js.map
\ No newline at end of file
diff --git a/darc-js/dist/struct/voting-param.js.map b/darc-js/dist/struct/voting-param.js.map
deleted file mode 100644
index 6cde96a9..00000000
--- a/darc-js/dist/struct/voting-param.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"voting-param.js","sourceRoot":"","sources":["../../src/struct/voting-param.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAgB;IAW3B,YAAY,qBAA6B,EAAE,2BAAmC,EAAE,iBAAgC;QAC9G,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QAC/D,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;CACF"}
\ No newline at end of file
diff --git a/darc-js/dist/transpiler.d.ts b/darc-js/dist/transpiler.d.ts
deleted file mode 100644
index e87314f0..00000000
--- a/darc-js/dist/transpiler.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export declare function transpiler(sourceCode: string): string;
-//# sourceMappingURL=transpiler.d.ts.map
\ No newline at end of file
diff --git a/darc-js/dist/transpiler.d.ts.map b/darc-js/dist/transpiler.d.ts.map
deleted file mode 100644
index 4145edfc..00000000
--- a/darc-js/dist/transpiler.d.ts.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"transpiler.d.ts","sourceRoot":"","sources":["../src/transpiler.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAuDrD"}
\ No newline at end of file
diff --git a/darc-js/dist/transpiler.js b/darc-js/dist/transpiler.js
deleted file mode 100644
index aa42f315..00000000
--- a/darc-js/dist/transpiler.js
+++ /dev/null
@@ -1,45 +0,0 @@
-export function transpiler(sourceCode) {
- // compile the source code with babel standalone
- const babel = require('@babel/standalone');
- // register the plugin
- babel.registerPlugin('overload', require('@jetblack/operator-overloading')); //jetblack_operator_overload);
- /*
- babel.registerPlugin(
- '@babel/plugin-proposal-class-properties',
- require('@babel/plugin-proposal-class-properties')
- );
- babel.registerPlugin(
- '@babel/plugin-proposal-private-methods',
- require('@babel/plugin-proposal-private-methods')
- );
-
- function lolizer() {
- return {
- visitor: {
- Identifier(path:any) {
- console.log(JSON.stringify( path.node));
- //path.node.name = "LOL";
- },
- },
- };
- }
-
- babel.registerPlugin("lolizer", lolizer);
- */
- // register the preset
- babel.registerPreset('@babel/preset-env', require('@babel/preset-env'));
- // register the typescript preset
- babel.registerPreset('@babel/preset-typescript', require('@babel/preset-typescript'));
- // compile the code
- const result = babel.transform(sourceCode, {
- plugins: ['overload'],
- //['@babel/plugin-proposal-class-properties', { "loose": true }],
- //['@babel/plugin-proposal-private-methods', { loose: true }]
- presets: ['@babel/preset-env', '@babel/preset-typescript'],
- filename: 'source.ts',
- sourceType: 'script'
- });
- console.log(JSON.stringify(babel));
- return result.code;
-}
-//# sourceMappingURL=transpiler.js.map
\ No newline at end of file
diff --git a/darc-js/dist/transpiler.js.map b/darc-js/dist/transpiler.js.map
deleted file mode 100644
index 603d4f74..00000000
--- a/darc-js/dist/transpiler.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"transpiler.js","sourceRoot":"","sources":["../src/transpiler.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,UAAkB;IAE3C,gDAAgD;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE3C,sBAAsB;IAEtB,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,8BAA8B;IAE3G;;;;;;;;;;;;;;;;;;;;;;MAsBE;IAGF,sBAAsB;IACtB,KAAK,CAAC,cAAc,CAAC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAGxE,iCAAiC;IACjC,KAAK,CAAC,cAAc,CAAC,0BAA0B,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEtF,mBAAmB;IACnB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE;QACzC,OAAO,EAAE,CAAC,UAAU,CAAC;QACrB,iEAAiE;QACjE,6DAA6D;QAE7D,OAAO,EAAE,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;QAC1D,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,QAAQ;KACrB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnC,OAAQ,MAAM,CAAC,IAAI,CAAC;AACtB,CAAC"}
\ No newline at end of file
diff --git a/darc-js/package.json b/darc-js/package.json
index 33de740a..b727c65c 100644
--- a/darc-js/package.json
+++ b/darc-js/package.json
@@ -5,9 +5,9 @@
},
"name": "darcjs",
"description": "The official JavaScript client and SDK for Project DARC (Decentralized Autonomous Regulated Company), and the compiler and runtime for By-Law Script.",
- "version": "0.0.9",
- "main": "./dist/index.js",
- "types": "./dist/index.d.ts",
+ "version": "0.0.11",
+ "main": "./dist/darcjs.js",
+ "types": "./dist/darcjs.d.ts",
"repository": {
"type": "git",
"url": "https://github.com/Project-DARC/darc.js.git"
diff --git a/darc-js/src/DARC/DARC.ts b/darc-js/src/DARC/DARC.ts
index cd5a574d..74d1c57b 100644
--- a/darc-js/src/DARC/DARC.ts
+++ b/darc-js/src/DARC/DARC.ts
@@ -10,6 +10,7 @@ export type InitParam = {
provider?: ethers.providers.Provider;
}
+
export type TokenInfo = {
votingWeight: BigInt,
dividendWeight: BigInt,
@@ -24,6 +25,7 @@ export type MemberInfo = {
role: bigint
}
+
/**
* The DARC class is used to interact with the DARC contract.
*/
@@ -61,12 +63,7 @@ export class DARC {
if (this.wallet === undefined){
throw new Error("Wallet is not provided for this DARC instance.");
}
- try{
- await this.darcContract.entrance(program);
- }
- catch(e){
- console.log("Error when running the program: " + e);
- }
+ await this.darcContract.entrance(program);
}
/**
diff --git a/darc-js/src/SDK/Node.ts b/darc-js/src/SDK/Node.ts
new file mode 100644
index 00000000..1abfa8dd
--- /dev/null
+++ b/darc-js/src/SDK/Node.ts
@@ -0,0 +1,357 @@
+import { ConditionNodeStruct, NodeParamStruct } from "../types/basicTypes";
+import { BigNumberish } from "ethers";
+
+/**
+ * The node type: AND, OR, NOT, EXPRESSION, TRUE, FALSE, UNDEFINED
+ */
+type NodeType = "AND" | "OR" | "NOT" | "EXPRESSION" | "TRUE" | "FALSE" | "UNDEFINED";
+
+/**
+ * The core base class for all nodes
+ */
+class Node {
+ type: NodeType;
+ childList: Node[];
+ expressionId: number;
+ nodeParam: NodeParamStruct;
+ constructor() {
+ this.childList = [];
+ this.type = "UNDEFINED";
+ this.expressionId = 0;
+ this.nodeParam = {
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ UINT256_2DARRAY: [],
+ BYTES: [],
+ }
+ }
+
+ /**
+ * Just generate a condition node struct for the expression node
+ * @param id The id of the condition node
+ * @returns The condition node struct
+ */
+ private generateExpressionConditionNodeStruct(id: bigint): ConditionNodeStruct {
+ if (this.type !== "EXPRESSION") {
+ throw new Error("Node type is not EXPRESSION");
+ }
+ const conditionNodeStruct: ConditionNodeStruct = {
+ id: id,
+ nodeType: 1,
+ logicalOperator:0,
+ conditionExpression: this.expressionId,
+ childList: [],
+ param: this.nodeParam,
+ };
+ return conditionNodeStruct;
+ }
+
+ /**
+ * Generate a condition node struct for BOOLEAN_TRUE or BOOLEAN_FALSE
+ * @param id The id of the condition node
+ * @returns The condition node struct
+ */
+ private generateBooleanConditionNodeStruct(id: bigint): ConditionNodeStruct {
+ if (this.type !== "TRUE" && this.type !== "FALSE") {
+ throw new Error("Node type is not TRUE or FALSE");
+ }
+ if (this.type === "TRUE") {
+ const conditionNodeStruct: ConditionNodeStruct = {
+ id: id,
+ nodeType: 3,
+ logicalOperator: 0,
+ conditionExpression: 0,
+ childList: [],
+ param: this.nodeParam,
+ };
+ return conditionNodeStruct;
+ }
+ else {
+ const conditionNodeStruct: ConditionNodeStruct = {
+ id: id,
+ nodeType: 4,
+ logicalOperator: 0,
+ conditionExpression: 0,
+ childList: [],
+ param: this.nodeParam,
+ };
+ return conditionNodeStruct;
+ }
+ }
+
+ /**
+ * Generate a list of condition node structs for the AND node
+ * For example, if the AND node has 2 children, and the ID = 5, then the list will be:
+ * [
+ * AND(5),
+ * EXPRESSION_NODE(6),
+ * EXPRESSION_NODE(7)
+ * ]
+ * @param id The id of the condition node
+ */
+ private generate_AND_or_OR_or_NOT_ConditionNodeStructList(id: bigint): ConditionNodeStruct[] {
+ let returnArray: ConditionNodeStruct[] = [];
+ if (this.type !== "AND" && this.type !== "OR" && this.type !== "NOT") {
+ throw new Error("Node type is not AND or OR node");
+ }
+ let nodeType: number = 1;
+ if (this.type === "OR") {
+ nodeType = 2;
+ }
+ else if (this.type === "NOT") {
+ nodeType = 3;
+ }
+ const node0: ConditionNodeStruct = {
+ id: id,
+ nodeType: 2, // logical operator
+ logicalOperator: nodeType, // AND or OR or NOT
+ conditionExpression: 0,
+ childList: [],
+ param: this.nodeParam,
+ }
+
+ const resultList = [];
+ let pointer = 0;
+ for (let i = 0; i < this.childList.length; i++) {
+ pointer += 1;
+ const currentChildNode = this.childList[i];
+ if (currentChildNode.type === "EXPRESSION") {
+ resultList.push(currentChildNode.generateExpressionConditionNodeStruct(id + BigInt(pointer)));
+ node0.childList.push(id + BigInt(pointer));
+ //returnArray.push(currentChildNode.generateExpressionConditionNodeStruct(id + BigInt(i + 1)));
+ }
+ else if (currentChildNode.type === "TRUE" || currentChildNode.type === "FALSE") {
+ //returnArray.push(currentChildNode.generateBooleanConditionNodeStruct(id + BigInt(i + 1)));
+ resultList.push(currentChildNode.generateBooleanConditionNodeStruct(id + BigInt(pointer)));
+ node0.childList.push(id + BigInt(pointer));
+ }
+ else if (currentChildNode.type === "AND" || currentChildNode.type === "OR" || currentChildNode.type === "NOT") {
+ const result = currentChildNode.generate_AND_or_OR_or_NOT_ConditionNodeStructList(id + BigInt(pointer));
+ node0.childList.push(result[0].id);
+ resultList.push(result);
+ pointer += result.length - 1;
+ }
+ else if (currentChildNode.type === "UNDEFINED") {
+ throw new Error("Undefined node is not allowed");
+ }
+ }
+ returnArray.push(node0);
+ for (let i = 0; i < resultList.length; i++) {
+ returnArray = returnArray.concat(resultList[i]);
+ }
+ return returnArray;
+ }
+
+ /**
+ * Generate a list of condition node structs for any node
+ * This is the root function for generating the condition node struct list
+ * All condition node list should be generated from this function
+ * @param id The id of the condition node
+ */
+ generateConditionNodeList(): ConditionNodeStruct[] {
+ if (this.type === "EXPRESSION") {
+ return [this.generateExpressionConditionNodeStruct(BigInt(0))];
+ }
+ else if (this.type === "TRUE" || this.type === "FALSE") {
+ return [this.generateBooleanConditionNodeStruct(BigInt(0))];
+ }
+ else if (this.type === "UNDEFINED") {
+ return [{
+ id: BigInt(0),
+ nodeType: BigInt(0),
+ logicalOperator: BigInt(0),
+ conditionExpression: BigInt(0),
+ childList: [],
+ param: this.nodeParam,
+ }];
+ }
+ else if (this.type === "AND" || this.type === "OR" || this.type === "NOT") {
+ return this.generate_AND_or_OR_or_NOT_ConditionNodeStructList(BigInt(0));
+ }
+ return [];
+ }
+
+ /**
+ * Operator overloading for AND node
+ * @param other The other node
+ * @returns The AND node
+ */
+ [Symbol.for('&')](other: Node): Node {
+ if (this.type === "UNDEFINED" || other.type === "UNDEFINED") {
+ throw new Error("Undefined node is not allowed");
+ }
+ return new AND(this, other);
+ }
+
+ /**
+ * The operator overloading for OR node
+ * @param other The other node
+ * @returns The OR node
+ */
+ [Symbol.for('|')](other: Node): Node {
+ if (this.type === "UNDEFINED" || other.type === "UNDEFINED") {
+ throw new Error("Undefined node is not allowed");
+ }
+ return new OR(this, other);
+ }
+}
+
+class AND extends Node {
+ constructor(... args:Node[]) {
+ super();
+ if (args.length <= 1) {
+ throw new Error("AND node must have at least 2 children");
+ }
+ this.processChildList(args);
+ this.type = "AND";
+ }
+
+ processChildList(childList: Node[]) {
+ for (let i = 0; i < childList.length; i++) {
+ if (childList[i].type === "UNDEFINED") {
+ continue;
+ }
+ else if (childList[i].type === "AND") {
+ this.processAndNode(childList[i]);
+ } else {
+ this.childList.push(childList[i]);
+ }
+ }
+ }
+
+ processAndNode(node: Node) {
+ for (let i = 0; i < node.childList.length; i++) {
+ if (node.childList[i].type === "UNDEFINED") {
+ continue;
+ }
+ else if (node.childList[i].type === "AND") {
+ this.processChildList(node.childList[i].childList);
+ } else {
+ this.childList.push(node.childList[i]);
+ }
+ }
+ }
+}
+
+class OR extends Node {
+ constructor(... args:Node[]) {
+ super();
+ if (args.length <= 1) {
+ throw new Error("OR node must have at least 2 children");
+ }
+ this.processChildList(args);
+ this.type = "OR";
+ }
+
+ processChildList(childList: Node[]) {
+ for (let i = 0; i < childList.length; i++) {
+ if (childList[i].type === "UNDEFINED") {
+ continue;
+ }
+ else if (childList[i].type === "OR") {
+ this.processOrNode(childList[i]);
+ } else {
+ this.childList.push(childList[i]);
+ }
+ }
+ }
+
+ processOrNode(node: Node) {
+ for (let i = 0; i < node.childList.length; i++) {
+ if (node.childList[i].type === "UNDEFINED") {
+ continue;
+ }
+ else if (node.childList[i].type === "OR") {
+ this.processChildList(node.childList[i].childList);
+ } else {
+ this.childList.push(node.childList[i]);
+ }
+ }
+ }
+}
+
+class NOT extends Node {
+ constructor(node:Node) {
+ super();
+ if (node.type === "UNDEFINED") {
+ throw new Error("NOT node must have a valid child");
+ }
+ this.childList.push(node);
+ this.type = "NOT";
+ }
+}
+
+class EXPRESSION extends Node {
+ constructor(expressionId:number, nodeParam?:NodeParamStruct | undefined) {
+ super();
+ this.expressionId = expressionId;
+ if (nodeParam) {
+ this.nodeParam = nodeParam;
+ }
+ this.type = "EXPRESSION";
+ }
+}
+
+class TRUE extends Node {
+ constructor() {
+ super();
+ this.type = "TRUE";
+ }
+}
+
+class FALSE extends Node {
+ constructor() {
+ super();
+ this.type = "FALSE";
+ }
+}
+
+// below are wrapper functions for all the nodes above
+// so that user can initialize the nodes without using new keyword
+
+function and(... args:Node[]): Node {
+ return new AND(... args);
+}
+
+function or(... args:Node[]): Node {
+ return new OR(... args);
+}
+
+function not(node:Node): Node {
+ return new NOT(node);
+}
+
+function expression(expressionId:number, nodeParam?:NodeParamStruct | undefined): Node {
+ return new EXPRESSION(expressionId, nodeParam);
+}
+
+function boolean_true(): Node {
+ return new TRUE();
+}
+
+function boolean_false(): Node {
+ return new FALSE();
+}
+
+function node(): Node {
+ return new Node();
+}
+
+// export everything
+export {
+ Node,
+ AND,
+ OR,
+ NOT,
+ EXPRESSION,
+ TRUE,
+ FALSE,
+ NodeType,
+ and,
+ or,
+ not,
+ expression,
+ boolean_true,
+ boolean_false,
+ node,
+};
\ No newline at end of file
diff --git a/darc-js/src/SDK/conditionNodes/Condition_BatchOp.ts b/darc-js/src/SDK/conditionNodes/Condition_BatchOp.ts
new file mode 100644
index 00000000..81fc62f5
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_BatchOp.ts
@@ -0,0 +1,757 @@
+import { expression } from '../Node';
+
+/**
+ * Batch operation-related condition nodes
+| 211 | BATCH_OP_SIZE_GREATER_THAN | UINT256_2DARRAY[0][0] batchSize ||
+| 212 | BATCH_OP_SIZE_LESS_THAN | UINT256_2DARRAY[0][0] batchSize ||
+| 213 | BATCH_OP_SIZE_IN_RANGE | UINT256_2DARRAY[0][0] startBatchSize, UINT256_2DARRAY[0][0] endBatchSize ||
+| 214 | BATCH_OP_SIZE_EQUALS | UINT256_2DARRAY[0][0] batchSize ||
+| 215 | BATCH_OP_EACH_TARGET_ADDRESSES_EQUALS | ADDRESS_2DARRAY[0][0] targetAddress ||
+| 216 | BATCH_OP_EACH_TARGET_ADDRESSES_IN_LIST | ADDRESS_2DARRAY[0] targetAddressArray ||
+| 217 | BATCH_OP_EACH_TARGET_ADDRESSES_IN_MEMBER_ROLE | UINT256_2DARRAY[0][0] memberRole ||
+| 218 | BATCH_OP_ANY_TARGET_ADDRESS_EQUALS | ADDRESS_2DARRAY[0][0] targetAddress ||
+| 219 | BATCH_OP_ANY_TARGET_ADDRESS_IN_LIST | ADDRESS_2DARRAY[0] targetAddressArray ||
+| 220 | BATCH_OP_ANY_TARGET_ADDRESS_IN_MEMBER_ROLE | UINT256_2DARRAY[0][0] memberRole ||
+| 221 | BATCH_OP_EACH_TARGET_ADDRESS_TO_ITSELF | ||
+| 222 | BATCH_OP_ANY_TARGET_ADDRESS_TO_ITSELF | ||
+| 223 | BATCH_OP_EACH_SOURCE_ADDRESS_EQUALS | ADDRESS_2DARRAY[0][0] sourceAddress ||
+| 224 | BATCH_OP_EACH_SOURCE_ADDRESS_IN_LIST | ADDRESS_2DARRAY[0] sourceAddressArray ||
+| 225 | BATCH_OP_EACH_SOURCE_ADDRESS_IN_MEMBER_ROLE | UINT256_2DARRAY[0][0] memberRole ||
+| 226 | BATCH_OP_ANY_SOURCE_ADDRESS_EQUAL | ADDRESS_2DARRAY[0][0] sourceAddress ||
+| 227 | BATCH_OP_ANY_SOURCE_ADDRESS_IN_LIST | ADDRESS_2DARRAY[0] sourceAddressArray ||
+| 228 | BATCH_OP_ANY_SOURCE_ADDRESS_IN_MEMBER_ROLE | UINT256_2DARRAY[0][0] memberRole ||
+| 229 | BATCH_OP_EACH_SOURCE_ADDRESS_FROM_ITSELF | ||
+| 230 | BATCH_OP_ANY_SOURCE_ADDRESS_FROM_ITSELF | |
+| 231 | BATCH_OP_EACH_TOKEN_CLASS_EQUALS | UINT256_2DARRAY[0][0] tokenClass ||
+| 232 | BATCH_OP_EACH_TOKEN_CLASS_IN_LIST | UINT256_2DARRAY[0] tokenClassArray ||
+| 233 | BATCH_OP_EACH_TOKEN_CLASS_IN_RANGE | UINT256_2DARRAY[0][0] startTokenClass, UINT256_2DARRAY[0][0] endTokenClass ||
+| 234 | BATCH_OP_EACH_TOKEN_CLASS_GREATER_THAN | UINT256_2DARRAY[0][0] tokenClass ||
+| 235 | BATCH_OP_EACH_TOKEN_CLASS_LESS_THAN | UINT256_2DARRAY[0][0] tokenClass ||
+| 236 | BATCH_OP_TOTAL_TOKEN_AMOUNT_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 237 | BATCH_OP_TOTAL_TOKEN_AMOUNT_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 238 | BATCH_OP_TOTAL_TOKEN_AMOUNT_IN_RANGE | UINT256_2DARRAY[0][0] startAmount, UINT256_2DARRAY[0][0] endAmount ||
+| 239 | BATCH_OP_TOTAL_TOKEN_AMOUNT_EQUALS | UINT256_2DARRAY[0][0] amount ||
+| 240 | BATCH_OP_ANY_TOKEN_AMOUNT_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 241 | BATCH_OP_ANY_TOKEN_AMOUNT_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 242 | BATCH_OP_ANY_TOKEN_AMOUNT_IN_RANGE | UINT256_2DARRAY[0][0] startAmount, UINT256_2DARRAY[0][0] endAmount ||
+| 243 | BATCH_OP_ANY_TOKEN_AMOUNT_EQUALS | UINT256_2DARRAY[0][0] amount ||
+| 244 | BATCH_OP_ANY_TOKEN_CLASS_GREATER_THAN | UINT256_2DARRAY[0][0] tokenClass ||
+| 245 | BATCH_OP_ANY_TOKEN_CLASS_LESS_THAN | UINT256_2DARRAY[0][0] tokenClass ||
+| 246 | BATCH_OP_ANY_TOKEN_CLASS_IN_RANGE | UINT256_2DARRAY[0][0] startTokenClass, UINT256_2DARRAY[0][0] endTokenClass ||
+| 247 | BATCH_OP_ANY_TOKEN_CLASS_EQUALS | UINT256_2DARRAY[0][0] tokenClass ||
+| 248 | BATCH_OP_ANY_TOKEN_CLASS_IN_LIST | UINT256_2DARRAY[0] tokenClassArray ||
+| 249 | BATCH_OP_EACH_SOURCE_ADDRESS_IN_MEMBER_ROLE_LIST | UINT256_2DARRAY[0] memberRoleArray ||
+| 250 | BATCH_OP_ANY_SOURCE_ADDRESS_IN_MEMBER_ROLE_LIST | UINT256_2DARRAY[0] memberRoleArray ||
+| 251 | BATCH_OP_EACH_TARGET_ADDRESS_IN_MEMBER_ROLE_LIST | UINT256_2DARRAY[0] memberRoleArray ||
+| 252 | BATCH_OP_ANY_TARGET_ADDRESS_IN_MEMBER_ROLE_LIST | UINT256_2DARRAY[0] memberRoleArray ||
+| 253 | BATCH_OP_EACH_TARGET_ADDRESS_WITHDRAWABLE_CASH_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 254 | BATCH_OP_EACH_TARGET_ADDRESS_WITHDRAWABLE_CASH_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 255 | BATCH_OP_EACH_TARGET_ADDRESS_WITHDRAWABLE_CASH_IN_RANGE | UINT256_2DARRAY[0][0] startAmount, UINT256_2DARRAY[0][0] endAmount ||
+| 256 | BATCH_OP_EACH_TARGET_ADDRESS_WITHDRAWABLE_CASH_EQUALS | UINT256_2DARRAY[0][0] amount ||
+| 257 | BATCH_OP_ANY_TARGET_ADDRESS_WITHDRAWABLE_CASH_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 258 | BATCH_OP_ANY_TARGET_ADDRESS_WITHDRAWABLE_CASH_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 259 | BATCH_OP_ANY_TARGET_ADDRESS_WITHDRAWABLE_CASH_IN_RANGE | UINT256_2DARRAY[0][0] startAmount, UINT256_2DARRAY[0][0] endAmount ||
+| 260 | BATCH_OP_EACH_TARGET_ADDRESS_TOTAL_VOTING_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 261 | BATCH_OP_EACH_TARGET_ADDRESS_TOTAL_VOTING_WEIGHT_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 262 | BATCH_OP_EACH_TARGET_ADDRESS_TOTAL_VOTING_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] startAmount, UINT256_2DARRAY[0][0] endAmount ||
+| 263 | BATCH_OP_EACH_TARGET_ADDRESS_TOTAL_VOTING_WEIGHT_EQUALS | UINT256_2DARRAY[0][0] amount ||
+| 264 | BATCH_OP_ANY_TARGET_ADDRESS_TOTAL_VOTING_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 265 | BATCH_OP_ANY_TARGET_ADDRESS_TOTAL_VOTING_WEIGHT_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 266 | BATCH_OP_ANY_TARGET_ADDRESS_TOTAL_VOTING_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] startAmount, UINT256_2DARRAY[0][1] endAmount ||
+| 267 | BATCH_OP_EACH_TARGET_ADDRESS_TOTAL_DIVIDEND_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 268 | BATCH_OP_EACH_TARGET_ADDRESS_TOTAL_DIVIDEND_WEIGHT_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 269 | BATCH_OP_EACH_TARGET_ADDRESS_TOTAL_DIVIDEND_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] startAmount, UINT256_2DARRAY[0][1] endAmount ||
+| 270 | BATCH_OP_ANY_TARGET_ADDRESS_TOTAL_DIVIDEND_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 271 | BATCH_OP_ANY_TARGET_ADDRESS_TOTAL_DIVIDEND_WEIGHT_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 272 | BATCH_OP_ANY_TARGET_ADDRESS_TOTAL_DIVIDEND_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] startAmount, UINT256_2DARRAY[0][1] endAmount ||
+| 273 | BATCH_OP_EACH_TARGET_ADDRESS_OWNS_TOKEN_X_GREATER_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] amount ||
+| 274 | BATCH_OP_EACH_TARGET_ADDRESS_OWNS_TOKEN_X_LESS_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] amount ||
+| 275 | BATCH_OP_EACH_TARGET_ADDRESS_OWNS_TOKEN_X_IN_RANGE | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] startAmount, UINT256_2DARRAY[0][2] endAmount ||
+| 276 | BATCH_OP_ANY_TARGET_ADDRESS_OWNS_TOKEN_X_GREATER_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] amount |
+| 277 | BATCH_OP_ANY_TARGET_ADDRESS_OWNS_TOKEN_X_LESS_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] amount |
+| 278 | BATCH_OP_ANY_TARGET_ADDRESS_OWNS_TOKEN_X_IN_RANGE | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] startAmount, UINT256_2DARRAY[0][2] endAmount |
+ */
+
+function batch_op_size_greater_than(batchSize: number) {
+ return expression(211, {
+ UINT256_2DARRAY: [[batchSize]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_size_less_than(batchSize: number) {
+ return expression(212, {
+ UINT256_2DARRAY: [[batchSize]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_size_in_range(startBatchSize: number, endBatchSize: number) {
+ return expression(213, {
+ UINT256_2DARRAY: [[startBatchSize, endBatchSize]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_size_equals(batchSize: number) {
+ return expression(214, {
+ UINT256_2DARRAY: [[batchSize]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_addresses_equals(targetAddress: string) {
+ return expression(215, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [[targetAddress]],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_addresses_in_list(targetAddressArray: string[]) {
+ return expression(216, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [targetAddressArray],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_addresses_in_member_role(memberRole: number) {
+ return expression(217, {
+ UINT256_2DARRAY: [[memberRole]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_equals(targetAddress: string) {
+ return expression(218, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [[targetAddress]],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_in_list(targetAddressArray: string[]) {
+ return expression(219, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [targetAddressArray],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_in_member_role(memberRole: number) {
+ return expression(220, {
+ UINT256_2DARRAY: [[memberRole]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_to_itself() {
+ return expression(221, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_to_itself() {
+ return expression(222, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_source_address_equals(sourceAddress: string) {
+ return expression(223, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [[sourceAddress]],
+ BYTES: []
+ });
+}
+
+function batch_op_each_source_address_in_list(sourceAddressArray: string[]) {
+ return expression(224, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [sourceAddressArray],
+ BYTES: []
+ });
+}
+
+function batch_op_each_source_address_in_member_role(memberRole: number) {
+ return expression(225, {
+ UINT256_2DARRAY: [[memberRole]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_source_address_equal(sourceAddress: string) {
+ return expression(226, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [[sourceAddress]],
+ BYTES: []
+ });
+}
+
+function batch_op_any_source_address_in_list(sourceAddressArray: string[]) {
+ return expression(227, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [sourceAddressArray],
+ BYTES: []
+ });
+}
+
+function batch_op_any_source_address_in_member_role(memberRole: number) {
+ return expression(228, {
+ UINT256_2DARRAY: [[memberRole]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_source_address_from_itself() {
+ return expression(229, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_source_address_from_itself() {
+ return expression(230, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_token_class_equals(tokenClass: number) {
+ return expression(231, {
+ UINT256_2DARRAY: [[tokenClass]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_token_class_in_list(tokenClassArray: number[]) {
+ return expression(232, {
+ UINT256_2DARRAY: [tokenClassArray],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_token_class_in_range(startTokenClass: number, endTokenClass: number) {
+ return expression(233, {
+ UINT256_2DARRAY: [[startTokenClass, endTokenClass]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_token_class_greater_than(tokenClass: number) {
+ return expression(234, {
+ UINT256_2DARRAY: [[tokenClass]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_token_class_less_than(tokenClass: number) {
+ return expression(235, {
+ UINT256_2DARRAY: [[tokenClass]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_total_token_amount_greater_than(amount: number) {
+ return expression(236, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_total_token_amount_less_than(amount: number) {
+ return expression(237, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_total_token_amount_in_range(startAmount: number, endAmount: number) {
+ return expression(238, {
+ UINT256_2DARRAY: [[startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_total_token_amount_equals(amount: number) {
+ return expression(239, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_token_amount_greater_than(amount: number) {
+ return expression(240, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_token_amount_less_than(amount: number) {
+ return expression(241, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_token_amount_in_range(startAmount: number, endAmount: number) {
+ return expression(242, {
+ UINT256_2DARRAY: [[startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_token_amount_equals(amount: number) {
+ return expression(243, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_token_class_greater_than(tokenClass: number) {
+ return expression(244, {
+ UINT256_2DARRAY: [[tokenClass]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_token_class_less_than(tokenClass: number) {
+ return expression(245, {
+ UINT256_2DARRAY: [[tokenClass]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_token_class_in_range(startTokenClass: number, endTokenClass: number) {
+ return expression(246, {
+ UINT256_2DARRAY: [[startTokenClass, endTokenClass]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_token_class_equals(tokenClass: number) {
+ return expression(247, {
+ UINT256_2DARRAY: [[tokenClass]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_token_class_in_list(tokenClassArray: number[]) {
+ return expression(248, {
+ UINT256_2DARRAY: [tokenClassArray],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_source_address_in_member_role_list(memberRoleArray: number[]) {
+ return expression(249, {
+ UINT256_2DARRAY: [memberRoleArray],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_source_address_in_member_role_list(memberRoleArray: number[]) {
+ return expression(250, {
+ UINT256_2DARRAY: [memberRoleArray],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_in_member_role_list(memberRoleArray: number[]) {
+ return expression(251, {
+ UINT256_2DARRAY: [memberRoleArray],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_in_member_role_list(memberRoleArray: number[]) {
+ return expression(252, {
+ UINT256_2DARRAY: [memberRoleArray],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_withdrawable_cash_greater_than(amount: number) {
+ return expression(253, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_withdrawable_cash_less_than(amount: number) {
+ return expression(254, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_withdrawable_cash_in_range(startAmount: number, endAmount: number) {
+ return expression(255, {
+ UINT256_2DARRAY: [[startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_withdrawable_cash_equals(amount: number) {
+ return expression(256, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_withdrawable_cash_greater_than(amount: number) {
+ return expression(257, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_withdrawable_cash_less_than(amount: number) {
+ return expression(258, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_withdrawable_cash_in_range(startAmount: number, endAmount: number) {
+ return expression(259, {
+ UINT256_2DARRAY: [[startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_total_voting_weight_greater_than(amount: number) {
+ return expression(260, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_total_voting_weight_less_than(amount: number) {
+ return expression(261, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_total_voting_weight_in_range(startAmount: number, endAmount: number) {
+ return expression(262, {
+ UINT256_2DARRAY: [[startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_total_voting_weight_equals(amount: number) {
+ return expression(263, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_total_voting_weight_greater_than(amount: number) {
+ return expression(264, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_total_voting_weight_less_than(amount: number) {
+ return expression(265, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_total_voting_weight_in_range(startAmount: number, endAmount: number) {
+ return expression(266, {
+ UINT256_2DARRAY: [[startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_total_dividend_weight_greater_than(amount: number) {
+ return expression(267, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_total_dividend_weight_less_than(amount: number) {
+ return expression(268, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_total_dividend_weight_in_range(startAmount: number, endAmount: number) {
+ return expression(269, {
+ UINT256_2DARRAY: [[startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_total_dividend_weight_greater_than(amount: number) {
+ return expression(270, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_total_dividend_weight_less_than(amount: number) {
+ return expression(271, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_total_dividend_weight_in_range(startAmount: number, endAmount: number) {
+ return expression(272, {
+ UINT256_2DARRAY: [[startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_owns_token_x_greater_than(tokenClass: number, amount: number) {
+ return expression(273, {
+ UINT256_2DARRAY: [[tokenClass, amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_owns_token_x_less_than(tokenClass: number, amount: number) {
+ return expression(274, {
+ UINT256_2DARRAY: [[tokenClass, amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_each_target_address_owns_token_x_in_range(tokenClass: number, startAmount: number, endAmount: number) {
+ return expression(275, {
+ UINT256_2DARRAY: [[tokenClass, startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_owns_token_x_greater_than(tokenClass: number, amount: number) {
+ return expression(276, {
+ UINT256_2DARRAY: [[tokenClass, amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_owns_token_x_less_than(tokenClass: number, amount: number) {
+ return expression(277, {
+ UINT256_2DARRAY: [[tokenClass, amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function batch_op_any_target_address_owns_token_x_in_range(tokenClass: number, startAmount: number, endAmount: number) {
+ return expression(278, {
+ UINT256_2DARRAY: [[tokenClass, startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+export {
+ batch_op_size_greater_than,
+ batch_op_size_less_than,
+ batch_op_size_in_range,
+ batch_op_size_equals,
+ batch_op_each_target_addresses_equals,
+ batch_op_each_target_addresses_in_list,
+ batch_op_each_target_addresses_in_member_role,
+ batch_op_any_target_address_equals,
+ batch_op_any_target_address_in_list,
+ batch_op_any_target_address_in_member_role,
+ batch_op_each_target_address_to_itself,
+ batch_op_any_target_address_to_itself,
+ batch_op_each_source_address_equals,
+ batch_op_each_source_address_in_list,
+ batch_op_each_source_address_in_member_role,
+ batch_op_any_source_address_equal,
+ batch_op_any_source_address_in_list,
+ batch_op_any_source_address_in_member_role,
+ batch_op_each_source_address_from_itself,
+ batch_op_any_source_address_from_itself,
+ batch_op_each_token_class_equals,
+ batch_op_each_token_class_in_list,
+ batch_op_each_token_class_in_range,
+ batch_op_each_token_class_greater_than,
+ batch_op_each_token_class_less_than,
+ batch_op_total_token_amount_greater_than,
+ batch_op_total_token_amount_less_than,
+ batch_op_total_token_amount_in_range,
+ batch_op_total_token_amount_equals,
+ batch_op_any_token_amount_greater_than,
+ batch_op_any_token_amount_less_than,
+ batch_op_any_token_amount_in_range,
+ batch_op_any_token_amount_equals,
+ batch_op_any_token_class_greater_than,
+ batch_op_any_token_class_less_than,
+ batch_op_any_token_class_in_range,
+ batch_op_any_token_class_equals,
+ batch_op_any_token_class_in_list,
+ batch_op_each_source_address_in_member_role_list,
+ batch_op_any_source_address_in_member_role_list,
+ batch_op_each_target_address_in_member_role_list,
+ batch_op_any_target_address_in_member_role_list,
+ batch_op_each_target_address_withdrawable_cash_greater_than,
+ batch_op_each_target_address_withdrawable_cash_less_than,
+ batch_op_each_target_address_withdrawable_cash_in_range,
+ batch_op_each_target_address_withdrawable_cash_equals,
+ batch_op_any_target_address_withdrawable_cash_greater_than,
+ batch_op_any_target_address_withdrawable_cash_less_than,
+ batch_op_any_target_address_withdrawable_cash_in_range,
+ batch_op_each_target_address_total_voting_weight_greater_than,
+ batch_op_each_target_address_total_voting_weight_less_than,
+ batch_op_each_target_address_total_voting_weight_in_range,
+ batch_op_each_target_address_total_voting_weight_equals,
+ batch_op_any_target_address_total_voting_weight_greater_than,
+ batch_op_any_target_address_total_voting_weight_less_than,
+ batch_op_any_target_address_total_voting_weight_in_range,
+ batch_op_each_target_address_total_dividend_weight_greater_than,
+ batch_op_each_target_address_total_dividend_weight_less_than,
+ batch_op_each_target_address_total_dividend_weight_in_range,
+ batch_op_any_target_address_total_dividend_weight_greater_than,
+ batch_op_any_target_address_total_dividend_weight_less_than,
+ batch_op_any_target_address_total_dividend_weight_in_range,
+ batch_op_each_target_address_owns_token_x_greater_than,
+ batch_op_each_target_address_owns_token_x_less_than,
+ batch_op_each_target_address_owns_token_x_in_range,
+ batch_op_any_target_address_owns_token_x_greater_than,
+ batch_op_any_target_address_owns_token_x_less_than,
+ batch_op_any_target_address_owns_token_x_in_range
+};
+
diff --git a/darc-js/src/SDK/conditionNodes/Condition_CreateTokenClass.ts b/darc-js/src/SDK/conditionNodes/Condition_CreateTokenClass.ts
new file mode 100644
index 00000000..4025448f
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_CreateTokenClass.ts
@@ -0,0 +1,96 @@
+import {expression} from "../Node";
+
+/**
+ * CreateTokenClass-related condition nodes
+| 501 | CREATE_TOKEN_CLASSES_ANY_TOKEN_DIVIDEND_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0][0] weight | For "BATCH_CREATE_TOKEN_CLASSES" operation.
+| 502 | CREATE_TOKEN_CLASSES_ANY_TOKEN_DIVIDEND_WEIGHT_LESS_THAN | UINT256_2DARRAY[0][0] weight | For "BATCH_CREATE_TOKEN_CLASSES" operation.
+| 503 | CREATE_TOKEN_CLASSES_ANY_TOKEN_DIVIDEND_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0]startWeight, UINT256_2DARRAY[0][1] endWeight | For "BATCH_CREATE_TOKEN_CLASSES" operation.
+| 504 | CREATE_TOKEN_CLASSES_ANY_TOKEN_DIVIDEND_WEIGHT_EQUALS | UINT256_2DARRAY[0][0] weight | For "BATCH_CREATE_TOKEN_CLASSES" operation.
+| 505 | CREATE_TOKEN_CLASSES_ANY_VOTING_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0][0] weight | For "BATCH_CREATE_TOKEN_CLASSES" operation.
+| 506 | CREATE_TOKEN_CLASSES_ANY_VOTING_WEIGHT_LESS_THAN | UINT256_2DARRAY[0][0] weight | For "BATCH_CREATE_TOKEN_CLASSES" operation.
+| 507 | CREATE_TOKEN_CLASSES_ANY_VOTING_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] startWeight, UINT256_2DARRAY[0][1] endWeight | For "BATCH_CREATE_TOKEN_CLASSES" operation.
+| 508 | CREATE_TOKEN_CLASSES_ANY_VOTING_WEIGHT_EQUALS | UINT256_2DARRAY[0][0] weight | For "BATCH_CREATE_TOKEN_CLASSES" operation.
+ */
+
+function create_token_classes_any_token_dividend_weight_greater_than(weight: bigint) {
+ return expression(501, {
+ UINT256_2DARRAY: [[weight]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function create_token_classes_any_token_dividend_weight_less_than(weight: bigint) {
+ return expression(502, {
+ UINT256_2DARRAY: [[weight]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function create_token_classes_any_token_dividend_weight_in_range(startWeight: bigint, endWeight: bigint) {
+ return expression(503, {
+ UINT256_2DARRAY: [[startWeight, endWeight]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function create_token_classes_any_token_dividend_weight_equals(weight: bigint) {
+ return expression(504, {
+ UINT256_2DARRAY: [[weight]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function create_token_classes_any_voting_weight_greater_than(weight: bigint) {
+ return expression(505, {
+ UINT256_2DARRAY: [[weight]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function create_token_classes_any_voting_weight_less_than(weight: bigint) {
+ return expression(506, {
+ UINT256_2DARRAY: [[weight]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function create_token_classes_any_voting_weight_in_range(startWeight: bigint, endWeight: bigint) {
+ return expression(507, {
+ UINT256_2DARRAY: [[startWeight, endWeight]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function create_token_classes_any_voting_weight_equals(weight: bigint) {
+ return expression(508, {
+ UINT256_2DARRAY: [[weight]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+export {
+ create_token_classes_any_token_dividend_weight_greater_than,
+ create_token_classes_any_token_dividend_weight_less_than,
+ create_token_classes_any_token_dividend_weight_in_range,
+ create_token_classes_any_token_dividend_weight_equals,
+ create_token_classes_any_voting_weight_greater_than,
+ create_token_classes_any_voting_weight_less_than,
+ create_token_classes_any_voting_weight_in_range,
+ create_token_classes_any_voting_weight_equals
+};
\ No newline at end of file
diff --git a/darc-js/src/SDK/conditionNodes/Condition_MachineState.ts b/darc-js/src/SDK/conditionNodes/Condition_MachineState.ts
new file mode 100644
index 00000000..14180e51
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_MachineState.ts
@@ -0,0 +1,555 @@
+import {
+ expression
+ } from '../Node';
+
+/**
+ * Machine-state-related related expressions
+| 51 | TIMESTAMP_GREATER_THAN | UINT256_2DARRAY[0][0] timestamp | The current timestamp is greater than timestamp|
+| 52 | TIMESTAMP_LESS_THAN | UINT256_2DARRAY[0][0] timestamp | The current timestamp is less than timestamp|
+| 53 | TIMESTAMP_IN_RANGE | UINT256_2DARRAY[0][0] startTimestamp, UINT256_2DARRAY[0][0] endTimestamp | The current timestamp is in the range of [startTimestamp, endTimestamp]|
+| 54 | DATE_YEAR_GREATER_THAN | UINT256_2DARRAY[0][0] year | The current year is greater than year|
+| 55 | DATE_YEAR_LESS_THAN | UINT256_2DARRAY[0][0] year | The current year is less than year|
+| 56 | DATE_YEAR_IN_RANGE | UINT256_2DARRAY[0][0] startYear, UINT256_2DARRAY[0][0] endYear | The current year is in the range of [startYear, endYear]|
+| 57 | DATE_MONTH_GREATER_THAN | UINT256_2DARRAY[0][0] month | The current month is greater than month|
+| 58 | DATE_MONTH_LESS_THAN | UINT256_2DARRAY[0][0] month | The current month is less than month|
+| 59 | DATE_MONTH_IN_RANGE | UINT256_2DARRAY[0][0] startMonth, UINT256_2DARRAY[0][0] endMonth | The current month is in the range of [startMonth, endMonth]|
+| 60 | DATE_DAY_GREATER_THAN | UINT256[0][0] day | The current day is greater than day|
+| 61 | DATE_DAY_LESS_THAN | UINT256[0][0] day | The current day is less than day|
+| 62 | DATE_DAY_IN_RANGE | UINT256[0][0] startDay, UINT256[0][0] endDay | The current day is in the range of [startDay, endDay]|
+| 63 | DATE_HOUR_GREATER_THAN | uint256 hour | The current hour is greater than hour|
+| 64 | DATE_HOUR_LESS_THAN | uint256 hour | The current hour is less than hour|
+| 65 | DATE_HOUR_IN_RANGE | uint256 startHour, uint256 endHour | The current hour is in the range of [startHour, endHour]|
+| 66 | ADDRESS_VOTING_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address | The address has more than amount of voting weight|
+| 67 | ADDRESS_VOTING_WEIGHT_LESS_THAN | UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address | The address has less than amount of voting weight|
+| 68 | ADDRESS_VOTING_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address | The address has voting weight in the range of [startingAmount, endingAmount]|
+| 69 | ADDRESS_DIVIDEND_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address | The address has more than amount of dividend weight|
+| 70 | ADDRESS_DIVIDEND_WEIGHT_LESS_THAN| UINT256_2DARRAY[0][0] amount, ADDRESS_2DARRAY[0][0] address | The address has less than amount of dividend weight|
+| 71 | ADDRESS_DIVIDEND_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] amount , ADDRESS_2DARRAY[0][0] address ||
+| 72 | ADDRESS_TOKEN_X_GREATER_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] amount, ADDRESS_2DARRAY[0][0] address ||
+| 73 | ADDRESS_TOKEN_X_LESS_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] amount, ADDRESS_2DARRAY[0][0] address ||
+| 74 | ADDRESS_TOKEN_X_IN_RANGE | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] amount, ADDRESS_2DARRAY[0][0] address ||
+| 75 | TOTAL_VOTING_WEIGHT_GREATER_THAN| UINT256_2DARRAY[0][0] amount ||
+| 76 | TOTAL_VOTING_WEIGHT_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 77 | TOTAL_VOTING_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] amount ||
+| 78 | TOTAL_DIVIDEND_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 79 | TOTAL_DIVIDEND_WEIGHT_LESS_THAN| UINT256_2DARRAY[0][0] amount ||
+| 80 | TOTAL_DIVIDEND_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] amount ||
+| 81 | TOTAL_CASH_GREATER_THAN | UINT256_2DARRAY[0][0] amount || NOT READY, DO NOT USE
+| 82 | TOTAL_CASH_LESS_THAN | UINT256_2DARRAY[0][0] amount || NOT READY, DO NOT USE
+| 83 | TOTAL_CASH_IN_RANGE| UINT256_2DARRAY[0][0] amount || NOT READY, DO NOT USE
+| 84 | TOTAL_CASH_EQUALS| UINT256_2DARRAY[0][0] amount || NOT READY, DO NOT USE
+| 85 | TOKEN_IN_LIST_VOTING_WEIGHT_GREATER_THAN| UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
+| 86 | TOKEN_IN_LIST_VOTING_WEIGHT_LESS_THAN | UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
+| 87 | TOKEN_IN_LIST_VOTING_WEIGHT_IN_RANGE | UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] startAmount, UINT256_2DARRAY[1][1] endAmount ||
+| 88 | TOKEN_IN_LIST_DIVIDEND_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
+| 89 | TOKEN_IN_LIST_DIVIDEND_WEIGHT_LESS_THAN| UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
+| 90 | TOKEN_IN_LIST_DIVIDEND_WEIGHT_IN_RANGE | UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
+| 91 | TOKEN_IN_LIST_AMOUNT_GREATER_THAN | UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
+| 92 | TOKEN_IN_LIST_AMOUNT_LESS_THAN | UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
+| 93 | TOKEN_IN_LIST_AMOUNT_IN_RANGE | UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
+| 94 | TOKEN_IN_LIST_AMOUNT_EQUALS| UINT256_2DARRAY[0] tokenClassList, UINT256_2DARRAY[1][0] amount ||
+ * */
+
+function timestamp_greater_than(timestamp: number) {
+ return expression(51, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[timestamp]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function timestamp_less_than(timestamp: number) {
+ return expression(52, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[timestamp]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function timestamp_in_range(startTimestamp: number, endTimestamp: number) {
+ return expression(53, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[startTimestamp, endTimestamp]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_year_greater_than(year: number) {
+ return expression(54, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[year]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_year_less_than(year: number) {
+ return expression(55, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[year]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_year_in_range(startYear: number, endYear: number) {
+ return expression(56, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[startYear, endYear]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_month_greater_than(month: number) {
+ return expression(57, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[month]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_month_less_than(month: number) {
+ return expression(58, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[month]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_month_in_range(startMonth: number, endMonth: number) {
+ return expression(59, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[startMonth, endMonth]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_day_greater_than(day: number) {
+ return expression(60, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[day]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_day_less_than(day: number) {
+ return expression(61, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[day]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_day_in_range(startDay: number, endDay: number) {
+ return expression(62, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[startDay, endDay]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_hour_greater_than(hour: number) {
+ return expression(63, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[hour]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_hour_less_than(hour: number) {
+ return expression(64, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[hour]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function date_hour_in_range(startHour: number, endHour: number) {
+ return expression(65, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[startHour, endHour]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function address_voting_weight_greater_than(amount: number, address: string) {
+ return expression(66, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_voting_weight_less_than(amount: number, address: string) {
+ return expression(67, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_voting_weight_in_range(amount: number, address: string) {
+ return expression(68, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_dividend_weight_greater_than(amount: number, address: string) {
+ return expression(69, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_dividend_weight_less_than(amount: number, address: string) {
+ return expression(70, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_dividend_weight_in_range(amount: number, address: string) {
+ return expression(71, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_token_x_greater_than(tokenClass: number, amount: number, address: string) {
+ return expression(72, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_token_x_less_than(tokenClass: number, amount: number, address: string) {
+ return expression(73, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_token_x_in_range(tokenClass: number, amount: number, address: string) {
+ return expression(74, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function total_voting_weight_greater_than(amount: number) {
+ return expression(75, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function total_voting_weight_less_than(amount: number) {
+ return expression(76, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function total_voting_weight_in_range(amount: number) {
+ return expression(77, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function total_dividend_weight_greater_than(amount: number) {
+ return expression(78, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function total_dividend_weight_less_than(amount: number) {
+ return expression(79, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function total_dividend_weight_in_range(amount: number) {
+ return expression(80, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function total_cash_greater_than(amount: number) {
+ return expression(81, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function total_cash_less_than(amount: number) {
+ return expression(82, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function total_cash_in_range(amount: number) {
+ return expression(83, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function total_cash_equals(amount: number) {
+ return expression(84, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_in_list_voting_weight_greater_than(tokenClassList: number[], amount: number) {
+ return expression(85, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [tokenClassList, [amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_in_list_voting_weight_less_than(tokenClassList: number[], amount: number) {
+ return expression(86, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [tokenClassList, [amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_in_list_voting_weight_in_range(tokenClassList: number[], startAmount: number, endAmount: number) {
+ return expression(87, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [tokenClassList, [startAmount, endAmount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_in_list_dividend_weight_greater_than(tokenClassList: number[], amount: number) {
+ return expression(88, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [tokenClassList, [amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_in_list_dividend_weight_less_than(tokenClassList: number[], amount: number) {
+ return expression(89, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [tokenClassList, [amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_in_list_dividend_weight_in_range(tokenClassList: number[], amount: number) {
+ return expression(90, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [tokenClassList, [amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_in_list_amount_greater_than(tokenClassList: number[], amount: number) {
+ return expression(91, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [tokenClassList, [amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_in_list_amount_less_than(tokenClassList: number[], amount: number) {
+ return expression(92, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [tokenClassList, [amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_in_list_amount_in_range(tokenClassList: number[], amount: number) {
+ return expression(93, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [tokenClassList, [amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_in_list_amount_equals(tokenClassList: number[], amount: number) {
+ return expression(94, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [tokenClassList, [amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function address_voting_weight_percenrage_greater_than(amount: number, address: string) {
+ return expression(95, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_voting_weight_percenrage_less_than(amount: number, address: string) {
+ return expression(96, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_voting_weight_percenrage_in_range(amount: number, address: string) {
+ return expression(97, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_dividend_weight_percenrage_greater_than(amount: number, address: string) {
+ return expression(98, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_dividend_weight_percenrage_less_than(amount: number, address: string) {
+ return expression(99, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+function address_dividend_weight_percenrage_in_range(amount: number, address: string) {
+ return expression(100, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [[address]],
+ BYTES: []
+ });
+}
+
+
+export {
+ timestamp_greater_than,
+ timestamp_less_than,
+ timestamp_in_range,
+ date_year_greater_than,
+ date_year_less_than,
+ date_year_in_range,
+ date_month_greater_than,
+ date_month_less_than,
+ date_month_in_range,
+ date_day_greater_than,
+ date_day_less_than,
+ date_day_in_range,
+ date_hour_greater_than,
+ date_hour_less_than,
+ date_hour_in_range,
+ address_voting_weight_greater_than,
+ address_voting_weight_less_than,
+ address_voting_weight_in_range,
+ address_dividend_weight_greater_than,
+ address_dividend_weight_less_than,
+ address_dividend_weight_in_range,
+ address_token_x_greater_than,
+ address_token_x_less_than,
+ address_token_x_in_range,
+ total_voting_weight_greater_than,
+ total_voting_weight_less_than,
+ total_voting_weight_in_range,
+ total_dividend_weight_greater_than,
+ total_dividend_weight_less_than,
+ total_dividend_weight_in_range,
+ total_cash_greater_than,
+ total_cash_less_than,
+ total_cash_in_range,
+ total_cash_equals,
+ token_in_list_voting_weight_greater_than,
+ token_in_list_voting_weight_less_than,
+ token_in_list_voting_weight_in_range,
+ token_in_list_dividend_weight_greater_than,
+ token_in_list_dividend_weight_less_than,
+ token_in_list_dividend_weight_in_range,
+ token_in_list_amount_greater_than,
+ token_in_list_amount_less_than,
+ token_in_list_amount_in_range,
+ token_in_list_amount_equals,
+ address_voting_weight_percenrage_greater_than,
+ address_voting_weight_percenrage_less_than,
+ address_voting_weight_percenrage_in_range,
+ address_dividend_weight_percenrage_greater_than,
+ address_dividend_weight_percenrage_less_than,
+ address_dividend_weight_percenrage_in_range
+};
\ No newline at end of file
diff --git a/darc-js/src/SDK/conditionNodes/Condition_MembershipOp.ts b/darc-js/src/SDK/conditionNodes/Condition_MembershipOp.ts
new file mode 100644
index 00000000..5b15034e
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_MembershipOp.ts
@@ -0,0 +1,59 @@
+import {expression } from '../Node';
+
+/**
+ * Membership-related condition nodes
+| 401 | CHANGE_MEMBER_ROLE_TO_ANY_ROLE_EQUALS | ADDRESS_2DARRAY[0][0] targetAddress ||
+| 402 | CHANGE_MEMBER_ROLE_TO_ANY_ROLE_IN_LIST | ADDRESS_2DARRAY[0] targetAddressArray ||
+| 403 | CHANGE_MEMBER_ROLE_TO_ANY_ROLE_IN_RANGE | ADDRESS_2DARRAY[0][0] startTargetAddress, ADDRESS_2DARRAY[0][1] endTargetAddress ||
+| 404 | Placeholder404 | | |
+| 405 | Placeholder405 | | |
+| 406 | CHANGE_MEMBER_NAME_TO_ANY_STRING_IN_LIST | STRING_ARRAY nameList ||
+| 407 | CHANGE_MEMBER_NAME_TO_ANY_STRING_CONTAINS | STRING_ARRAY[0] subString ||
+ */
+
+function change_member_role_to_any_role_equals(targetAddress: string) {
+ return expression(401, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [[targetAddress]],
+ BYTES: []
+ });
+}
+
+function change_member_role_to_any_role_in_list(targetAddressArray: string[]) {
+ return expression(402, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [targetAddressArray],
+ BYTES: []
+ });
+}
+
+function change_member_role_to_any_role_in_range(startTargetAddress: string, endTargetAddress: string) {
+ return expression(403, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [[startTargetAddress, endTargetAddress]],
+ BYTES: []
+ });
+}
+
+function change_member_name_to_any_string_in_list(nameList: string[]) {
+ return expression(406, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: nameList,
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function change_member_name_to_any_string_contains(subString: string) {
+ return expression(407, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [subString],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+export { change_member_role_to_any_role_equals, change_member_role_to_any_role_in_list, change_member_role_to_any_role_in_range, change_member_name_to_any_string_in_list, change_member_name_to_any_string_contains };
diff --git a/darc-js/src/SDK/conditionNodes/Condition_Operation.ts b/darc-js/src/SDK/conditionNodes/Condition_Operation.ts
new file mode 100644
index 00000000..b439f5f0
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_Operation.ts
@@ -0,0 +1,28 @@
+import { expression } from '../Node';
+import { EnumOpcode } from '../opcodes/opcodeTable';
+/**
+ * Operation-related condition nodes
+| 151 | OPERATION_EQUALS | uint256 value ||
+| 152 | OPERATION_IN_LIST | uint256[] values ||
+ */
+
+
+function operation_equals(opcode: EnumOpcode) {
+ return expression(151, {
+ UINT256_2DARRAY: [[opcode]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_in_list(opcodes: EnumOpcode[]) {
+ return expression(152, {
+ UINT256_2DARRAY: [opcodes],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+export { operation_equals, operation_in_list, EnumOpcode };
\ No newline at end of file
diff --git a/darc-js/src/SDK/conditionNodes/Condition_OperationLog.ts b/darc-js/src/SDK/conditionNodes/Condition_OperationLog.ts
new file mode 100644
index 00000000..d7d030e8
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_OperationLog.ts
@@ -0,0 +1,140 @@
+import {expression} from "../Node";
+
+/**
+ * Operation log related condition nodes
+| 701 | OPERATION_BY_OPERATOR_SINCE_LAST_TIME_GREATER_THAN | uint256 timestamp ||
+| 702 | OPERATION_BY_OPERATOR_SINCE_LAST_TIME_LESS_THAN | uint256 timestamp ||
+| 703 | OPERATION_BY_OPERATOR_SINCE_LAST_TIME_IN_RANGE | uint256 startTimestamp, uint256 endTimestamp ||
+| 704 | OPERATION_GLOBAL_SINCE_LAST_TIME_GREATER_THAN | uint256 timestamp ||
+| 705 | OPERATION_GLOBAL_SINCE_LAST_TIME_LESS_THAN | uint256 timestamp ||
+| 706 | OPERATION_GLOBAL_SINCE_LAST_TIME_IN_RANGE | uint256 startTimestamp, uint256 endTimestamp ||
+| 707 | OPERATION_BY_ANY_ADDRESS_IN_LIST_SINCE_LAST_TIME_GREATER_THAN | address[] addressList, uint256 timestamp ||
+| 708 | OPERATION_BY_ANY_ADDRESS_IN_LIST_SINCE_LAST_TIME_LESS_THAN | address[] addressList, uint256 timestamp ||
+| 709 | OPERATION_BY_ANY_ADDRESS_IN_LIST_SINCE_LAST_TIME_IN_RANGE | address[] addressList, uint256 startTimestamp, uint256 endTimestamp ||
+| 710 | OPERATION_BY_EACH_ADDRESS_IN_LIST_SINCE_LAST_TIME_GREATER_THAN | address[] addressList, uint256 timestamp ||
+| 711 | OPERATION_BY_EACH_ADDRESS_IN_LIST_SINCE_LAST_TIME_LESS_THAN | address[] addressList, uint256 timestamp ||
+| 712 | OPERATION_BY_EACH_ADDRESS_IN_LIST_SINCE_LAST_TIME_IN_RANGE | address[] addressList, uint256 startTimestamp, uint256 endTimestamp ||
+ */
+
+function operation_by_operator_since_last_time_greater_than(timestamp: bigint) {
+ return expression(701, {
+ UINT256_2DARRAY: [[timestamp]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_by_operator_since_last_time_less_than(timestamp: bigint) {
+ return expression(702, {
+ UINT256_2DARRAY: [[timestamp]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_by_operator_since_last_time_in_range(startTimestamp: bigint, endTimestamp: bigint) {
+ return expression(703, {
+ UINT256_2DARRAY: [[startTimestamp, endTimestamp]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_global_since_last_time_greater_than(timestamp: bigint) {
+ return expression(704, {
+ UINT256_2DARRAY: [[timestamp]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_global_since_last_time_less_than(timestamp: bigint) {
+ return expression(705, {
+ UINT256_2DARRAY: [[timestamp]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_global_since_last_time_in_range(startTimestamp: bigint, endTimestamp: bigint) {
+ return expression(706, {
+ UINT256_2DARRAY: [[startTimestamp, endTimestamp]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_by_any_address_in_list_since_last_time_greater_than(addressList: string[], timestamp: bigint) {
+ return expression(707, {
+ UINT256_2DARRAY: [[timestamp]],
+ STRING_ARRAY: addressList,
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_by_any_address_in_list_since_last_time_less_than(addressList: string[], timestamp: bigint) {
+ return expression(708, {
+ UINT256_2DARRAY: [[timestamp]],
+ STRING_ARRAY: addressList,
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_by_any_address_in_list_since_last_time_in_range(addressList: string[], startTimestamp: bigint, endTimestamp: bigint) {
+ return expression(709, {
+ UINT256_2DARRAY: [[startTimestamp, endTimestamp]],
+ STRING_ARRAY: addressList,
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_by_each_address_in_list_since_last_time_greater_than(addressList: string[], timestamp: bigint) {
+ return expression(710, {
+ UINT256_2DARRAY: [[timestamp]],
+ STRING_ARRAY: addressList,
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_by_each_address_in_list_since_last_time_less_than(addressList: string[], timestamp: bigint) {
+ return expression(711, {
+ UINT256_2DARRAY: [[timestamp]],
+ STRING_ARRAY: addressList,
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operation_by_each_address_in_list_since_last_time_in_range(addressList: string[], startTimestamp: bigint, endTimestamp: bigint) {
+ return expression(712, {
+ UINT256_2DARRAY: [[startTimestamp, endTimestamp]],
+ STRING_ARRAY: addressList,
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+export {
+ operation_by_operator_since_last_time_greater_than,
+ operation_by_operator_since_last_time_less_than,
+ operation_by_operator_since_last_time_in_range,
+ operation_global_since_last_time_greater_than,
+ operation_global_since_last_time_less_than,
+ operation_global_since_last_time_in_range,
+ operation_by_any_address_in_list_since_last_time_greater_than,
+ operation_by_any_address_in_list_since_last_time_less_than,
+ operation_by_any_address_in_list_since_last_time_in_range,
+ operation_by_each_address_in_list_since_last_time_greater_than,
+ operation_by_each_address_in_list_since_last_time_less_than,
+ operation_by_each_address_in_list_since_last_time_in_range
+};
\ No newline at end of file
diff --git a/darc-js/src/SDK/conditionNodes/Condition_Operator.ts b/darc-js/src/SDK/conditionNodes/Condition_Operator.ts
new file mode 100644
index 00000000..c9a20daa
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_Operator.ts
@@ -0,0 +1,324 @@
+import {
+ expression
+} from '../Node';
+
+
+/**
+ * Operator related expressions
+
+| 0 | UNDEFINED | | Invalid Operation |
+| 1 | OPERATOR_NAME_EQUALS| STRING_ARRAY[0] operatorName | The operator name is exactly the same as the given string |
+| 2 | OPERATOR_ROLE_EQUALS| UINT256_2DARRAY[0][0] operatorRoleIndex | The operator role index is exactly the same as operatorRoleIndex |
+| 3 | OPERATOR_ADDRESS_EQUALS | ADDRESS_2DARRAY[0][0] operatorAddress | The operator address equals operatorAddress|
+| 4 | OPERATOR_ROLE_GREATER_THAN | UINT256_2DARRAY[0][0] operatorRoleIndex | The operator role index is greater than operatorRoleIndex|
+| 5 | OPERATOR_ROLE_LESS_THAN | UINT256_2DARRAY[0][0] operatorRoleIndex | The operator role index is less than operatorRoleIndex|
+| 6 | OPERATOR_ROLE_IN_RANGE| UINT256_2DARRAY[0][0] startingOperatorRoleIndex, UINT256_2DARRAY[0][1] endingOperatorRoleIndex | The operator role index is in the range of [startingOperatorRoleIndex, endingOperatorRoleIndex]|
+| 7 | OPERATOR_ROLE_IN_LIST | UINT256_2DARRAY[0] operatorRoleIndexArray| The operator role index is in the list of operatorRoleIndexArray|
+| 8 | OPERATOR_TOKEN_X_AMOUNT_GREATER_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] amount | The operator has more than amount of token at tokenClass|
+| 9 | OPERATOR_TOKEN_X_AMOUNT_LESS_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] amount ||
+| 10 | OPERATOR_TOKEN_X_AMOUNT_IN_RANGE | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] startingAmount, UINT256_2DARRAY[0][2] endingAmount | The operator has token amount in the range of [startingAmount, endingAmount] at tokenClass|
+| 11 | OPERATOR_TOKEN_X_AMOUNT_EQUALS| UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] amount | The operator has exactly amount of token at tokenClass|
+| 12 | OPERATOR_TOKEN_X_PERCENTAGE_GREATER_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] percentage | The operator has more than percentage of token at tokenClass|
+| 13 | OPERATOR_TOKEN_X_PERCENTAGE_LESS_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] percentage | The operator has less than percentage of token at tokenClass|
+| 14 | OPERATOR_TOKEN_X_PERCENTAGE_IN_RANGE | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] percentageStartingValue, UINT256_2DARRAY[0][2] percentageEndingValue | The operator has token percentage in the range of [percentageStartingValue, percentageEndingValue] at tokenClass|
+| 15 | OPERATOR_TOKEN_X_PERCENTAGE_EQUALS| UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] percentage | The operator has exactly percentage of token at tokenClass|
+| 16 | OPERATOR_VOTING_WEIGHT_GREATER_THAN| UINT256_2DARRAY[0][0] amount | The operator has more than amount of voting weight|
+| 17 | OPERATOR_VOTING_WEIGHT_LESS_THAN | UINT256_2DARRAY[0][0] amount | The operator has less than amount of voting weight|
+| 18 | OPERATOR_VOTING_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] startingAmount, UINT256_2DARRAY[0][1] endingAmount | The operator has voting weight in the range of [startingAmount, endingAmount]|
+| 19 | OPERATOR_DIVIDEND_WEIGHT_GREATER_THAN | UINT256_2DARRAY[0][0] amount | The operator has more than amount of dividend weight|
+| 20 | OPERATOR_DIVIDEND_WEIGHT_LESS_THAN| UINT256_2DARRAY[0][0] amount | The operator has less than amount of dividend weight|
+| 21 | OPERATOR_DIVIDEND_WEIGHT_IN_RANGE | UINT256_2DARRAY[0][0] startingAmount, UINT256_2DARRAY[0][1] endingAmount | The operator has dividend weight in the range of [startingAmount, endingAmount]|
+| 22 | Placeholder22 | | |
+| 23 | Placeholder23 | | |
+| 24 | Placeholder24 | | |
+| 25 | OPERATOR_WITHDRAWABLE_CASH_GREATER_THAN | UINT256_2DARRAY[0][0] amount | The operator has more than amount of withdrawable cash|
+| 26 | OPERATOR_WITHDRAWABLE_CASH_LESS_THAN | UINT256_2DARRAY[0][0] amount | The operator has less than amount of withdrawable cash|
+| 27 | OPERATOR_WITHDRAWABLE_CASH_IN_RANGE| UINT256_2DARRAY[0][0] startingAmount, UINT256_2DARRAY[0][1] endingAmount | The operator has withdrawable cash in the range of [startingAmount, endingAmount]|
+| 28 | OPERATOR_WITHDRAWABLE_DIVIDENDS_GREATER_THAN| UINT256_2DARRAY[0][0] amount | The operator has more than amount of withdrawable dividends|
+| 29 | OPERATOR_WITHDRAWABLE_DIVIDENDS_LESS_THAN | UINT256_2DARRAY[0][0] amount | The operator has less than amount of withdrawable dividends|
+| 30 | OPERATOR_WITHDRAWABLE_DIVIDENDS_IN_RANGE | UINT256_2DARRAY[0][0] amount | The operator has withdrawable dividends in the range of [startingAmount, endingAmount]|
+| 31 | OPERATOR_ADDRESS_IN_LIST | ADDRESS_2DARRAY[0] addressArray | The operator address is in the list of addressArray|
+ */
+
+function operator_name_equals(operatorName: string) {
+ return expression(1, {
+ STRING_ARRAY: [operatorName],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_role_equals(operatorRoleIndex: number) {
+ return expression(2, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[operatorRoleIndex]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_address_equals(operatorAddress: string) {
+ return expression(3, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [[operatorAddress]],
+ BYTES: []
+ });
+}
+
+function operator_role_greater_than(operatorRoleIndex: number) {
+ return expression(4, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[operatorRoleIndex]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_role_less_than(operatorRoleIndex: number) {
+ return expression(5, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[operatorRoleIndex]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_role_in_range(startingOperatorRoleIndex: number, endingOperatorRoleIndex: number) {
+ return expression(6, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[startingOperatorRoleIndex, endingOperatorRoleIndex]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_role_in_list(operatorRoleIndexArray: number[]) {
+ return expression(7, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [operatorRoleIndexArray],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_token_x_amount_greater_than(tokenClass: number, amount: number) {
+ return expression(8, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_token_x_amount_less_than(tokenClass: number, amount: number) {
+ return expression(9, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_token_x_amount_in_range(tokenClass: number, startingAmount: number, endingAmount: number) {
+ return expression(10, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, startingAmount, endingAmount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_token_x_amount_equals(tokenClass: number, amount: number) {
+ return expression(11, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_token_x_percentage_greater_than(tokenClass: number, percentage: number) {
+ return expression(12, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, percentage]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_token_x_percentage_less_than(tokenClass: number, percentage: number) {
+ return expression(13, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, percentage]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_token_x_percentage_in_range(tokenClass: number, percentageStartingValue: number, percentageEndingValue: number) {
+ return expression(14, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, percentageStartingValue, percentageEndingValue]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_token_x_percentage_equals(tokenClass: number, percentage: number) {
+ return expression(15, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[tokenClass, percentage]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_voting_weight_greater_than(amount: number) {
+ return expression(16, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_voting_weight_less_than(amount: number) {
+ return expression(17, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_voting_weight_in_range(startingAmount: number, endingAmount: number) {
+ return expression(18, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[startingAmount, endingAmount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_dividend_weight_greater_than(amount: number) {
+ return expression(19, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_dividend_weight_less_than(amount: number) {
+ return expression(20, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_dividend_weight_in_range(startingAmount: number, endingAmount: number) {
+ return expression(21, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[startingAmount, endingAmount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_withdrawable_cash_greater_than(amount: number) {
+ return expression(25, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_withdrawable_cash_less_than(amount: number) {
+ return expression(26, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_withdrawable_cash_in_range(startingAmount: number, endingAmount: number) {
+ return expression(27, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[startingAmount, endingAmount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_withdrawable_dividends_greater_than(amount: number) {
+ return expression(28, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_withdrawable_dividends_less_than(amount: number) {
+ return expression(29, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[amount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_withdrawable_dividends_in_range(startingAmount: number, endingAmount: number) {
+ return expression(30, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[startingAmount, endingAmount]],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function operator_address_in_list(addressArray: string[]) {
+ return expression(31, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [addressArray],
+ BYTES: []
+ });
+}
+
+export {
+ operator_name_equals,
+ operator_role_equals,
+ operator_address_equals,
+ operator_role_greater_than,
+ operator_role_less_than,
+ operator_role_in_range,
+ operator_role_in_list,
+ operator_token_x_amount_greater_than,
+ operator_token_x_amount_less_than,
+ operator_token_x_amount_in_range,
+ operator_token_x_amount_equals,
+ operator_token_x_percentage_greater_than,
+ operator_token_x_percentage_less_than,
+ operator_token_x_percentage_in_range,
+ operator_token_x_percentage_equals,
+ operator_voting_weight_greater_than,
+ operator_voting_weight_less_than,
+ operator_voting_weight_in_range,
+ operator_dividend_weight_greater_than,
+ operator_dividend_weight_less_than,
+ operator_dividend_weight_in_range,
+ operator_withdrawable_cash_greater_than,
+ operator_withdrawable_cash_less_than,
+ operator_withdrawable_cash_in_range,
+ operator_withdrawable_dividends_greater_than,
+ operator_withdrawable_dividends_less_than,
+ operator_withdrawable_dividends_in_range,
+ operator_address_in_list
+}
\ No newline at end of file
diff --git a/darc-js/src/SDK/conditionNodes/Condition_PluginAndVoting.ts b/darc-js/src/SDK/conditionNodes/Condition_PluginAndVoting.ts
new file mode 100644
index 00000000..65693a80
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_PluginAndVoting.ts
@@ -0,0 +1,389 @@
+import {expression} from '../Node';
+
+/**
+ * Plugin and voting related condition nodes
+| 301 | ENABLE_ANY_BEFORE_OP_PLUGIN_INDEX_IN_LIST | UINT256_2DARRAY[0] pluginIndexList | Only for checking "BATCH_ENABLE_PLUGINS" operation.
+| 302 | ENABLE_ANY_AFTER_OP_PLUGIN_INDEX_IN_LIST | UINT256_2DARRAY[0] pluginIndexList | Only for checking "BATCH_ENABLE_PLUGINS" operation.
+| 303 | ENABLE_EACH_BEFORE_OP_PLUGIN_INDEX_IN_LIST | UINT256_2DARRAY[0][0] startPluginIndex | Only for checking "BATCH_ENABLE_PLUGINS" operation.
+| 304 | ENABLE_EACH_AFTER_OP_PLUGIN_INDEX_IN_LIST | UINT256_2DARRAY[0] pluginIndexList | Only for checking "BATCH_ENABLE_PLUGINS" operation.
+| 305 | DISABLE_ANY_BEFORE_OP_PLUGIN_INDEX_IN_LIST | UINT256_2DARRAY[0] pluginIndexList | Only for checking "BATCH_DISABLE_PLUGINS" operation.
+| 306 | DISABLE_ANY_AFTER_OP_PLUGIN_INDEX_IN_LIST | UINT256_2DARRAY[0] pluginIndexList | Only for checking "BATCH_DISABLE_PLUGINS" operation.
+| 307 | DISABLE_EACH_BEFORE_OP_PLUGIN_INDEX_IN_LIST | UINT256_2DARRAY[0] pluginIndexList | Only for checking "BATCH_DISABLE_PLUGINS" operation.
+| 308 | DISABLE_EACH_AFTER_OP_PLUGIN_INDEX_IN_LIST | UINT256_2DARRAY[0] pluginIndexList | Only for checking "BATCH_DISABLE_PLUGINS" operation.
+| 309 | ENABLE_ANY_BEFORE_OP_PLUGIN_INDEX_IN_RANGE | UINT256_2DARRAY[0][0] startPluginIndex, UINT256_2DARRAY[0][1] endPluginIndex | Only for checking "BATCH_ENABLE_PLUGINS" operation.
+| 310 | ENABLE_ANY_AFTER_OP_PLUGIN_INDEX_IN_RANGE | UINT256_2DARRAY[0][0] startPluginIndex, UINT256_2DARRAY[0][1] endPluginIndex | Only for checking "BATCH_ENABLE_PLUGINS" operation.
+| 311 | ENABLE_EACH_BEFORE_OP_PLUGIN_INDEX_IN_RANGE | UINT256_2DARRAY[0][0] startPluginIndex, UINT256_2DARRAY[0][1] endPluginIndex | Only for checking "BATCH_ENABLE_PLUGINS" operation.
+| 312 | ENABLE_EACH_AFTER_OP_PLUGIN_INDEX_IN_RANGE | UINT256_2DARRAY[0][0] startPluginIndex, UINT256_2DARRAY[0][1] endPluginIndex | Only for checking "BATCH_ENABLE_PLUGINS" operation.
+| 313 | DISABLE_ANY_BEFORE_OP_PLUGIN_INDEX_IN_RANGE | UINT256_2DARRAY[0][0] startPluginIndex, UINT256_2DARRAY[0][1] endPluginIndex | Only for checking "BATCH_DISABLE_PLUGINS" operation.
+| 314 | DISABLE_ANY_AFTER_OP_PLUGIN_INDEX_IN_RANGE | UINT256_2DARRAY[0][0] startPluginIndex, UINT256_2DARRAY[0][1] endPluginIndex | Only for checking "BATCH_DISABLE_PLUGINS" operation.
+| 315 | DISABLE_EACH_BEFORE_OP_PLUGIN_INDEX_IN_RANGE | UINT256_2DARRAY[0][0] startPluginIndex, UINT256_2DARRAY[0][1] endPluginIndex | Only for checking "BATCH_DISABLE_PLUGINS" operation.
+| 316 | DISABLE_EACH_AFTER_OP_PLUGIN_INDEX_IN_RANGE | UINT256_2DARRAY[0][0] startPluginIndex, UINT256_2DARRAY[0][1] endPluginIndex | Only for checking "BATCH_DISABLE_PLUGINS" operation.
+| 317 | ARE_ALL_PLUGINS_BEFORE_OPERATION | | This can be used for checking "BATCH_ENABLE_PLUGINS", "BATCH_DISABLE_PLUGINS", "BATCH_ADD_PLUGINS" and "BATCH_ADD_AND_ENABLE_PLUGINS" operations.
+| 318 | ARE_ALL_PLUGINS_AFTER_OPERATION | | This can be used for checking "BATCH_ENABLE_PLUGINS", "BATCH_DISABLE_PLUGINS", "BATCH_ADD_PLUGINS" and "BATCH_ADD_AND_ENABLE_PLUGINS" operations.
+| 319 | IS_ANY_PLUGIN_BEFORE_OPERATION | | This can be used for checking "BATCH_ENABLE_PLUGINS", "BATCH_DISABLE_PLUGINS", "BATCH_ADD_PLUGINS" and "BATCH_ADD_AND_ENABLE_PLUGINS" operations.
+| 320 | IS_ANY_PLUGIN_AFTER_OPERATION | | This can be used for checking "BATCH_ENABLE_PLUGINS", "BATCH_DISABLE_PLUGINS", "BATCH_ADD_PLUGINS" and "BATCH_ADD_AND_ENABLE_PLUGINS" operations.
+| 321 | ADD_PLUGIN_ANY_LEVEL_EQUALS | UINT256_2DARRAY[0][0] pluginIndex, UINT256_2DARRAY[0][0] level ||
+| 322 | ADD_PLUGIN_ANY_LEVEL_IN_LIST | UINT256_2DARRAY[0] pluginIndexList ||
+| 323 | ADD_PLUGIN_ANY_LEVEL_IN_RANGE | UINT256_2DARRAY[0][0] startPluginIndex, UINT256_2DARRAY[0][0] endPluginIndex, UINT256_2DARRAY[0][0] level ||
+| 324 | ADD_PLUGIN_ANY_LEVEL_GREATER_THAN | UINT256_2DARRAY[0][0] pluginIndex, UINT256_2DARRAY[0][0] level ||
+| 325 | ADD_PLUGIN_ANY_LEVEL_LESS_THAN | UINT256_2DARRAY[0][0] pluginIndex, UINT256_2DARRAY[0][0] level ||
+| 326 | ADD_PLUGIN_ANY_RETURN_TYPE_EQUALS | UINT256_2DARRAY[0][0] pluginIndex, UINT256_2DARRAY[0][0] returnType ||
+| 327 | ADD_PLUGIN_ANY_VOTING_RULE_INDEX_IN_LIST | UINT256_2DARRAY[0] votingRuleIndexList ||
+| 328 | Placeholder320 | | |
+| 321 | Placeholder321 | | |
+| 322 | Placeholder322 | | |
+| 323 | Placeholder323 | | |
+| 324 | Placeholder324 | | |
+| 325 | Placeholder325 | | |
+| 326 | Placeholder326 | | |
+| 327 | Placeholder327 | | |
+| 328 | Placeholder328 | | |
+| 329 | Placeholder329 | | |
+| 330 | Placeholder330 | | |
+| 331 | Placeholder331 | | |
+| 332 | Placeholder332 | | |
+| 333 | Placeholder333 | | |
+| 334 | Placeholder334 | | |
+| 335 | Placeholder335 | | |
+| 336 | Placeholder336 | | |
+| 337 | Placeholder337 | | |
+| 338 | Placeholder338 | | |
+| 339 | Placeholder339 | | |
+| 340 | Placeholder340 | | |
+| 341 | Placeholder341 | | |
+| 342 | Placeholder342 | | |
+| 343 | Placeholder343 | | |
+| 344 | Placeholder344 | | |
+| 345 | Placeholder345 | | |
+| 346 | Placeholder346 | | |
+| 347 | Placeholder347 | | |
+| 348 | Placeholder348 | | |
+| 349 | Placeholder349 | | |
+| 350 | Placeholder350 | | |
+| 351 | Placeholder351 | | |
+| 352 | Placeholder352 | | |
+| 353 | Placeholder353 | | |
+| 354 | Placeholder354 | | |
+| 355 | Placeholder355 | | |
+| 356 | Placeholder356 | | |
+| 357 | Placeholder357 | | |
+| 358 | Placeholder358 | | |
+| 359 | Placeholder359 | | |
+| 360 | Placeholder360 | | |
+| 361 | Placeholder361 | | |
+| 362 | Placeholder362 | | |
+| 363 | Placeholder363 | | |
+| 364 | Placeholder364 | | |
+| 365 | Placeholder365 | | |
+| 366 | Placeholder366 | | |
+| 367 | Placeholder367 | | |
+| 368 | Placeholder368 | | |
+| 369 | Placeholder369 | | |
+| 370 | Placeholder370 | | |
+| 371 | ADD_ANY_VOTING_RULE_IS_ABSOLUTE_MAJORITY | ||
+| 372 | ADD_ANY_VOTING_RULE_APPROVAL_PERCENTAGE_IN_RANGE | UINT256_2DARRAY[0][0] startPercentage, UINT256_2DARRAY[0][1] endPercentage ||
+| 373 | ADD_ANY_VOTING_RULE_TOKEN_CLASS_CONTAINS | UINT256_2DARRAY[0][0] tokenClass ||
+ */
+
+function enable_any_before_op_plugin_index_in_list(pluginIndexList: number[]) {
+ return expression(301, {
+ UINT256_2DARRAY: [pluginIndexList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function enable_any_after_op_plugin_index_in_list(pluginIndexList: number[]) {
+ return expression(302, {
+ UINT256_2DARRAY: [pluginIndexList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function enable_each_before_op_plugin_index_in_list(startPluginIndex: number) {
+ return expression(303, {
+ UINT256_2DARRAY: [[startPluginIndex]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function enable_each_after_op_plugin_index_in_list(pluginIndexList: number[]) {
+ return expression(304, {
+ UINT256_2DARRAY: [pluginIndexList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function disable_any_before_op_plugin_index_in_list(pluginIndexList: number[]) {
+ return expression(305, {
+ UINT256_2DARRAY: [pluginIndexList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function disable_any_after_op_plugin_index_in_list(pluginIndexList: number[]) {
+ return expression(306, {
+ UINT256_2DARRAY: [pluginIndexList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function disable_each_before_op_plugin_index_in_list(pluginIndexList: number[]) {
+ return expression(307, {
+ UINT256_2DARRAY: [pluginIndexList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function disable_each_after_op_plugin_index_in_list(pluginIndexList: number[]) {
+ return expression(308, {
+ UINT256_2DARRAY: [pluginIndexList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function enable_any_before_op_plugin_index_in_range(startPluginIndex: number, endPluginIndex: number) {
+ return expression(309, {
+ UINT256_2DARRAY: [[startPluginIndex, endPluginIndex]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function enable_any_after_op_plugin_index_in_range(startPluginIndex: number, endPluginIndex: number) {
+ return expression(310, {
+ UINT256_2DARRAY: [[startPluginIndex, endPluginIndex]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function enable_each_before_op_plugin_index_in_range(startPluginIndex: number, endPluginIndex: number) {
+ return expression(311, {
+ UINT256_2DARRAY: [[startPluginIndex, endPluginIndex]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function enable_each_after_op_plugin_index_in_range(startPluginIndex: number, endPluginIndex: number) {
+ return expression(312, {
+ UINT256_2DARRAY: [[startPluginIndex, endPluginIndex]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function disable_any_before_op_plugin_index_in_range(startPluginIndex: number, endPluginIndex: number) {
+ return expression(313, {
+ UINT256_2DARRAY: [[startPluginIndex, endPluginIndex]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function disable_any_after_op_plugin_index_in_range(startPluginIndex: number, endPluginIndex: number) {
+ return expression(314, {
+ UINT256_2DARRAY: [[startPluginIndex, endPluginIndex]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function disable_each_before_op_plugin_index_in_range(startPluginIndex: number, endPluginIndex: number) {
+ return expression(315, {
+ UINT256_2DARRAY: [[startPluginIndex, endPluginIndex]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function disable_each_after_op_plugin_index_in_range(startPluginIndex: number, endPluginIndex: number) {
+ return expression(316, {
+ UINT256_2DARRAY: [[startPluginIndex, endPluginIndex]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function are_all_plugins_before_operation() {
+ return expression(317, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function are_all_plugins_after_operation() {
+ return expression(318, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function is_any_plugin_before_operation() {
+ return expression(319, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function is_any_plugin_after_operation() {
+ return expression(320, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_plugin_any_level_equals(pluginIndex: number, level: number) {
+ return expression(321, {
+ UINT256_2DARRAY: [[pluginIndex, level]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_plugin_any_level_in_list(pluginIndexList: number[]) {
+ return expression(322, {
+ UINT256_2DARRAY: [pluginIndexList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_plugin_any_level_in_range(startPluginIndex: number, endPluginIndex: number, level: number) {
+ return expression(323, {
+ UINT256_2DARRAY: [[startPluginIndex, endPluginIndex, level]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_plugin_any_level_greater_than(pluginIndex: number, level: number) {
+ return expression(324, {
+ UINT256_2DARRAY: [[pluginIndex, level]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_plugin_any_level_less_than(pluginIndex: number, level: number) {
+ return expression(325, {
+ UINT256_2DARRAY: [[pluginIndex, level]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_plugin_any_return_type_equals(pluginIndex: number, returnType: number) {
+ return expression(326, {
+ UINT256_2DARRAY: [[pluginIndex, returnType]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_plugin_any_voting_rule_index_in_list(votingRuleIndexList: number[]) {
+ return expression(327, {
+ UINT256_2DARRAY: [votingRuleIndexList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_any_voting_rule_is_absolute_majority() {
+ return expression(371, {
+ UINT256_2DARRAY: [],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_any_voting_rule_approval_percentage_in_range(startPercentage: number, endPercentage: number) {
+ return expression(372, {
+ UINT256_2DARRAY: [[startPercentage, endPercentage]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_any_voting_rule_token_class_contains(tokenClass: number) {
+ return expression(373, {
+ UINT256_2DARRAY: [[tokenClass]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+export {
+ enable_any_before_op_plugin_index_in_list,
+ enable_any_after_op_plugin_index_in_list,
+ enable_each_before_op_plugin_index_in_list,
+ enable_each_after_op_plugin_index_in_list,
+ disable_any_before_op_plugin_index_in_list,
+ disable_any_after_op_plugin_index_in_list,
+ disable_each_before_op_plugin_index_in_list,
+ disable_each_after_op_plugin_index_in_list,
+ enable_any_before_op_plugin_index_in_range,
+ enable_any_after_op_plugin_index_in_range,
+ enable_each_before_op_plugin_index_in_range,
+ enable_each_after_op_plugin_index_in_range,
+ disable_any_before_op_plugin_index_in_range,
+ disable_any_after_op_plugin_index_in_range,
+ disable_each_before_op_plugin_index_in_range,
+ disable_each_after_op_plugin_index_in_range,
+ are_all_plugins_before_operation,
+ are_all_plugins_after_operation,
+ is_any_plugin_before_operation,
+ is_any_plugin_after_operation,
+ add_plugin_any_level_equals,
+ add_plugin_any_level_in_list,
+ add_plugin_any_level_in_range,
+ add_plugin_any_level_greater_than,
+ add_plugin_any_level_less_than,
+ add_plugin_any_return_type_equals,
+ add_plugin_any_voting_rule_index_in_list,
+ add_any_voting_rule_is_absolute_majority,
+ add_any_voting_rule_approval_percentage_in_range,
+ add_any_voting_rule_token_class_contains
+};
\ No newline at end of file
diff --git a/darc-js/src/SDK/conditionNodes/Condition_Program.ts b/darc-js/src/SDK/conditionNodes/Condition_Program.ts
new file mode 100644
index 00000000..7d07b113
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_Program.ts
@@ -0,0 +1,88 @@
+import {expression} from "../Node";
+import { EnumOpcode } from '../opcodes/opcodeTable';
+
+/**
+ * Program-related condition nodes
+| 601 | PROGRAM_OP_LENGTH_GREATER_THAN | UINT256_2DARRAY[0][0] length ||
+| 602 | PROGRAM_OP_LENGTH_LESS_THAN | UINT256_2DARRAY[0][0] length ||
+| 603 | PROGRAM_OP_LENGTH_IN_RANGE | UINT256_2DARRAY[0][0] startLength, UINT256_2DARRAY[0][1] endLength ||
+| 604 | PROGRAM_OP_LENGTH_EQUALS | UINT256_2DARRAY[0][0] length ||
+| 605 | PROGRAM_CONTAINS_OP | UINT256_2DARRAY[0][0] opCode ||
+| 606 | PROGRAM_CONTAINS_OP_IN_LIST | UINT256_2DARRAY[0] opCodeList ||
+| 607 | PROGRAM_EVERY_OP_EQUALS | UINT256_2DARRAY[0][0] opCode ||
+| 608 | PROGRAM_EVERY_OP_IN_LIST | UINT256_2DARRAY[0] opCodeList ||
+ */
+
+function program_op_length_greater_than(length: bigint) {
+ return expression(601, {
+ UINT256_2DARRAY: [[length]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function program_op_length_less_than(length: bigint) {
+ return expression(602, {
+ UINT256_2DARRAY: [[length]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function program_op_length_in_range(startLength: bigint, endLength: bigint) {
+ return expression(603, {
+ UINT256_2DARRAY: [[startLength, endLength]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function program_op_length_equals(length: bigint) {
+ return expression(604, {
+ UINT256_2DARRAY: [[length]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function program_contains_op(opCode: EnumOpcode) {
+ return expression(605, {
+ UINT256_2DARRAY: [[opCode]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function program_contains_op_in_list(opCodeList: EnumOpcode[]) {
+ return expression(606, {
+ UINT256_2DARRAY: [opCodeList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function program_every_op_equals(opCode: EnumOpcode) {
+ return expression(607, {
+ UINT256_2DARRAY: [[opCode]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function program_every_op_in_list(opCodeList: EnumOpcode[]) {
+ return expression(608, {
+ UINT256_2DARRAY: [opCodeList],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+export { program_op_length_greater_than, program_op_length_less_than, program_op_length_in_range, program_op_length_equals, program_contains_op, program_contains_op_in_list, program_every_op_equals, program_every_op_in_list };
\ No newline at end of file
diff --git a/darc-js/src/SDK/conditionNodes/Condition_TokenAndCash.ts b/darc-js/src/SDK/conditionNodes/Condition_TokenAndCash.ts
new file mode 100644
index 00000000..ce69df31
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_TokenAndCash.ts
@@ -0,0 +1,48 @@
+import {expression} from '../Node';
+
+/**
+ * Token and cash-related condition nodes
+| 461 | TOKEN_X_OP_ANY_PRICE_GREATER_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] price | For three operations: "BATCH_PAY_TO_MINT_TOKENS", "BATCH_PAY_TO_TRANSFER_TOKENS" and "BATCH_BURN_TOKENS_AND_REFUND".
+| 462 | TOKEN_X_OP_ANY_PRICE_LESS_THAN | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] price | For three operations: "BATCH_PAY_TO_MINT_TOKENS", "BATCH_PAY_TO_TRANSFER_TOKENS" and "BATCH_BURN_TOKENS_AND_REFUND".
+| 463 | TOKEN_X_OP_ANY_PRICE_IN_RANGE | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] startPrice, UINT256_2DARRAY[0][2] endPrice | For three operations: "BATCH_PAY_TO_MINT_TOKENS", "BATCH_PAY_TO_TRANSFER_TOKENS" and "BATCH_BURN_TOKENS_AND_REFUND".
+| 464 | TOKEN_X_OP_ANY_PRICE_EQUALS | UINT256_2DARRAY[0][0] tokenClass, UINT256_2DARRAY[0][1] price | For three operations: "BATCH_PAY_TO_MINT_TOKENS", "BATCH_PAY_TO_TRANSFER_TOKENS" and "BATCH_BURN_TOKENS_AND_REFUND".
+ */
+
+function token_x_op_any_price_greater_than(tokenClass: bigint, price: bigint) {
+ return expression(461, {
+ UINT256_2DARRAY: [[tokenClass, price]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_x_op_any_price_less_than(tokenClass: bigint, price: bigint) {
+ return expression(462, {
+ UINT256_2DARRAY: [[tokenClass, price]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_x_op_any_price_in_range(tokenClass: bigint, startPrice: bigint, endPrice: bigint) {
+ return expression(463, {
+ UINT256_2DARRAY: [[tokenClass, startPrice, endPrice]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function token_x_op_any_price_equals(tokenClass: bigint, price: bigint) {
+ return expression(464, {
+ UINT256_2DARRAY: [[tokenClass, price]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+export { token_x_op_any_price_greater_than, token_x_op_any_price_less_than, token_x_op_any_price_in_range, token_x_op_any_price_equals };
+
diff --git a/darc-js/src/SDK/conditionNodes/Condition_Withdrawable.ts b/darc-js/src/SDK/conditionNodes/Condition_Withdrawable.ts
new file mode 100644
index 00000000..c1d23f01
--- /dev/null
+++ b/darc-js/src/SDK/conditionNodes/Condition_Withdrawable.ts
@@ -0,0 +1,96 @@
+import {expression} from "../Node";
+
+/**
+ * Withdrawable-related condition nodes
+| 431 | ADD_WITHDRAWABLE_BALANCE_ANY_AMOUNT_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 432 | ADD_WITHDRAWABLE_BALANCE_ANY_AMOUNT_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 433 | ADD_WITHDRAWABLE_BALANCE_ANY_AMOUNT_IN_RANGE | UINT256_2DARRAY[0][0] startAmount, UINT256_2DARRAY[0][0] endAmount ||
+| 434 | ADD_WITHDRAWABLE_BALANCE_ANY_AMOUNT_EQUALS | UINT256_2DARRAY[0][0] amount ||
+| 435 | REDUCE_WITHDRAWABLE_BALANCE_ANY_AMOUNT_GREATER_THAN | UINT256_2DARRAY[0][0] amount ||
+| 436 | REDUCE_WITHDRAWABLE_BALANCE_ANY_AMOUNT_LESS_THAN | UINT256_2DARRAY[0][0] amount ||
+| 437 | REDUCE_WITHDRAWABLE_BALANCE_ANY_AMOUNT_IN_RANGE | UINT256_2DARRAY[0][0] startAmount, UINT256_2DARRAY[0][0] endAmount ||
+| 438 | REDUCE_WITHDRAWABLE_BALANCE_ANY_AMOUNT_EQUALS | UINT256_2DARRAY[0][0] amount ||
+ */
+
+function add_withdrawable_balance_any_amount_greater_than(amount: bigint) {
+ return expression(431, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_withdrawable_balance_any_amount_less_than(amount: bigint) {
+ return expression(432, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_withdrawable_balance_any_amount_in_range(startAmount: bigint, endAmount: bigint) {
+ return expression(433, {
+ UINT256_2DARRAY: [[startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function add_withdrawable_balance_any_amount_equals(amount: bigint) {
+ return expression(434, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function reduce_withdrawable_balance_any_amount_greater_than(amount: bigint) {
+ return expression(435, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function reduce_withdrawable_balance_any_amount_less_than(amount: bigint) {
+ return expression(436, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function reduce_withdrawable_balance_any_amount_in_range(startAmount: bigint, endAmount: bigint) {
+ return expression(437, {
+ UINT256_2DARRAY: [[startAmount, endAmount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+function reduce_withdrawable_balance_any_amount_equals(amount: bigint) {
+ return expression(438, {
+ UINT256_2DARRAY: [[amount]],
+ STRING_ARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ });
+}
+
+export {
+ add_withdrawable_balance_any_amount_greater_than,
+ add_withdrawable_balance_any_amount_less_than,
+ add_withdrawable_balance_any_amount_in_range,
+ add_withdrawable_balance_any_amount_equals,
+ reduce_withdrawable_balance_any_amount_greater_than,
+ reduce_withdrawable_balance_any_amount_less_than,
+ reduce_withdrawable_balance_any_amount_in_range,
+ reduce_withdrawable_balance_any_amount_equals
+};
diff --git a/darc-js/src/SDK/includes.ts b/darc-js/src/SDK/includes.ts
index 26e77ff8..403b77c2 100644
--- a/darc-js/src/SDK/includes.ts
+++ b/darc-js/src/SDK/includes.ts
@@ -1,24 +1,498 @@
// all the included instructions are here, mostly instructions for operations
-// todo: add backend support for current operations
+import { OperationStruct, PluginStruct, PluginStructWithNode, VotingRuleStruct } from "../types/basicTypes";
+import { BigNumber } from "ethers";
+import { objectMethod } from "@babel/types";
-import { TokenOperations } from "./struct/token-operation-map";
-import { Plugin } from "./struct/Plugin";
-import { OperationStruct } from "../types/basicTypes";
+import {
+ OPCODE_ID_1_BATCH_MINT_TOKENS,
+ OPCODE_ID_2_BATCH_CREATE_TOKEN_CLASSES,
+ OPCODE_ID_3_BATCH_TRANSFER_TOKENS,
+ OPCODE_ID_4_BATCH_TRANSFER_TOKENS_FROM_TO,
+ OPCODE_ID_5_BATCH_BURN_TOKENS,
+ OPCODE_ID_6_BATCH_BURN_TOKENS_FROM,
+ OPCODE_ID_7_BATCH_ADD_MEMBERSHIPS,
+ OPCODE_ID_8_BATCH_SUSPEND_MEMBERSHIPS,
+ OPCODE_ID_9_BATCH_RESUME_MEMBERSHIPS,
+ OPCODE_ID_10_BATCH_CHANGE_MEMBER_ROLES,
+ OPCODE_ID_11_BATCH_CHANGE_MEMBER_NAMES,
+ OPCODE_ID_12_BATCH_ADD_PLUGINS,
+ OPCODE_ID_13_BATCH_ENABLE_PLUGINS,
+ OPCODE_ID_14_BATCH_DISABLE_PLUGINS,
+ OPCODE_ID_15_BATCH_ADD_AND_ENABLE_PLUGINS,
+ OPCODE_ID_16_BATCH_SET_PARAMETERS,
+ OPCODE_ID_17_BATCH_ADD_WITHDRAWABLE_BALANCES,
+ OPCODE_ID_18_BATCH_REDUCE_WITHDRAWABLE_BALANCES,
+ OPCODE_ID_19_BATCH_ADD_VOTING_RULES,
+ OPCODE_ID_20_BATCH_PAY_TO_MINT_TOKENS,
+ OPCODE_ID_21_BATCH_PAY_TO_TRANSFER_TOKENS,
+ OPCODE_ID_22_ADD_EMERGENCY,
+ OPCODE_ID_24_CALL_EMERGENCY,
+ OPCODE_ID_25_CALL_CONTRACT_ABI,
+ OPCODE_ID_26_PAY_CASH,
+ OPCODE_ID_27_OFFER_DIVIDENDS,
+ OPCODE_ID_29_SET_APPROVAL_FOR_ALL_OPERATIONS,
+ OPCODE_ID_30_BATCH_BURN_TOKENS_AND_REFUND,
+ OPCODE_ID_31_ADD_STORAGE_STRING,
+ OPCODE_ID_32_VOTE,
+ OPCODE_ID_33_EXECUTE_PENDING_PROGRAM,
+ OPCODE_ID_34_END_EMERGENCY,
+ OPCODE_ID_35_UPGRADE_TO_ADDRESS,
+ OPCODE_ID_36_CONFIRM_UPGRAED_FROM_ADDRESS,
+ OPCODE_ID_37_UPGRADE_TO_THE_LATEST
+} from "./opcodes/opcodeTable";
-import { op_batch_mint_tokens } from "./opcodes/op_batch_mint_tokens";
-import { op_batch_create_token_class } from "./opcodes/op_batch_create_token_class";
-import { objectMethod } from "@babel/types";
+/**
+ * Below are return types
+ */
+export let UNDEFINED = 0;
+export let SANDBOX_NEEDED = 1;
+export let NO = 2;
+export let VOTING_NEEDED = 3;
+export let YES_AND_SKIP_SANDBOX = 4;
+export let YES = 5;
+
+export enum EnumReturnType {
+ UNDEFINED = 0,
+ SANDBOX_NEEDED = 1,
+ NO = 2,
+ VOTING_NEEDED = 3,
+ YES_AND_SKIP_SANDBOX = 4,
+ YES = 5
+}
+
+/**
+ * The list of operations to be executed
+ * When an operation function is called, it will add an operation to this list
+ */
export let operationList: OperationStruct[] = [];
+/**
+ * The notes for the program
+ */
export let programNotes: string = "";
-export function batch_mint_tokens(addressArray: string[], amountArray: bigint[], tokenClass: bigint[]) {
- let operation = op_batch_mint_tokens(addressArray, amountArray, tokenClass);
+export { BigNumber };
+
+/**
+ * The basic node for the program
+ */
+export { Node, expression, TRUE, FALSE, AND, OR, and, or, not, NOT, boolean_true, boolean_false } from "./Node";
+
+/**
+ * The setter for the program notes
+ * @param note The notes for the program
+ */
+export function setNote(note:string) {
+ programNotes = note;
+}
+
+export function batch_mint_tokens(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_1_BATCH_MINT_TOKENS(addressArray, tokenClassArray, amountArray);
+ operationList.push(operation);
+}
+
+export function batch_create_token_classes(nameArray: string[], tokenIndexArray: bigint[] | number[], votingWeightArray: bigint[] | number[], dividendWeightArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_2_BATCH_CREATE_TOKEN_CLASSES(nameArray, tokenIndexArray, votingWeightArray, dividendWeightArray);
+ operationList.push(operation);
+}
+
+export function batch_transfer_tokens(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_3_BATCH_TRANSFER_TOKENS(addressArray, tokenClassArray, amountArray);
+ operationList.push(operation);
+}
+
+export function batch_transfer_tokens_from_to(fromAddressArray: string[], toAddressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_4_BATCH_TRANSFER_TOKENS_FROM_TO(fromAddressArray, toAddressArray, tokenClassArray, amountArray);
+ operationList.push(operation);
+}
+
+export function batch_burn_tokens(tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_5_BATCH_BURN_TOKENS(tokenClassArray, amountArray);
+ operationList.push(operation);
+}
+
+export function batch_burn_tokens_from(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_6_BATCH_BURN_TOKENS_FROM(addressArray, tokenClassArray, amountArray);
+ operationList.push(operation);
+}
+
+export function batch_add_memberships(addressArray: string[], roleArray: bigint[] | number[], nameArray: string[]) {
+ let operation = OPCODE_ID_7_BATCH_ADD_MEMBERSHIPS(addressArray, roleArray, nameArray);
+ operationList.push(operation);
+}
+
+export function batch_suspend_memberships(addressArray: string[]) {
+ let operation = OPCODE_ID_8_BATCH_SUSPEND_MEMBERSHIPS(addressArray);
+ operationList.push(operation);
+}
+
+export function batch_resume_memberships(addressArray: string[]) {
+ let operation = OPCODE_ID_9_BATCH_RESUME_MEMBERSHIPS(addressArray);
+ operationList.push(operation);
+}
+
+export function batch_change_member_roles(addressArray: string[], roleArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_10_BATCH_CHANGE_MEMBER_ROLES(addressArray, roleArray);
+ operationList.push(operation);
+}
+
+export function batch_change_member_names(addressArray: string[], nameArray: string[]) {
+ let operation = OPCODE_ID_11_BATCH_CHANGE_MEMBER_NAMES(addressArray, nameArray);
+ operationList.push(operation);
+}
+
+export function batch_add_plugins(pluginArray: PluginStruct[] | PluginStructWithNode[]) {
+ let operation = OPCODE_ID_12_BATCH_ADD_PLUGINS(pluginArray);
+ operationList.push(operation);
+}
+
+export function batch_enable_plugins(pluginIndexArray: bigint[] | number[], isBeforeOperationArray: boolean[]) {
+ let operation = OPCODE_ID_13_BATCH_ENABLE_PLUGINS(pluginIndexArray, isBeforeOperationArray);
+ operationList.push(operation);
+}
+
+export function batch_disable_plugins(pluginIndexArray: bigint[] | number[], isBeforeOperationArray: boolean[]) {
+ let operation = OPCODE_ID_14_BATCH_DISABLE_PLUGINS(pluginIndexArray, isBeforeOperationArray);
+ operationList.push(operation);
+}
+
+export function batch_add_and_enable_plugins(pluginArray: PluginStruct[] | PluginStructWithNode[]) {
+ let operation = OPCODE_ID_15_BATCH_ADD_AND_ENABLE_PLUGINS(pluginArray);
+ operationList.push(operation);
+}
+
+export function batch_set_parameters(parameterIndexArray: bigint[] | number[], parameterValueArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_16_BATCH_SET_PARAMETERS(parameterIndexArray, parameterValueArray);
+ operationList.push(operation);
+}
+
+export function batch_add_withdrawable_balances(addressArray: string[], amountArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_17_BATCH_ADD_WITHDRAWABLE_BALANCES(addressArray, amountArray);
+ operationList.push(operation);
+}
+
+export function batch_reduce_withdrawable_balances(addressArray: string[], amountArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_18_BATCH_REDUCE_WITHDRAWABLE_BALANCES(addressArray, amountArray);
+ operationList.push(operation);
+}
+
+export function batch_add_voting_rules(ruleArray: VotingRuleStruct[]) {
+ let operation = OPCODE_ID_19_BATCH_ADD_VOTING_RULES(ruleArray);
+ operationList.push(operation);
+}
+
+export function batch_pay_to_mint_tokens(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[], priceArray: bigint[] | number[], dividendable: bigint) {
+ let operation = OPCODE_ID_20_BATCH_PAY_TO_MINT_TOKENS(addressArray, tokenClassArray, amountArray, priceArray, dividendable);
+ operationList.push(operation);
+}
+
+export function batch_pay_to_transfer_tokens( toAddressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[], priceArray: bigint[] | number[], dividendable: bigint) {
+ let operation = OPCODE_ID_21_BATCH_PAY_TO_TRANSFER_TOKENS(toAddressArray, tokenClassArray, amountArray, priceArray, dividendable);
+ operationList.push(operation);
+}
+
+export function add_emergency(emergencyAddressArray: string[]) {
+ let operation = OPCODE_ID_22_ADD_EMERGENCY(emergencyAddressArray);
+ operationList.push(operation);
+}
+
+export function call_emergency(emergencyAddressArrayIndex: bigint[] | number[]) {
+ let operation = OPCODE_ID_24_CALL_EMERGENCY(emergencyAddressArrayIndex);
+ operationList.push(operation);
+}
+
+export function call_contract_abi(contractAddress: string, abi: string | Uint8Array, value: bigint) {
+ let operation = OPCODE_ID_25_CALL_CONTRACT_ABI(contractAddress, abi, value);
+ operationList.push(operation);
+}
+
+export function pay_cash(amount: bigint, paymentType: bigint, dividendable: bigint) {
+ let operation = OPCODE_ID_26_PAY_CASH(amount, paymentType, dividendable);
+ operationList.push(operation);
+}
+
+export function offer_dividends() {
+ let operation = OPCODE_ID_27_OFFER_DIVIDENDS();
+ operationList.push(operation);
+}
+
+export function set_approval_for_all_operations(address: string) {
+ let operation = OPCODE_ID_29_SET_APPROVAL_FOR_ALL_OPERATIONS(address);
+ operationList.push(operation);
+}
+
+export function batch_burn_tokens_and_refund(tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[], priceArray: bigint[] | number[]) {
+ let operation = OPCODE_ID_30_BATCH_BURN_TOKENS_AND_REFUND(tokenClassArray, amountArray, priceArray);
+ operationList.push(operation);
+}
+
+export function add_storage_string(value: string) {
+ let operation = OPCODE_ID_31_ADD_STORAGE_STRING(value);
+ operationList.push(operation);
+}
+
+export function vote(voteArray: boolean[]) {
+ let operation = OPCODE_ID_32_VOTE(voteArray);
+ operationList.push(operation);
+}
+
+export function execute_pending_program() {
+ let operation = OPCODE_ID_33_EXECUTE_PENDING_PROGRAM();
+ operationList.push(operation);
+}
+
+export function end_emergency() {
+ let operation = OPCODE_ID_34_END_EMERGENCY();
+ operationList.push(operation);
+}
+
+export function upgrade_to_address(newAddress: string) {
+ let operation = OPCODE_ID_35_UPGRADE_TO_ADDRESS(newAddress);
+ operationList.push(operation);
+}
+
+export function confirm_upgrade_from_address(newAddress: string) {
+ let operation = OPCODE_ID_36_CONFIRM_UPGRAED_FROM_ADDRESS(newAddress);
operationList.push(operation);
}
-export function batch_create_token_class(nameArray: string[], tokenIndexArray: bigint[], votingWeightArray: bigint[], dividendWeightArray: bigint[]) {
- let operation = op_batch_create_token_class(nameArray, tokenIndexArray, votingWeightArray, dividendWeightArray);
+export function upgrade_to_the_latest() {
+ let operation = OPCODE_ID_37_UPGRADE_TO_THE_LATEST();
operationList.push(operation);
-}
\ No newline at end of file
+}
+
+// below are the condition nodes
+
+export {
+ batch_op_size_greater_than,
+ batch_op_size_less_than,
+ batch_op_size_in_range,
+ batch_op_size_equals,
+ batch_op_each_target_addresses_equals,
+ batch_op_each_target_addresses_in_list,
+ batch_op_each_target_addresses_in_member_role,
+ batch_op_any_target_address_equals,
+ batch_op_any_target_address_in_list,
+ batch_op_any_target_address_in_member_role,
+ batch_op_each_target_address_to_itself,
+ batch_op_any_target_address_to_itself,
+ batch_op_each_source_address_equals,
+ batch_op_each_source_address_in_list,
+ batch_op_each_source_address_in_member_role,
+ batch_op_any_source_address_equal,
+ batch_op_any_source_address_in_list,
+ batch_op_any_source_address_in_member_role,
+ batch_op_each_source_address_from_itself,
+ batch_op_any_source_address_from_itself,
+ batch_op_each_token_class_equals,
+ batch_op_each_token_class_in_list,
+ batch_op_each_token_class_in_range,
+ batch_op_each_token_class_greater_than,
+ batch_op_each_token_class_less_than,
+ batch_op_total_token_amount_greater_than,
+ batch_op_total_token_amount_less_than,
+ batch_op_total_token_amount_in_range,
+ batch_op_total_token_amount_equals,
+ batch_op_any_token_amount_greater_than,
+ batch_op_any_token_amount_less_than,
+ batch_op_any_token_amount_in_range,
+ batch_op_any_token_amount_equals,
+ batch_op_any_token_class_greater_than,
+ batch_op_any_token_class_less_than,
+ batch_op_any_token_class_in_range,
+ batch_op_any_token_class_equals,
+ batch_op_any_token_class_in_list,
+ batch_op_each_source_address_in_member_role_list,
+ batch_op_any_source_address_in_member_role_list,
+ batch_op_each_target_address_in_member_role_list,
+ batch_op_any_target_address_in_member_role_list,
+ batch_op_each_target_address_withdrawable_cash_greater_than,
+ batch_op_each_target_address_withdrawable_cash_less_than,
+ batch_op_each_target_address_withdrawable_cash_in_range,
+ batch_op_each_target_address_withdrawable_cash_equals,
+ batch_op_any_target_address_withdrawable_cash_greater_than,
+ batch_op_any_target_address_withdrawable_cash_less_than,
+ batch_op_any_target_address_withdrawable_cash_in_range,
+ batch_op_each_target_address_total_voting_weight_greater_than,
+ batch_op_each_target_address_total_voting_weight_less_than,
+ batch_op_each_target_address_total_voting_weight_in_range,
+ batch_op_each_target_address_total_voting_weight_equals,
+ batch_op_any_target_address_total_voting_weight_greater_than,
+ batch_op_any_target_address_total_voting_weight_less_than,
+ batch_op_any_target_address_total_voting_weight_in_range,
+ batch_op_each_target_address_total_dividend_weight_greater_than,
+ batch_op_each_target_address_total_dividend_weight_less_than,
+ batch_op_each_target_address_total_dividend_weight_in_range,
+ batch_op_any_target_address_total_dividend_weight_greater_than,
+ batch_op_any_target_address_total_dividend_weight_less_than,
+ batch_op_any_target_address_total_dividend_weight_in_range,
+ batch_op_each_target_address_owns_token_x_greater_than,
+ batch_op_each_target_address_owns_token_x_less_than,
+ batch_op_each_target_address_owns_token_x_in_range,
+ batch_op_any_target_address_owns_token_x_greater_than,
+ batch_op_any_target_address_owns_token_x_less_than,
+ batch_op_any_target_address_owns_token_x_in_range
+} from "./conditionNodes/Condition_BatchOp";
+
+export {
+ create_token_classes_any_token_dividend_weight_greater_than,
+ create_token_classes_any_token_dividend_weight_less_than,
+ create_token_classes_any_token_dividend_weight_in_range,
+ create_token_classes_any_token_dividend_weight_equals,
+ create_token_classes_any_voting_weight_greater_than,
+ create_token_classes_any_voting_weight_less_than,
+ create_token_classes_any_voting_weight_in_range,
+ create_token_classes_any_voting_weight_equals
+} from "./conditionNodes/Condition_CreateTokenClass";
+
+export {
+ timestamp_greater_than,
+ timestamp_less_than,
+ timestamp_in_range,
+ date_year_greater_than,
+ date_year_less_than,
+ date_year_in_range,
+ date_month_greater_than,
+ date_month_less_than,
+ date_month_in_range,
+ date_day_greater_than,
+ date_day_less_than,
+ date_day_in_range,
+ date_hour_greater_than,
+ date_hour_less_than,
+ date_hour_in_range,
+ address_voting_weight_greater_than,
+ address_voting_weight_less_than,
+ address_voting_weight_in_range,
+ address_dividend_weight_greater_than,
+ address_dividend_weight_less_than,
+ address_dividend_weight_in_range,
+ address_token_x_greater_than,
+ address_token_x_less_than,
+ address_token_x_in_range,
+ total_voting_weight_greater_than,
+ total_voting_weight_less_than,
+ total_voting_weight_in_range,
+ total_dividend_weight_greater_than,
+ total_dividend_weight_less_than,
+ total_dividend_weight_in_range,
+ total_cash_greater_than,
+ total_cash_less_than,
+ total_cash_in_range,
+ total_cash_equals,
+ token_in_list_voting_weight_greater_than,
+ token_in_list_voting_weight_less_than,
+ token_in_list_voting_weight_in_range,
+ token_in_list_dividend_weight_greater_than,
+ token_in_list_dividend_weight_less_than,
+ token_in_list_dividend_weight_in_range,
+ token_in_list_amount_greater_than,
+ token_in_list_amount_less_than,
+ token_in_list_amount_in_range,
+ token_in_list_amount_equals,
+ address_voting_weight_percenrage_greater_than,
+ address_voting_weight_percenrage_less_than,
+ address_voting_weight_percenrage_in_range,
+ address_dividend_weight_percenrage_greater_than,
+ address_dividend_weight_percenrage_less_than,
+ address_dividend_weight_percenrage_in_range
+} from "./conditionNodes/Condition_MachineState";
+
+export { change_member_role_to_any_role_equals, change_member_role_to_any_role_in_list, change_member_role_to_any_role_in_range, change_member_name_to_any_string_in_list, change_member_name_to_any_string_contains } from "./conditionNodes/Condition_MembershipOp";
+
+export { operation_equals, operation_in_list, EnumOpcode } from "./conditionNodes/Condition_Operation";
+
+export {
+ operation_by_operator_since_last_time_greater_than,
+ operation_by_operator_since_last_time_less_than,
+ operation_by_operator_since_last_time_in_range,
+ operation_global_since_last_time_greater_than,
+ operation_global_since_last_time_less_than,
+ operation_global_since_last_time_in_range,
+ operation_by_any_address_in_list_since_last_time_greater_than,
+ operation_by_any_address_in_list_since_last_time_less_than,
+ operation_by_any_address_in_list_since_last_time_in_range,
+ operation_by_each_address_in_list_since_last_time_greater_than,
+ operation_by_each_address_in_list_since_last_time_less_than,
+ operation_by_each_address_in_list_since_last_time_in_range
+} from "./conditionNodes/Condition_OperationLog";
+
+export {
+ operator_name_equals,
+ operator_role_equals,
+ operator_address_equals,
+ operator_role_greater_than,
+ operator_role_less_than,
+ operator_role_in_range,
+ operator_role_in_list,
+ operator_token_x_amount_greater_than,
+ operator_token_x_amount_less_than,
+ operator_token_x_amount_in_range,
+ operator_token_x_amount_equals,
+ operator_token_x_percentage_greater_than,
+ operator_token_x_percentage_less_than,
+ operator_token_x_percentage_in_range,
+ operator_token_x_percentage_equals,
+ operator_voting_weight_greater_than,
+ operator_voting_weight_less_than,
+ operator_voting_weight_in_range,
+ operator_dividend_weight_greater_than,
+ operator_dividend_weight_less_than,
+ operator_dividend_weight_in_range,
+ operator_withdrawable_cash_greater_than,
+ operator_withdrawable_cash_less_than,
+ operator_withdrawable_cash_in_range,
+ operator_withdrawable_dividends_greater_than,
+ operator_withdrawable_dividends_less_than,
+ operator_withdrawable_dividends_in_range,
+ operator_address_in_list
+} from "./conditionNodes/Condition_Operator";
+
+export {
+ enable_any_before_op_plugin_index_in_list,
+ enable_any_after_op_plugin_index_in_list,
+ enable_each_before_op_plugin_index_in_list,
+ enable_each_after_op_plugin_index_in_list,
+ disable_any_before_op_plugin_index_in_list,
+ disable_any_after_op_plugin_index_in_list,
+ disable_each_before_op_plugin_index_in_list,
+ disable_each_after_op_plugin_index_in_list,
+ enable_any_before_op_plugin_index_in_range,
+ enable_any_after_op_plugin_index_in_range,
+ enable_each_before_op_plugin_index_in_range,
+ enable_each_after_op_plugin_index_in_range,
+ disable_any_before_op_plugin_index_in_range,
+ disable_any_after_op_plugin_index_in_range,
+ disable_each_before_op_plugin_index_in_range,
+ disable_each_after_op_plugin_index_in_range,
+ are_all_plugins_before_operation,
+ are_all_plugins_after_operation,
+ is_any_plugin_before_operation,
+ is_any_plugin_after_operation,
+ add_plugin_any_level_equals,
+ add_plugin_any_level_in_list,
+ add_plugin_any_level_in_range,
+ add_plugin_any_level_greater_than,
+ add_plugin_any_level_less_than,
+ add_plugin_any_return_type_equals,
+ add_plugin_any_voting_rule_index_in_list,
+ add_any_voting_rule_is_absolute_majority,
+ add_any_voting_rule_approval_percentage_in_range,
+ add_any_voting_rule_token_class_contains
+} from "./conditionNodes/Condition_PluginAndVoting";
+
+export { program_op_length_greater_than, program_op_length_less_than, program_op_length_in_range, program_op_length_equals, program_contains_op, program_contains_op_in_list, program_every_op_equals, program_every_op_in_list } from "./conditionNodes/Condition_Program";
+
+export { token_x_op_any_price_greater_than, token_x_op_any_price_less_than, token_x_op_any_price_in_range, token_x_op_any_price_equals } from "./conditionNodes/Condition_TokenAndCash";
+
+export {
+ add_withdrawable_balance_any_amount_greater_than,
+ add_withdrawable_balance_any_amount_less_than,
+ add_withdrawable_balance_any_amount_in_range,
+ add_withdrawable_balance_any_amount_equals,
+ reduce_withdrawable_balance_any_amount_greater_than,
+ reduce_withdrawable_balance_any_amount_less_than,
+ reduce_withdrawable_balance_any_amount_in_range,
+ reduce_withdrawable_balance_any_amount_equals
+} from "./conditionNodes/Condition_Withdrawable";
\ No newline at end of file
diff --git a/darc-js/src/SDK/opcodes/op_batch_create_token_class.ts b/darc-js/src/SDK/opcodes/op_batch_create_token_class.ts
deleted file mode 100644
index 1c4a2374..00000000
--- a/darc-js/src/SDK/opcodes/op_batch_create_token_class.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import { ethers } from "ethers";
-import {OperationStruct} from "../../types/basicTypes";
-
-/**
- * @notice Batch Create Token Class Operation
- * @param STRING_ARRAY[] string[] nameArray: the array of the name of the token class to create
- * @param UINT256_2DARRAY[0] uint256[] tokenIndexArray: the array of the token index of the token class to create
- * @param UINT256_2DARRAY[1] uint256[] votingWeightArray: the array of the voting weight of the token class to create
- * @param UINT256_2DARRAY[2] uint256[] dividendWeightArray: the array of the dividend weight of the token class to create
- *
- * ID:2
-*/
-
-export function op_batch_create_token_class(
- nameArray: string[],
- tokenIndexArray: bigint[] | number[],
- votingWeightArray: bigint[] | number[],
- dividendWeightArray: bigint[] | number[]
-): OperationStruct {
- // make sure all parameters are valid and the length of all arrays are the same
- if (nameArray.length != tokenIndexArray.length || nameArray.length != votingWeightArray.length || nameArray.length != dividendWeightArray.length) {
- throw new Error("The length of nameArray, tokenIndexArray, votingWeightArray, dividendWeightArray are different");
- }
- // make sure the length of all arrays are not zero
- if (nameArray.length == 0 || tokenIndexArray.length == 0 || votingWeightArray.length == 0 || dividendWeightArray.length == 0) {
- throw new Error("The length of nameArray, tokenIndexArray, votingWeightArray, dividendWeightArray are zero");
- }
- // make sure name array is valid array of strings
- for (let i = 0; i < nameArray.length; i++) {
- if (typeof nameArray[i] != "string") {
- throw new Error("The nameArray is not a valid array of strings");
- }
- }
- // make sure token index, voting weight and dividend weight array is valid array of bigint or number, and if it is number, convert it to bigint
- for (let i = 0; i < tokenIndexArray.length; i++) {
- if (typeof tokenIndexArray[i] === "number") {
- tokenIndexArray[i] = BigInt(tokenIndexArray[i]);
- }
- if (typeof tokenIndexArray[i] !== "bigint") {
- throw new Error("The tokenIndexArray is not a valid array of bigints");
- }
- }
- for (let i = 0; i < votingWeightArray.length; i++) {
- if (typeof votingWeightArray[i] === "number") {
- votingWeightArray[i] = BigInt(votingWeightArray[i]);
- }
- if (typeof votingWeightArray[i] !== "bigint") {
- throw new Error("The votingWeightArray is not a valid array of bigints");
- }
- }
- for (let i = 0; i < dividendWeightArray.length; i++) {
- if (typeof dividendWeightArray[i] === "number") {
- dividendWeightArray[i] = BigInt(dividendWeightArray[i]);
- }
- if (typeof dividendWeightArray[i] !== "bigint") {
- throw new Error("The dividendWeightArray is not a valid array of bigints");
- }
- }
-
-
-
- //create the operation
- let operation = {
- operatorAddress: "", // address will be filled in later
- opcode: 2, // mint token
- param: {
-
-
- STRING_ARRAY: nameArray,
- BOOL_ARRAY: [],
- VOTING_RULE_ARRAY: [],
-
- PLUGIN_ARRAY: [],
- PARAMETER_ARRAY: [],
- UINT256_2DARRAY: [
- tokenIndexArray,
- votingWeightArray,
- dividendWeightArray
- ],
- ADDRESS_2DARRAY: [],
- BYTES: []
- }
- };
- return operation;
-}
\ No newline at end of file
diff --git a/darc-js/src/SDK/opcodes/op_batch_mint_tokens.ts b/darc-js/src/SDK/opcodes/op_batch_mint_tokens.ts
deleted file mode 100644
index c0d81b09..00000000
--- a/darc-js/src/SDK/opcodes/op_batch_mint_tokens.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { ethers } from "ethers";
-import {OperationStruct} from "../../types/basicTypes";
-
-export function op_batch_mint_tokens(addressArray: string[], tokenClass: bigint[], amountArray: bigint[]): OperationStruct {
- // make sure the length of addressArray and amountArray are the same
- if (addressArray.length != amountArray.length) {
- throw new Error("The length of addressArray and amountArray are different");
- }
- // make sure the length of addressArray and amountArray are not zero
- if (addressArray.length == 0) {
- throw new Error("The length of addressArray and amountArray are zero");
- }
- // make sure address array is valid array of address strings
- for (let i = 0; i < addressArray.length; i++) {
- if (typeof addressArray[i] != "string") {
- throw new Error("The addressArray is not a valid array of address strings");
- }
- if (ethers.utils.isAddress(addressArray[i]) == false) {
- throw new Error("The addressArray is not a valid array of address strings");
- }
- }
-
- // make sure amount array and token class are valid bigints or numbers, and if it is number, convert it to bigint
- for (let i = 0; i < amountArray.length; i++) {
- if (typeof amountArray[i] === "number") {
- amountArray[i] = BigInt(amountArray[i]);
- }
- if (typeof amountArray[i] !== "bigint") {
- throw new Error("The amountArray is not a valid array of bigints");
- }
- }
-
- // make sure token class is valid array of bigints or numbers, and if it is number, convert it to bigint
- for (let i = 0; i < tokenClass.length; i++) {
- if (typeof tokenClass[i] === "number") {
- tokenClass[i] = BigInt(tokenClass[i]);
- }
- if (typeof tokenClass[i] !== "bigint") {
- throw new Error("The tokenClass is not a valid array of bigints");
- }
- }
-
- //create the operation
- let operation = {
- operatorAddress: "",
- opcode: 1, // mint token
- param: {
-
-
- STRING_ARRAY: [],
- BOOL_ARRAY: [],
- VOTING_RULE_ARRAY: [],
-
- PLUGIN_ARRAY: [],
- PARAMETER_ARRAY: [],
- UINT256_2DARRAY: [
- tokenClass,
- amountArray
- ],
- ADDRESS_2DARRAY: [
- addressArray
- ],
- BYTES: []
- }
- };
-
- return operation;
-
-}
\ No newline at end of file
diff --git a/darc-js/src/SDK/opcodes/opcodeTable.ts b/darc-js/src/SDK/opcodes/opcodeTable.ts
new file mode 100644
index 00000000..91b0ae91
--- /dev/null
+++ b/darc-js/src/SDK/opcodes/opcodeTable.ts
@@ -0,0 +1,1535 @@
+import { ethers } from "ethers";
+import {OperationStruct, PluginStruct, VotingRuleStruct, PluginStructWithNode} from "../../types/basicTypes";
+import { toBigIntArray, isValidAddressArray, isValidBigIntOrNumberArray, isValidStringArray, areArriesWithSameLength, isValidBigIntOrNumber } from "./utils";
+
+import { pluginProcessor } from "./pluginProcessor";
+
+enum EnumOpcode {
+
+ /**
+ * @notice Invalid Operation
+ * ID: 0
+ */
+ UNDEFINED = 0,
+
+ /**
+ * @notice Batch Mint Token Operation
+ * @param ADDRESS_2DARRAY[0] address[] toAddressArray: the array of the address to mint new token to
+ * @param UINT256_2DARRAY[0] uint256[] tokenClassArray: the array of the token class index to mint new token from
+ * @param UINT256_2DARRAY[1] uint256[] amountArray: the array of the amount of the token to mint
+ *
+ * ID: 1
+ */
+ BATCH_MINT_TOKENS = 1,
+
+ /**
+ * @notice Batch Create Token Class Operation
+ * @param STRING_ARRAY[] string[] nameArray: the array of the name of the token class to create
+ * @param UINT256_2DARRAY[0] uint256[] tokenIndexArray: the array of the token index of the token class to create
+ * @param UINT256_2DARRAY[1] uint256[] votingWeightArray: the array of the voting weight of the token class to create
+ * @param UINT256_2DARRAY[2] uint256[] dividendWeightArray: the array of the dividend weight of the token class to create
+ *
+ * ID:2
+ */
+ BATCH_CREATE_TOKEN_CLASSES = 2,
+
+ /**
+ * @notice Batch Transfer Token Operation
+ * @param ADDRESS_2DARRAY[0] address[] toAddressArray: the array of the address to transfer token to
+ * @param UINT256_2DARRAY[0] uint256[] tokenClassArray: the array of the token class index to transfer token from
+ * @param UINT256_2DARRAY[1] uint256[] amountArray: the array of the amount of the token to transfer
+ *
+ * ID:3
+ */
+ BATCH_TRANSFER_TOKENS = 3,
+
+ /**
+ * @notice Batch Transfer Token From Addr A to Addr B Operation
+ * @param ADDRESS_2DARRAY[0] address[] fromAddressArray (source): the array of the address to transfer token from
+ * @param ADDRESS_2DARRAY[1] address[] toAddressArray (target): the array of the address to transfer token to
+ * @param UINT256_2DARRAY[0] uint256[] tokenClassArray: the array of the token class index to transfer token from
+ * @param UINT256_2DARRAY[1] uint256[] amountArray: the array of the amount of the token to transfer
+ *
+ * ID:4
+ */
+ BATCH_TRANSFER_TOKENS_FROM_TO = 4,
+
+ /**
+ * @notice Batch Burn Token Operation
+ * @param UINT256_2DARRAY[0] uint256[] tokenClassArray: the array of the token class index to burn token from
+ * @param UINT256_2DARRAY[1] uint256[] amountArray: the array of the amount of the token to burn
+ *
+ * ID:5
+ */
+ BATCH_BURN_TOKENS = 5,
+
+ /**
+ * @notice Batch Burn Token From Addr A Operation
+ * @param ADDRESS_2DARRAY[0] address[] fromAddressArray: the array of the address to burn token from
+ * @param UINT256_2DARRAY[0] uint256[] tokenClassArray: the array of the token class index to burn token from
+ * @param UINT256_2DARRAY[1] uint256[] amountArray: the array of the amount of the token to burn
+ *
+ * ID:6
+ */
+ BATCH_BURN_TOKENS_FROM = 6,
+
+ /**
+ * @notice Batch Add Member Operation
+ * @param ADDRESS_2DARRAY[0] address[] memberAddressArray: the array of the address to add as member
+ * @param UINT256_2DARRAY[0] uint256[] memberRoleArray: the array of the role of the member to add
+ * @param STRING_ARRAY string[] memberNameArray: the array of the name of the member to add
+ *
+ * ID:7
+ */
+ BATCH_ADD_MEMBERSHIPS = 7,
+
+ /**
+ * @notice Batch Suspend Member Operation
+ * @param ADDRESS_2DARRAY[0] address[] memberAddressArray: the array of the address to suspend as member
+ *
+ * ID:8
+ */
+ BATCH_SUSPEND_MEMBERSHIPS = 8,
+
+ /**
+ * @notice Batch Resume Member Operation
+ * @param ADDRESS_2DARRAY[0] address[] memberAddressArray: the array of the address to reinstate as member
+ *
+ * ID:9
+ */
+ BATCH_RESUME_MEMBERSHIPS = 9,
+
+ /**
+ * @notice Batch Change Member Role Operation
+ * @param ADDRESS_2DARRAY[0] address[] memberAddressArray: the array of the address to change role of as member
+ * @param UINT256_2DARRAY[0] uint256[] memberRoleArray: the array of the role of the member to change
+ *
+ * ID:10
+ */
+ BATCH_CHANGE_MEMBER_ROLES = 10,
+
+ /**
+ * @notice Batch Change Member Name Operation
+ * @param ADDRESS_2DARRAY[0] address[] memberAddressArray: the array of the address to change name of as member
+ * @param STRING_ARRAY string[] memberNameArray: the array of the name of the member to change
+ *
+ * ID:11
+ */
+ BATCH_CHANGE_MEMBER_NAMES = 11,
+
+ /**
+ * @notice Batch Add Emergency Agent Operation
+ * @param Plugin[] pluginList: the array of the plugins
+ * ID:12
+ */
+ BATCH_ADD_PLUGINS = 12,
+
+ /**
+ * @notice Batch Enable Plugin Operation
+ * @param UINT256_ARRAY[0] uint256[] pluginIndexArray: the array of the plugins index to enable
+ * @param BOOL_ARRAY bool[] isBeforeOperationArray: the array of the flag to indicate if the plugin is before operation
+ * ID:13
+ */
+ BATCH_ENABLE_PLUGINS = 13,
+
+ /**
+ * @notice Batch Disable Plugin Operation
+ * @param UINT256_ARRAY[0] uint256[] pluginIndexArray: the array of the plugins index to disable
+ * @param BOOL_ARRAY bool[] isBeforeOperationArray: the array of the flag to indicate if the plugin is before operation
+ * ID:14
+ */
+ BATCH_DISABLE_PLUGINS = 14,
+
+ /**
+ * @notice Batch Add and Enable Plugin Operation
+ * @param Plugin[] pluginList: the array of the plugins
+ * ID:15
+ */
+ BATCH_ADD_AND_ENABLE_PLUGINS = 15,
+
+ /**
+ * @notice Batch Set Parameter Operation
+ * @param MachineParameter[] parameterNameArray: the array of the parameter name
+ * @param UINT256_2DARRAY[0] uint256[] parameterValueArray: the array of the parameter value
+ * ID:16
+ */
+ BATCH_SET_PARAMETERS = 16,
+
+ /**
+ * @notice Batch Add Withdrawable Balance Operation
+ * @param ADDRESS_2DARRAY[0] addressArray: the array of the address to add withdrawable balance
+ * @param UINT256_2DARRAY[0] amountArray: the array of the amount to add withdrawable balance
+ * ID:17
+ */
+ BATCH_ADD_WITHDRAWABLE_BALANCES = 17,
+
+ /**
+ * @notice Batch Reduce Withdrawable Balance Operation
+ * @param ADDRESS_2DARRAY[0] addressArray: the array of the address to substract withdrawable balance
+ * @param UINT256_2DARRAY[0] amountArray: the array of the amount to substract withdrawable balance
+ * ID:18
+ */
+ BATCH_REDUCE_WITHDRAWABLE_BALANCES = 18,
+
+ /**
+ * @notice Batch Add Voting Rules
+ * @param VotingRule[] votingRuleList: the array of the voting rules
+ * ID:19
+ */
+ BATCH_ADD_VOTING_RULES = 19,
+
+
+ /**
+ * @notice Batch Pay to Mint Tokens Operation
+ * @param ADDRESS_2DARRAY[0] address[] addressArray: the array of the address to mint tokens
+ * @param UINT256_2DARRAY[0] uint256[] tokenClassArray: the array of the token class index to mint tokens
+ * @param UINT256_2DARRAY[1] uint256[] amountArray: the array of the amount to mint tokens
+ * @param UINT256_2DARRAY[2] uint256[] priceArray: the price of each token class to mint
+ * @param UINT256_2DARRAY[3] uint256[1] dividendableFlag: the flag to indicate if the payment is dividendable. 1 for yes (pay for purchase), 0 for no (pay for investment)
+ * ID:20
+ */
+ BATCH_PAY_TO_MINT_TOKENS = 20,
+
+ /**
+ * @notice Pay some cash to transfer tokens (can be used as product coins)
+ * @param ADDRESS_2DARRAY[0] address[] toAddressArray: the array of the address to transfer token to
+ * @param UINT256_2DARRAY[0] uint256[] tokenClassArray: the array of the token class index to transfer token from
+ * @param UINT256_2DARRAY[1] uint256[] amountArray: the array of the amount of the token to transfer
+ * @param UINT256_2DARRAY[2] uint256[] priceArray: the price of each token class to transfer
+ * @ param UINT256_2DARRAY[3] uint256[1] dividendableFlag: the flag to indicate if the payment is dividendable. 1 for yes (pay for purchase), 0 for no (pay for investment)
+ * ID:21
+ */
+ BATCH_PAY_TO_TRANSFER_TOKENS = 21,
+
+ /**
+ * @notice Add an array of address as emergency agents
+ * (can be used as product NFTs with a new unique token class)
+ * @param ADDRESS_2DARRAY[0] address[] The array of the address to add as emergency agents
+ * ID:22
+ */
+ ADD_EMERGENCY = 22,
+
+ /**
+ * @notice Reserved ID 23 DO NOT USE
+ * ID:23
+ */
+ RESERVED_ID_23 = 23,
+
+ /**
+ * @notice Call emergency agents to handle emergency situations
+ * @param UINT256_2DARRAY[0] address[] addressArray: the array of the emergency agents index to call
+ * ID:24
+ */
+ CALL_EMERGENCY = 24,
+
+
+ /**
+ * @notice Call a contract with the given abi
+ * @param ADDRESS_2D[0][0] address contractAddress: the address of the contract to call
+ * @param bytes abi the encodedWithSignature abi of the function to call
+ * @param UINT256_2DARRAY[0][0] uint256 the value to send to the contract
+ * ID:25
+ */
+ CALL_CONTRACT_ABI = 25,
+
+ /**
+ * @notice Pay some cash
+ * @param uint256 amount: the amount of cash to pay
+ * @param uint256 paymentType: the type of cash to pay, 0 for ethers/matic/original tokens
+ * 1 for USDT, 2 for USDC (right now only 0 is supported), 3 for DAI ...
+ * @param uint256 dividendable: the flag to indicate if the payment is dividendable,
+ * 0 for no (pay for investment), 1 for yes (pay for purchase)
+ * ID:26
+ */
+ PAY_CASH = 26,
+
+ /**
+ * @notice Calculate the dividends and offer to token holders
+ * by adding the dividends to the withdrawable balance of each token holder
+ *
+ * ID:27
+ */
+ OFFER_DIVIDENDS = 27,
+
+ /**
+ * @notice Reserved ID 28 DO NOT USE
+ * ID:28
+ */
+ RESERVED_ID_28 = 28,
+
+ /**
+ * @notice Set the approval for all transfer operations by address
+ * @paran address: the address to set approval for all transfer operations
+ * ADDRESS_2DARRAY[0][0] targetAddress
+ * ID:29
+ */
+ SET_APPROVAL_FOR_ALL_OPERATIONS = 29,
+
+
+ /**
+ * @notice Batch Burn tokens and Refund
+ * @param UINT256_2DARRAY[0] uint256[] tokenClassArray: the array of the token class index to burn tokens from
+ * @param UINT256_2DARRAY[1] uint256[] amountArray: the array of the amount of the token to burn
+ * @param UINT256_2DARRAY[2] uint256[] priceArray: the price of each token class to burn
+ * ID:30
+ */
+ BATCH_BURN_TOKENS_AND_REFUND = 30,
+
+ /**
+ * @notice Add storage IPFS hash to the storage list permanently
+ * @paran STRING_ARRAY[0][0] text: the string text to add to the storage list
+ * ID:31
+ */
+ ADD_STORAGE_STRING = 31,
+
+
+ /**
+ * Below are two operations than can be used during voting pending process
+ */
+
+ /**
+ * @notice Vote for a voting pending program
+ * @param bool[] voteArray: the array of the vote for each program
+ * ID:32
+ */
+ VOTE = 32,
+
+ /**
+ * @notice Execute a program that has been voted and approved
+ * ID:33
+ */
+ EXECUTE_PENDING_PROGRAM = 33,
+
+ /**
+ * @notice Emergency mode termination. Emergency agents cannot do anything after this operation
+ * ID:34
+ */
+ END_EMERGENCY = 34,
+
+ /**
+ * @notice Upgrade the contract to a new contract address
+ * @param ADDRESS_2DARRAY[0][0] The address of the new contract
+ * ID:35
+ */
+ UPGRADE_TO_ADDRESS = 35,
+
+ /**
+ * @notice Accepting current DARCs to be upgraded from the old contract address
+ * @param ADDRESS_2DARRAY[0][0] The address of the old contract
+ * ID:36
+ */
+ CONFIRM_UPGRAED_FROM_ADDRESS = 36,
+
+ /**
+ * @notice Upgrade the contract to the latest version
+ * ID:37
+ */
+ UPGRADE_TO_THE_LATEST = 37,
+}
+
+
+
+function OPCODE_ID_1_BATCH_MINT_TOKENS(
+ addressArray: string[],
+ tokenClassArray: bigint[] | number[],
+ amountArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure the length of addressArray, tokenClassArray, amountArray are the same and not empty
+ if (addressArray.length != tokenClassArray.length || addressArray.length != amountArray.length) {
+ throw new Error("The length of addressArray, tokenClassArray, amountArray are different");
+ }
+ if (addressArray.length == 0 || tokenClassArray.length == 0 || amountArray.length == 0) {
+ throw new Error("The length of addressArray, tokenClassArray, amountArray are zero");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 1, // mint token
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(tokenClassArray),
+ toBigIntArray(amountArray)
+ ],
+ ADDRESS_2DARRAY: [
+ addressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_2_BATCH_CREATE_TOKEN_CLASSES(
+ nameArray: string[],
+ tokenIndexArray: bigint[] | number[],
+ votingWeightArray: bigint[] | number[],
+ dividendWeightArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure the length of all arrays are the same and not empty
+ if (nameArray.length != tokenIndexArray.length || nameArray.length != votingWeightArray.length || nameArray.length != dividendWeightArray.length) {
+ throw new Error("The length of nameArray, tokenIndexArray, votingWeightArray, dividendWeightArray are different");
+ }
+ if (nameArray.length == 0 || tokenIndexArray.length == 0 || votingWeightArray.length == 0 || dividendWeightArray.length == 0) {
+ throw new Error("The length of nameArray, tokenIndexArray, votingWeightArray, dividendWeightArray are zero");
+ }
+ // make sure name array is valid array of strings
+ if (!isValidStringArray(nameArray)) {
+ throw new Error("The nameArray is not a valid array of strings");
+ }
+ // make sure token index, voting weight and dividend weight array is valid array of bigint or number, and if it is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(tokenIndexArray)) {
+ throw new Error("The tokenIndexArray is not a valid array of bigints");
+ }
+ if (!isValidBigIntOrNumberArray(votingWeightArray)) {
+ throw new Error("The votingWeightArray is not a valid array of bigints");
+ }
+ if (!isValidBigIntOrNumberArray(dividendWeightArray)) {
+ throw new Error("The dividendWeightArray is not a valid array of bigints");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 2, // mint token
+ param: {
+ STRING_ARRAY: nameArray,
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(tokenIndexArray),
+ toBigIntArray(votingWeightArray),
+ toBigIntArray(dividendWeightArray)
+ ],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_3_BATCH_TRANSFER_TOKENS(
+ toAddressArray: string[],
+ tokenClassArray: bigint[] | number[],
+ amountArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure the length of the array is the same and not empty
+ if (toAddressArray.length != tokenClassArray.length || toAddressArray.length != amountArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in token class array or amount array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(tokenClassArray)) {
+ throw new Error("Invalid token class array");
+ }
+ if (!isValidBigIntOrNumberArray(amountArray)) {
+ throw new Error("Invalid amount array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 3, // opcode for batch transfer token
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(tokenClassArray),
+ toBigIntArray(amountArray)
+ ],
+ ADDRESS_2DARRAY: [
+ toAddressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_4_BATCH_TRANSFER_TOKENS_FROM_TO(
+ fromAddressArray: string[],
+ toAddressArray: string[],
+ tokenClassArray: bigint[] | number[],
+ amountArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (fromAddressArray.length != toAddressArray.length || fromAddressArray.length != tokenClassArray.length || fromAddressArray.length != amountArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in token class array or amount array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(tokenClassArray)) {
+ throw new Error("Invalid token class array");
+ }
+ if (!isValidBigIntOrNumberArray(amountArray)) {
+ throw new Error("Invalid amount array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 4,
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(tokenClassArray),
+ toBigIntArray(amountArray)
+ ],
+ ADDRESS_2DARRAY: [
+ fromAddressArray,
+ toAddressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_5_BATCH_BURN_TOKENS(
+ tokenClassArray: bigint[] | number[],
+ amountArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (tokenClassArray.length != amountArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in token class array or amount array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(tokenClassArray)) {
+ throw new Error("Invalid token class array");
+ }
+ if (!isValidBigIntOrNumberArray(amountArray)) {
+ throw new Error("Invalid amount array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 5, // burn token
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(tokenClassArray),
+ toBigIntArray(amountArray)
+ ],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_6_BATCH_BURN_TOKENS_FROM(
+ fromAddressArray: string[],
+ tokenClassArray: bigint[] | number[],
+ amountArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (fromAddressArray.length != tokenClassArray.length || fromAddressArray.length != amountArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in token class array or amount array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(tokenClassArray)) {
+ throw new Error("Invalid token class array");
+ }
+ if (!isValidBigIntOrNumberArray(amountArray)) {
+ throw new Error("Invalid amount array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 6, // burn token
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(tokenClassArray),
+ toBigIntArray(amountArray)
+ ],
+ ADDRESS_2DARRAY: [
+ fromAddressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_7_BATCH_ADD_MEMBERSHIPS(
+ memberAddressArray: string[],
+ memberRoleArray: bigint[] | number[],
+ memberNameArray: string[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (memberAddressArray.length != memberRoleArray.length || memberAddressArray.length != memberNameArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in member role array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(memberRoleArray)) {
+ throw new Error("Invalid member role array");
+ }
+ // make sure member name array is valid array of strings
+ if (!isValidStringArray(memberNameArray)) {
+ throw new Error("The memberNameArray is not a valid array of strings");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 7, // add membership
+ param: {
+ STRING_ARRAY: memberNameArray,
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(memberRoleArray)
+ ],
+ ADDRESS_2DARRAY: [
+ memberAddressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_8_BATCH_SUSPEND_MEMBERSHIPS(
+ memberAddressArray: string[]
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (memberAddressArray.length == 0) {
+ throw new Error("Invalid array length");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 8, // suspend membership
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [
+ memberAddressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_9_BATCH_RESUME_MEMBERSHIPS(
+ memberAddressArray: string[]
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (memberAddressArray.length == 0) {
+ throw new Error("Invalid array length");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 9, // resume membership
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [
+ memberAddressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_10_BATCH_CHANGE_MEMBER_ROLES(
+ memberAddressArray: string[],
+ memberRoleArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (memberAddressArray.length != memberRoleArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in member role array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(memberRoleArray)) {
+ throw new Error("Invalid member role array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 10, // change member roles
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(memberRoleArray)
+ ],
+ ADDRESS_2DARRAY: [
+ memberAddressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_11_BATCH_CHANGE_MEMBER_NAMES(
+ memberAddressArray: string[],
+ memberNameArray: string[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (memberAddressArray.length != memberNameArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // make sure member name array is valid array of strings
+ if (!isValidStringArray(memberNameArray)) {
+ throw new Error("The memberNameArray is not a valid array of strings");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 11, // change member names
+ param: {
+ STRING_ARRAY: memberNameArray,
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [
+ memberAddressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_12_BATCH_ADD_PLUGINS(
+ pluginList: PluginStruct[] | PluginStructWithNode[]
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (pluginList.length == 0) {
+ throw new Error("Invalid array length");
+ }
+
+ const processedPluginArray = pluginProcessor(pluginList);
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 12, // add plugins
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: processedPluginArray,
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_13_BATCH_ENABLE_PLUGINS(
+ pluginIndexArray: bigint[] | number[],
+ isBeforeOperationArray: boolean[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (pluginIndexArray.length != isBeforeOperationArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in plugin index array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(pluginIndexArray)) {
+ throw new Error("Invalid plugin index array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 13, // enable plugins
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: isBeforeOperationArray,
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(pluginIndexArray)
+ ],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_14_BATCH_DISABLE_PLUGINS(
+ pluginIndexArray: bigint[] | number[],
+ isBeforeOperationArray: boolean[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (pluginIndexArray.length != isBeforeOperationArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in plugin index array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(pluginIndexArray)) {
+ throw new Error("Invalid plugin index array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 14, // disable plugins
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: isBeforeOperationArray,
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(pluginIndexArray)
+ ],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_15_BATCH_ADD_AND_ENABLE_PLUGINS(
+ pluginList: PluginStruct[] | PluginStructWithNode[]
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (pluginList.length == 0) {
+ throw new Error("Invalid array length");
+ }
+
+ const processedPluginArray = pluginProcessor(pluginList);
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 15, // add and enable plugins
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: processedPluginArray,
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_16_BATCH_SET_PARAMETERS(
+ parameterNameArray: bigint[] | number[],
+ parameterValueArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (parameterNameArray.length != parameterValueArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in parameter value array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(parameterValueArray)) {
+ throw new Error("Invalid parameter value array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 16, // set parameters
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: parameterNameArray,
+ UINT256_2DARRAY: [parameterValueArray],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_17_BATCH_ADD_WITHDRAWABLE_BALANCES(
+ addressArray: string[],
+ amountArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (addressArray.length != amountArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in amount array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(amountArray)) {
+ throw new Error("Invalid amount array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 17, // add withdrawable balances
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(amountArray)
+ ],
+ ADDRESS_2DARRAY: [
+ addressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_18_BATCH_REDUCE_WITHDRAWABLE_BALANCES(
+ addressArray: string[],
+ amountArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (addressArray.length != amountArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in amount array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(amountArray)) {
+ throw new Error("Invalid amount array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 18, // reduce withdrawable balances
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(amountArray)
+ ],
+ ADDRESS_2DARRAY: [
+ addressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_19_BATCH_ADD_VOTING_RULES(
+ votingRuleList: VotingRuleStruct[]
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (votingRuleList.length == 0) {
+ throw new Error("Invalid array length");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 19, // add voting rules
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: votingRuleList,
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_20_BATCH_PAY_TO_MINT_TOKENS(
+ addressArray: string[],
+ tokenClassArray: bigint[] | number[],
+ amountArray: bigint[] | number[],
+ priceArray: bigint[] | number[],
+ dividendableFlag: bigint
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (addressArray.length != tokenClassArray.length || addressArray.length != amountArray.length || addressArray.length != priceArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in token class array, amount array or price array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(tokenClassArray)) {
+ throw new Error("Invalid token class array");
+ }
+ if (!isValidBigIntOrNumberArray(amountArray)) {
+ throw new Error("Invalid amount array");
+ }
+ if (!isValidBigIntOrNumberArray(priceArray)) {
+ throw new Error("Invalid price array");
+ }
+ if (!isValidBigIntOrNumberArray([dividendableFlag])) {
+ throw new Error("Invalid dividendable flag");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 20, // pay to mint tokens
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(tokenClassArray),
+ toBigIntArray(amountArray),
+ toBigIntArray(priceArray),
+ toBigIntArray([dividendableFlag])
+ ],
+ ADDRESS_2DARRAY: [
+ addressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_21_BATCH_PAY_TO_TRANSFER_TOKENS(
+ toAddressArray: string[],
+ tokenClassArray: bigint[] | number[],
+ amountArray: bigint[] | number[],
+ priceArray: bigint[] | number[],
+ dividendableFlag: bigint
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (toAddressArray.length != tokenClassArray.length || toAddressArray.length != amountArray.length || toAddressArray.length != priceArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in token class array, amount array or price array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(tokenClassArray)) {
+ throw new Error("Invalid token class array");
+ }
+ if (!isValidBigIntOrNumberArray(amountArray)) {
+ throw new Error("Invalid amount array");
+ }
+ if (!isValidBigIntOrNumberArray(priceArray)) {
+ throw new Error("Invalid price array");
+ }
+ if (!isValidBigIntOrNumberArray([dividendableFlag])) {
+ throw new Error("Invalid dividendable flag");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 21, // pay to transfer tokens
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(tokenClassArray),
+ toBigIntArray(amountArray),
+ toBigIntArray(priceArray),
+ toBigIntArray([dividendableFlag])
+ ],
+ ADDRESS_2DARRAY: [
+ toAddressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_22_ADD_EMERGENCY(
+ addressArray: string[]
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (addressArray.length == 0) {
+ throw new Error("Invalid array length");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 22, // add emergency
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [
+ addressArray
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_24_CALL_EMERGENCY(
+ emergencyIndexArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (emergencyIndexArray.length == 0) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in emergency index array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(emergencyIndexArray)) {
+ throw new Error("Invalid emergency index array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 24, // call emergency
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(emergencyIndexArray)
+ ],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_25_CALL_CONTRACT_ABI(
+ contractAddress: string,
+ abiHexStringOrUint8Array: string | Uint8Array,
+ value: bigint
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (contractAddress == "") {
+ throw new Error("Invalid contract address or abi");
+ }
+ // make sure that abi is a valid hex string or Uint8Array
+ if (!ethers.utils.isBytesLike(abiHexStringOrUint8Array)) {
+ throw new Error("Invalid abi, should be a valid hex string or Uint8Array");
+ }
+
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 25, // call contract abi
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [value],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: abiHexStringOrUint8Array
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_26_PAY_CASH(
+ amount: bigint,
+ paymentType: bigint,
+ dividendable: bigint
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (!isValidBigIntOrNumber(amount)) {
+ throw new Error("Invalid amount");
+ }
+ if (!isValidBigIntOrNumber(paymentType)) {
+ throw new Error("Invalid payment type");
+ }
+ if (!isValidBigIntOrNumber(dividendable)) {
+ throw new Error("Invalid dividendable flag");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 26, // pay cash
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [amount, paymentType, dividendable],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_27_OFFER_DIVIDENDS(): OperationStruct {
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 27, // offer dividends
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_29_SET_APPROVAL_FOR_ALL_OPERATIONS(
+ targetAddress: string
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (targetAddress == "") {
+ throw new Error("Invalid target address");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 29, // set approval for all operations
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [
+ [targetAddress]
+ ],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_30_BATCH_BURN_TOKENS_AND_REFUND(
+ tokenClassArray: bigint[] | number[],
+ amountArray: bigint[] | number[],
+ priceArray: bigint[] | number[]
+ ): OperationStruct {
+ // make sure that the length of the array is the same and not empty
+ if (tokenClassArray.length != amountArray.length) {
+ throw new Error("Invalid array length");
+ }
+ // if any element in token class array or amount array is number, convert it to bigint
+ if (!isValidBigIntOrNumberArray(tokenClassArray)) {
+ throw new Error("Invalid token class array");
+ }
+ if (!isValidBigIntOrNumberArray(amountArray)) {
+ throw new Error("Invalid amount array");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 30, // burn token and refund
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [
+ toBigIntArray(tokenClassArray),
+ toBigIntArray(amountArray)
+ ],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_31_ADD_STORAGE_STRING(
+ text: string
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (text == "") {
+ throw new Error("Invalid text");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 31, // add storage string
+ param: {
+ STRING_ARRAY: [text],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_32_VOTE(
+ voteArray: boolean[]
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (voteArray.length == 0) {
+ throw new Error("Invalid array length");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 32, // vote
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: voteArray,
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_33_EXECUTE_PENDING_PROGRAM(): OperationStruct {
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 33, // execute pending program
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_34_END_EMERGENCY(): OperationStruct {
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 34, // end emergency
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_35_UPGRADE_TO_ADDRESS(
+ newContractAddress: string
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (newContractAddress == "") {
+ throw new Error("Invalid new contract address");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 35, // upgrade to address
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [newContractAddress],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_36_CONFIRM_UPGRAED_FROM_ADDRESS(
+ oldContractAddress: string
+ ): OperationStruct {
+ // make sure that the length of the array is not empty
+ if (oldContractAddress == "") {
+ throw new Error("Invalid old contract address");
+ }
+
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 36, // confirm upgrade from address
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY: [oldContractAddress],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+function OPCODE_ID_37_UPGRADE_TO_THE_LATEST(): OperationStruct {
+ //create the operation
+ const operation = {
+ operatorAddress: "",
+ opcode: 37, // upgrade to the latest version
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+
+ PLUGIN_ARRAY: [],
+ PARAMETER_ARRAY:[],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ };
+ return operation;
+}
+
+// export all functions
+export {
+ EnumOpcode,
+ OPCODE_ID_1_BATCH_MINT_TOKENS,
+ OPCODE_ID_2_BATCH_CREATE_TOKEN_CLASSES,
+ OPCODE_ID_3_BATCH_TRANSFER_TOKENS,
+ OPCODE_ID_4_BATCH_TRANSFER_TOKENS_FROM_TO,
+ OPCODE_ID_5_BATCH_BURN_TOKENS,
+ OPCODE_ID_6_BATCH_BURN_TOKENS_FROM,
+ OPCODE_ID_7_BATCH_ADD_MEMBERSHIPS,
+ OPCODE_ID_8_BATCH_SUSPEND_MEMBERSHIPS,
+ OPCODE_ID_9_BATCH_RESUME_MEMBERSHIPS,
+ OPCODE_ID_10_BATCH_CHANGE_MEMBER_ROLES,
+ OPCODE_ID_11_BATCH_CHANGE_MEMBER_NAMES,
+ OPCODE_ID_12_BATCH_ADD_PLUGINS,
+ OPCODE_ID_13_BATCH_ENABLE_PLUGINS,
+ OPCODE_ID_14_BATCH_DISABLE_PLUGINS,
+ OPCODE_ID_15_BATCH_ADD_AND_ENABLE_PLUGINS,
+ OPCODE_ID_16_BATCH_SET_PARAMETERS,
+ OPCODE_ID_17_BATCH_ADD_WITHDRAWABLE_BALANCES,
+ OPCODE_ID_18_BATCH_REDUCE_WITHDRAWABLE_BALANCES,
+ OPCODE_ID_19_BATCH_ADD_VOTING_RULES,
+ OPCODE_ID_20_BATCH_PAY_TO_MINT_TOKENS,
+ OPCODE_ID_21_BATCH_PAY_TO_TRANSFER_TOKENS,
+ OPCODE_ID_22_ADD_EMERGENCY,
+ OPCODE_ID_24_CALL_EMERGENCY,
+ OPCODE_ID_25_CALL_CONTRACT_ABI,
+ OPCODE_ID_26_PAY_CASH,
+ OPCODE_ID_27_OFFER_DIVIDENDS,
+ OPCODE_ID_29_SET_APPROVAL_FOR_ALL_OPERATIONS,
+ OPCODE_ID_30_BATCH_BURN_TOKENS_AND_REFUND,
+ OPCODE_ID_31_ADD_STORAGE_STRING,
+ OPCODE_ID_32_VOTE,
+ OPCODE_ID_33_EXECUTE_PENDING_PROGRAM,
+ OPCODE_ID_34_END_EMERGENCY,
+ OPCODE_ID_35_UPGRADE_TO_ADDRESS,
+ OPCODE_ID_36_CONFIRM_UPGRAED_FROM_ADDRESS,
+ OPCODE_ID_37_UPGRADE_TO_THE_LATEST
+}
diff --git a/darc-js/src/SDK/opcodes/pluginProcessor.ts b/darc-js/src/SDK/opcodes/pluginProcessor.ts
new file mode 100644
index 00000000..996e7774
--- /dev/null
+++ b/darc-js/src/SDK/opcodes/pluginProcessor.ts
@@ -0,0 +1,32 @@
+import { ConditionNodeStruct, PluginStruct, PluginStructWithNode } from "../../types/basicTypes";
+import { Node} from "../Node";
+
+/**
+ * This is a helper function to convert a plugin array with Node to a plugin array with ConditionNodeStruct
+ * This will make sure that if user passes in a Node-type condition node, it will be converted to a ConditionNodeStruct,
+ * which is the type that the smart contract of DARC entrance interface accepts
+ */
+export function pluginProcessor(pluginArray: PluginStruct[] | PluginStructWithNode[]) : PluginStruct[] {
+ let returnArray: PluginStruct[] = [];
+ for (let i = 0; i < pluginArray.length; i++) {
+
+ if (pluginArray[i].conditionNodes instanceof Node) {
+ const node = (pluginArray[i].conditionNodes) as Node;
+ const serializedNode = node.generateConditionNodeList();
+ returnArray.push({
+ returnType: pluginArray[i].returnType,
+ level: pluginArray[i].level,
+ conditionNodes: serializedNode,
+ votingRuleIndex: pluginArray[i].votingRuleIndex,
+ notes: pluginArray[i].notes,
+ bIsEnabled: pluginArray[i].bIsEnabled,
+ bIsBeforeOperation: pluginArray[i].bIsBeforeOperation,
+ });
+ }
+ else {
+ returnArray.push( (pluginArray[i]) as PluginStruct);
+ }
+ }
+
+ return returnArray;
+}
diff --git a/darc-js/src/SDK/opcodes/utils.ts b/darc-js/src/SDK/opcodes/utils.ts
new file mode 100644
index 00000000..93d0cc31
--- /dev/null
+++ b/darc-js/src/SDK/opcodes/utils.ts
@@ -0,0 +1,78 @@
+import { getAddress } from "ethers/lib/utils";
+
+/**
+ * For any given array of numbers, convert them to BigInts
+ * @param inputArray The array of numbers to be converted
+ * @returns The array of BigInts
+ */
+function toBigIntArray(inputArray: bigint[] | number[]): bigint[] {
+ let outputArray: bigint[] = [];
+ if (typeof inputArray[0] === "bigint") {
+ return inputArray as bigint[];
+ }
+ else if (typeof inputArray[0] === "number") {
+ for (let i = 0; i < inputArray.length; i++) {
+ outputArray.push(BigInt(inputArray[i]));
+ }
+ }
+ return outputArray;
+}
+
+/**
+ * This function checks if the input array is a valid array of bigints or numbers
+ * @param inputArray The array to be checked
+ * @returns True if the array is valid, false otherwise
+ */
+function isValidBigIntOrNumberArray(inputArray: bigint[] | number[]): boolean {
+ if (typeof inputArray[0] === "bigint") {
+ return true;
+ }
+ else if (typeof inputArray[0] === "number") {
+ return true;
+ }
+ return false;
+}
+
+function isValidAddressArray(inputArray: string[]): boolean {
+ if (typeof inputArray[0] === "string") {
+ return true;
+ }
+ return false;
+}
+
+function isValidStringArray(inputArray: string[]): boolean {
+ if (typeof inputArray[0] === "string") {
+ return true;
+ }
+ return false;
+}
+
+function areArriesWithSameLength(...arrays: any[][]): boolean {
+ const length = arrays[0].length;
+ for (let i = 1; i < arrays.length; i++) {
+ if (arrays[i].length !== length) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function isValidBigIntOrNumber(input: any): boolean {
+ if (typeof input === "bigint") {
+ return true;
+ }
+ else if (typeof input === "number") {
+ return true;
+ }
+ return false;
+}
+
+
+export {
+ toBigIntArray,
+ isValidBigIntOrNumberArray,
+ isValidAddressArray,
+ isValidStringArray,
+ isValidBigIntOrNumber,
+ areArriesWithSameLength
+}
\ No newline at end of file
diff --git a/darc-js/src/SDK/runtime.ts b/darc-js/src/SDK/runtime.ts
index 0a0b5f50..1058ea84 100644
--- a/darc-js/src/SDK/runtime.ts
+++ b/darc-js/src/SDK/runtime.ts
@@ -2,16 +2,17 @@ import * as instructions from "./includes";
import { ethers, Contract } from 'ethers';
import { OperationStruct, OperationStructOutput, ProgramStruct } from "../types/basicTypes";
import * as DARC from "../DARC/DARC";
+import { transpile } from "./transpiler";
/**
* This function takes in a string of code and returns a program struct
* @param code The code to be run
* @param wallet The wallet to be used to sign the transaction (provider must be set)
- * @param targetDARCAddress The address of the DARC contract to be used
+ * @param targetDARCAddress The address of the DARC contract to be used, if any. Leave blank if not needed.
* @returns nothing
*/
-export async function run(code:string, wallet:ethers.Wallet, targetDARCAddress:string, darcVersion: DARC.DARC_VERSION = DARC.DARC_VERSION.Latest) {
+export async function run(code:string, wallet:ethers.Wallet, targetDARCAddress:string, darcVersion: DARC.DARC_VERSION = DARC.DARC_VERSION.Latest, delegateToAddress?:string) {
let include = '';
for (const key in instructions) {
include += `let ${key} = instructions.${key};\n`;
@@ -20,7 +21,7 @@ export async function run(code:string, wallet:ethers.Wallet, targetDARCAddress:s
const fn = new Function('instructions', 'ethers', 'wallet', 'address', include + code + '\n return operationList;');
const results = fn(instructions, ethers, wallet, targetDARCAddress);
- const operatorAddress = wallet.address;
+ const operatorAddress = delegateToAddress? delegateToAddress: wallet.address;
const resultList:OperationStruct[] = [...results];
// add operator address to each operation
@@ -47,4 +48,28 @@ export async function run(code:string, wallet:ethers.Wallet, targetDARCAddress:s
// after execution, clear the operation list
instructions.operationList.length = 0;
instructions.programNotes.replace(instructions.programNotes, '');
+}
+
+/**
+ * The core function for transpiling and running a by-law script snippet
+ * @param code The code to be run
+ * @param wallet The wallet to be used to sign the transaction (provider must be set)
+ * @param targetDARCAddress The address of the DARC contract to be used
+ * @param darcVersion The version of the DARC contract to be used
+ * @param delegateToAddress The address of the delegate to be used, if any. Leave blank if not needed.
+ */
+export async function transpileAndRun(
+ code:string,
+ wallet:ethers.Wallet,
+ targetDARCAddress:string,
+ darcVersion: DARC.DARC_VERSION = DARC.DARC_VERSION.Latest,
+ delegateToAddress?:string
+) {
+ const compiledCode = transpile(code);
+ if (delegateToAddress) {
+ await run(compiledCode, wallet, targetDARCAddress, darcVersion, delegateToAddress);
+ }
+ else {
+ await run(compiledCode, wallet, targetDARCAddress, darcVersion);
+ }
}
\ No newline at end of file
diff --git a/darc-js/src/SDK/struct/Plugin.ts b/darc-js/src/SDK/struct/Plugin.ts
deleted file mode 100644
index 3d200311..00000000
--- a/darc-js/src/SDK/struct/Plugin.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { ConditionNode } from "../plugins/ConditionNode";
-import { VotingParameters } from "./voting-param";
-
-class Plugin {
- notes: string;
- conditionExpressionTreeRootNode: ConditionNode;
- restrictionPluginReturnType: RestrictionPluginReturnType;
- votingParameters: VotingParameters | null;
- restrictionPluginType: RestrictionPluginType;
- constructor(inputNotes: string, conditionExpressionTreeRootNode: ConditionNode, restrictionPluginReturnType: RestrictionPluginReturnType, votingParameters: VotingParameters | null, restrictionPluginType: RestrictionPluginType) {
- this.notes = inputNotes;
- this.conditionExpressionTreeRootNode = conditionExpressionTreeRootNode;
- this.restrictionPluginReturnType = restrictionPluginReturnType;
- this.votingParameters = votingParameters;
- this.restrictionPluginType = restrictionPluginType;
- }
-}
-
-enum RestrictionPluginReturnType {
- NO,
- ABSOLUTELY_YES,
- VOTING_NEEDED
-}
-
-enum RestrictionPluginType {
- BEFORE_OPERATION,
- AFTER_OPERATION
-}
-
-export { Plugin, RestrictionPluginReturnType, RestrictionPluginType };
\ No newline at end of file
diff --git a/darc-js/src/SDK/struct/token-operation-map.ts b/darc-js/src/SDK/struct/token-operation-map.ts
deleted file mode 100644
index dfbe86f6..00000000
--- a/darc-js/src/SDK/struct/token-operation-map.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-// TokenOwnershipMap is a map of tokenID to owner address and amount
-
-export class TokenOperations {
- // each tuple is (tokenID, owner_address, amount)
- public arrayTokenOperations: Array<[number, string, number]>;
- public constructor() {
- this.arrayTokenOperations = new Array<[number, string, number]>();
- }
- public add_token_ownership_tuple(tokenID: number, ownerAddress: string, amount: number) {
- this.arrayTokenOperations.push([tokenID, ownerAddress, amount]);
- }
-}
\ No newline at end of file
diff --git a/darc-js/src/SDK/struct/voting-param.ts b/darc-js/src/SDK/struct/voting-param.ts
deleted file mode 100644
index 593be1f7..00000000
--- a/darc-js/src/SDK/struct/voting-param.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export class VotingParameters{
- // how long the voting period is in seconds
- votingPeriodInSeconds: number;
-
- // how many percent of the voting tokens are needed to pass the voting
- votingThresholdInPercentage: number;
-
- // the valid voting token ID list for voting
- // if the voting token ID list is empty, then all tokens are valid
- votingTokenIDList: Array;
-
- constructor(votingPeriodInSeconds: number, votingThresholdInPercentage: number, votingTokenIDList: Array){
- this.votingPeriodInSeconds = votingPeriodInSeconds;
- this.votingThresholdInPercentage = votingThresholdInPercentage;
- this.votingTokenIDList = votingTokenIDList;
- }
-}
\ No newline at end of file
diff --git a/darc-js/src/SDK/transpiler.ts b/darc-js/src/SDK/transpiler.ts
index ea4c248f..00e56ab8 100644
--- a/darc-js/src/SDK/transpiler.ts
+++ b/darc-js/src/SDK/transpiler.ts
@@ -1,4 +1,4 @@
-export function transpiler(sourceCode: string): string {
+export function transpile(sourceCode: string): string {
// compile the source code with babel standalone
const babel = require('@babel/standalone');
@@ -6,30 +6,6 @@ export function transpiler(sourceCode: string): string {
// register the plugin
babel.registerPlugin('overload', require('@jetblack/operator-overloading')); //jetblack_operator_overload);
-
- /*
- babel.registerPlugin(
- '@babel/plugin-proposal-class-properties',
- require('@babel/plugin-proposal-class-properties')
- );
- babel.registerPlugin(
- '@babel/plugin-proposal-private-methods',
- require('@babel/plugin-proposal-private-methods')
- );
-
- function lolizer() {
- return {
- visitor: {
- Identifier(path:any) {
- console.log(JSON.stringify( path.node));
- //path.node.name = "LOL";
- },
- },
- };
- }
-
- babel.registerPlugin("lolizer", lolizer);
- */
// register the preset
@@ -40,7 +16,7 @@ export function transpiler(sourceCode: string): string {
babel.registerPreset('@babel/preset-typescript', require('@babel/preset-typescript'));
// compile the code
- const result = babel.transform(sourceCode, {
+ const result = babel.transform( `'operator-overloading enabled';` + sourceCode, {
plugins: ['overload'], //, '@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-private-methods'],
//['@babel/plugin-proposal-class-properties', { "loose": true }],
//['@babel/plugin-proposal-private-methods', { loose: true }]
@@ -50,7 +26,7 @@ export function transpiler(sourceCode: string): string {
sourceType: 'script'
});
- console.log(JSON.stringify(babel));
+
- return result.code;
+ return result.code;
}
\ No newline at end of file
diff --git a/darc-js/src/codeGenerator/codeGenerator.ts b/darc-js/src/codeGenerator/codeGenerator.ts
deleted file mode 100644
index 5980950e..00000000
--- a/darc-js/src/codeGenerator/codeGenerator.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export function codeGenerator(){
-
-}
\ No newline at end of file
diff --git a/darc-js/src/darcBinary/DARC-latest.json b/darc-js/src/darcBinary/DARC-latest.json
index ad0f351d..55936243 100644
--- a/darc-js/src/darcBinary/DARC-latest.json
+++ b/darc-js/src/darcBinary/DARC-latest.json
@@ -6,42 +6,93 @@
{
"inputs": [
{
- "internalType": "uint256",
- "name": "idx",
- "type": "uint256"
- }
- ],
- "name": "checkVotingResult",
- "outputs": [
+ "internalType": "string",
+ "name": "haystack",
+ "type": "string"
+ },
{
- "internalType": "enum VotingStatus",
- "name": "",
- "type": "uint8"
+ "internalType": "string",
+ "name": "needle",
+ "type": "string"
}
],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "checkVotingResults",
+ "name": "contains",
"outputs": [
{
- "internalType": "enum VotingStatus[]",
+ "internalType": "bool",
"name": "",
- "type": "uint8[]"
+ "type": "bool"
}
],
- "stateMutability": "view",
+ "stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
- "name": "currentVotingEndTime",
+ "name": "currentMachineState",
"outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256[100]",
+ "name": "latestOperationTimestamp",
+ "type": "uint256[100]"
+ }
+ ],
+ "internalType": "struct OperationLog",
+ "name": "globalOperationLog",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "dividendPermyriadPerTransaction",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "dividendCycleOfTransactions",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "currentCashBalanceForDividends",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "dividendCycleCounter",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "emergencyAgentsAddressList",
+ "type": "address[]"
+ },
+ {
+ "internalType": "string[]",
+ "name": "strStorageList",
+ "type": "string[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "activeEmergencyAgentsAddressList",
+ "type": "address[]"
+ },
+ {
+ "internalType": "bool",
+ "name": "bIsEmergency",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct MachineStateParameters",
+ "name": "machineStateParameters",
+ "type": "tuple"
+ },
{
"internalType": "uint256",
- "name": "",
+ "name": "currentBalance",
"type": "uint256"
}
],
@@ -153,9 +204,9 @@
"type": "uint8"
},
{
- "internalType": "enum EnumConditionExpression",
+ "internalType": "uint256",
"name": "conditionExpression",
- "type": "uint8"
+ "type": "uint256"
},
{
"internalType": "uint256[]",
@@ -209,11 +260,6 @@
"name": "bIsEnabled",
"type": "bool"
},
- {
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
{
"internalType": "bool",
"name": "bIsBeforeOperation",
@@ -315,6 +361,96 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "getDARClogs",
+ "outputs": [
+ {
+ "internalType": "string[]",
+ "name": "",
+ "type": "string[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "timestamp",
+ "type": "uint256"
+ }
+ ],
+ "name": "getDateTime",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "year",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "month",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "day",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "hour",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minute",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "second",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getGlobalOperationLog",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256[100]",
+ "name": "latestOperationTimestamp",
+ "type": "uint256[100]"
+ }
+ ],
+ "internalType": "struct OperationLog",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getLatestVotingItemIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -395,6 +531,32 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ }
+ ],
+ "name": "getOperationLogByAddress",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256[100]",
+ "name": "latestOperationTimestamp",
+ "type": "uint256[100]"
+ }
+ ],
+ "internalType": "struct OperationLog",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [],
"name": "getPluginInfo",
@@ -429,9 +591,9 @@
"type": "uint8"
},
{
- "internalType": "enum EnumConditionExpression",
+ "internalType": "uint256",
"name": "conditionExpression",
- "type": "uint8"
+ "type": "uint256"
},
{
"internalType": "uint256[]",
@@ -485,11 +647,6 @@
"name": "bIsEnabled",
"type": "bool"
},
- {
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
{
"internalType": "bool",
"name": "bIsBeforeOperation",
@@ -530,9 +687,9 @@
"type": "uint8"
},
{
- "internalType": "enum EnumConditionExpression",
+ "internalType": "uint256",
"name": "conditionExpression",
- "type": "uint8"
+ "type": "uint256"
},
{
"internalType": "uint256[]",
@@ -586,11 +743,6 @@
"name": "bIsEnabled",
"type": "bool"
},
- {
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
{
"internalType": "bool",
"name": "bIsBeforeOperation",
@@ -722,311 +874,354 @@
},
{
"inputs": [
- {
- "internalType": "address",
- "name": "member",
- "type": "address"
- }
- ],
- "name": "getWithdrawableCashBalance",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getWithdrawableCashOwnerList",
- "outputs": [
- {
- "internalType": "address[]",
- "name": "",
- "type": "address[]"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "member",
- "type": "address"
- }
- ],
- "name": "getWithdrawableDividendBalance",
- "outputs": [
{
"internalType": "uint256",
- "name": "",
+ "name": "idx",
"type": "uint256"
}
],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getWithdrawableDividendOwnerList",
- "outputs": [
- {
- "internalType": "address[]",
- "name": "",
- "type": "address[]"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "initialOwnerAddress",
+ "name": "getVotingItemsByIndex",
"outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "initialize",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256[]",
- "name": "votingRuleIndices",
- "type": "uint256[]"
- },
{
"components": [
- {
- "internalType": "address",
- "name": "programOperatorAddress",
- "type": "address"
- },
{
"components": [
{
"internalType": "address",
- "name": "operatorAddress",
+ "name": "programOperatorAddress",
"type": "address"
},
- {
- "internalType": "enum EnumOpcode",
- "name": "opcode",
- "type": "uint8"
- },
{
"components": [
{
- "internalType": "string[]",
- "name": "STRING_ARRAY",
- "type": "string[]"
+ "internalType": "address",
+ "name": "operatorAddress",
+ "type": "address"
},
{
- "internalType": "bool[]",
- "name": "BOOL_ARRAY",
- "type": "bool[]"
+ "internalType": "enum EnumOpcode",
+ "name": "opcode",
+ "type": "uint8"
},
{
"components": [
{
- "internalType": "uint256[]",
- "name": "votingTokenClassList",
- "type": "uint256[]"
+ "internalType": "string[]",
+ "name": "STRING_ARRAY",
+ "type": "string[]"
},
{
- "internalType": "uint256",
- "name": "approvalThresholdPercentage",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "votingDurationInSeconds",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "executionPendingDurationInSeconds",
- "type": "uint256"
- },
- {
- "internalType": "bool",
- "name": "bIsEnabled",
- "type": "bool"
- },
- {
- "internalType": "string",
- "name": "notes",
- "type": "string"
- },
- {
- "internalType": "bool",
- "name": "bIsAbsoluteMajority",
- "type": "bool"
- }
- ],
- "internalType": "struct VotingRule[]",
- "name": "VOTING_RULE_ARRAY",
- "type": "tuple[]"
- },
- {
- "components": [
- {
- "internalType": "enum EnumReturnType",
- "name": "returnType",
- "type": "uint8"
- },
- {
- "internalType": "uint256",
- "name": "level",
- "type": "uint256"
+ "internalType": "bool[]",
+ "name": "BOOL_ARRAY",
+ "type": "bool[]"
},
{
"components": [
+ {
+ "internalType": "uint256[]",
+ "name": "votingTokenClassList",
+ "type": "uint256[]"
+ },
{
"internalType": "uint256",
- "name": "id",
+ "name": "approvalThresholdPercentage",
"type": "uint256"
},
{
- "internalType": "enum EnumConditionNodeType",
- "name": "nodeType",
- "type": "uint8"
+ "internalType": "uint256",
+ "name": "votingDurationInSeconds",
+ "type": "uint256"
},
{
- "internalType": "enum EnumLogicalOperatorType",
- "name": "logicalOperator",
- "type": "uint8"
+ "internalType": "uint256",
+ "name": "executionPendingDurationInSeconds",
+ "type": "uint256"
},
{
- "internalType": "enum EnumConditionExpression",
- "name": "conditionExpression",
+ "internalType": "bool",
+ "name": "bIsEnabled",
+ "type": "bool"
+ },
+ {
+ "internalType": "string",
+ "name": "notes",
+ "type": "string"
+ },
+ {
+ "internalType": "bool",
+ "name": "bIsAbsoluteMajority",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct VotingRule[]",
+ "name": "VOTING_RULE_ARRAY",
+ "type": "tuple[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum EnumReturnType",
+ "name": "returnType",
"type": "uint8"
},
{
- "internalType": "uint256[]",
- "name": "childList",
- "type": "uint256[]"
+ "internalType": "uint256",
+ "name": "level",
+ "type": "uint256"
},
{
"components": [
{
- "internalType": "string[]",
- "name": "STRING_ARRAY",
- "type": "string[]"
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
},
{
- "internalType": "uint256[][]",
- "name": "UINT256_2DARRAY",
- "type": "uint256[][]"
+ "internalType": "enum EnumConditionNodeType",
+ "name": "nodeType",
+ "type": "uint8"
},
{
- "internalType": "address[][]",
- "name": "ADDRESS_2DARRAY",
- "type": "address[][]"
+ "internalType": "enum EnumLogicalOperatorType",
+ "name": "logicalOperator",
+ "type": "uint8"
},
{
- "internalType": "bytes",
- "name": "BYTES",
- "type": "bytes"
+ "internalType": "uint256",
+ "name": "conditionExpression",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "childList",
+ "type": "uint256[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "string[]",
+ "name": "STRING_ARRAY",
+ "type": "string[]"
+ },
+ {
+ "internalType": "uint256[][]",
+ "name": "UINT256_2DARRAY",
+ "type": "uint256[][]"
+ },
+ {
+ "internalType": "address[][]",
+ "name": "ADDRESS_2DARRAY",
+ "type": "address[][]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "BYTES",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct NodeParam",
+ "name": "param",
+ "type": "tuple"
}
],
- "internalType": "struct NodeParam",
- "name": "param",
- "type": "tuple"
+ "internalType": "struct ConditionNode[]",
+ "name": "conditionNodes",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "votingRuleIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "notes",
+ "type": "string"
+ },
+ {
+ "internalType": "bool",
+ "name": "bIsEnabled",
+ "type": "bool"
+ },
+ {
+ "internalType": "bool",
+ "name": "bIsBeforeOperation",
+ "type": "bool"
}
],
- "internalType": "struct ConditionNode[]",
- "name": "conditionNodes",
+ "internalType": "struct Plugin[]",
+ "name": "PLUGIN_ARRAY",
"type": "tuple[]"
},
{
- "internalType": "uint256",
- "name": "votingRuleIndex",
- "type": "uint256"
+ "internalType": "enum MachineParameter[]",
+ "name": "PARAMETER_ARRAY",
+ "type": "uint8[]"
},
{
- "internalType": "string",
- "name": "notes",
- "type": "string"
+ "internalType": "uint256[][]",
+ "name": "UINT256_2DARRAY",
+ "type": "uint256[][]"
},
{
- "internalType": "bool",
- "name": "bIsEnabled",
- "type": "bool"
+ "internalType": "address[][]",
+ "name": "ADDRESS_2DARRAY",
+ "type": "address[][]"
},
{
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
- {
- "internalType": "bool",
- "name": "bIsBeforeOperation",
- "type": "bool"
+ "internalType": "bytes",
+ "name": "BYTES",
+ "type": "bytes"
}
],
- "internalType": "struct Plugin[]",
- "name": "PLUGIN_ARRAY",
- "type": "tuple[]"
- },
- {
- "internalType": "enum MachineParameter[]",
- "name": "PARAMETER_ARRAY",
- "type": "uint8[]"
- },
- {
- "internalType": "uint256[][]",
- "name": "UINT256_2DARRAY",
- "type": "uint256[][]"
- },
- {
- "internalType": "address[][]",
- "name": "ADDRESS_2DARRAY",
- "type": "address[][]"
- },
- {
- "internalType": "bytes",
- "name": "BYTES",
- "type": "bytes"
+ "internalType": "struct Param",
+ "name": "param",
+ "type": "tuple"
}
],
- "internalType": "struct Param",
- "name": "param",
- "type": "tuple"
+ "internalType": "struct Operation[]",
+ "name": "operations",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "string",
+ "name": "notes",
+ "type": "string"
}
],
- "internalType": "struct Operation[]",
- "name": "operations",
- "type": "tuple[]"
+ "internalType": "struct Program",
+ "name": "program",
+ "type": "tuple"
},
{
- "internalType": "string",
- "name": "notes",
- "type": "string"
+ "internalType": "uint256[]",
+ "name": "votingRuleIndices",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "powerYes",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "powerNo",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "totalPower",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "votingEndTime",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "executingEndTime",
+ "type": "uint256"
+ },
+ {
+ "internalType": "enum VotingStatus",
+ "name": "votingStatus",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "bIsProgramExecuted",
+ "type": "bool"
}
],
- "internalType": "struct Program",
- "name": "currentProgram",
+ "internalType": "struct VotingItem",
+ "name": "",
"type": "tuple"
}
],
- "name": "initializeVoting",
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "member",
+ "type": "address"
+ }
+ ],
+ "name": "getWithdrawableCashBalance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getWithdrawableCashOwnerList",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "member",
+ "type": "address"
+ }
+ ],
+ "name": "getWithdrawableDividendBalance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getWithdrawableDividendOwnerList",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "initialOwnerAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
@@ -1044,22 +1239,100 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "sandboxMachineState",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256[100]",
+ "name": "latestOperationTimestamp",
+ "type": "uint256[100]"
+ }
+ ],
+ "internalType": "struct OperationLog",
+ "name": "globalOperationLog",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "dividendPermyriadPerTransaction",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "dividendCycleOfTransactions",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "currentCashBalanceForDividends",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "dividendCycleCounter",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address[]",
+ "name": "emergencyAgentsAddressList",
+ "type": "address[]"
+ },
+ {
+ "internalType": "string[]",
+ "name": "strStorageList",
+ "type": "string[]"
+ },
+ {
+ "internalType": "address[]",
+ "name": "activeEmergencyAgentsAddressList",
+ "type": "address[]"
+ },
+ {
+ "internalType": "bool",
+ "name": "bIsEmergency",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct MachineStateParameters",
+ "name": "machineStateParameters",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "currentBalance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [
{
"internalType": "address",
- "name": "voter",
+ "name": "",
"type": "address"
},
{
- "internalType": "bool[]",
- "name": "votes",
- "type": "bool[]"
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
}
],
- "name": "vote",
- "outputs": [],
- "stateMutability": "nonpayable",
+ "name": "voted",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
"type": "function"
},
{
@@ -1188,9 +1461,9 @@
"type": "uint8"
},
{
- "internalType": "enum EnumConditionExpression",
+ "internalType": "uint256",
"name": "conditionExpression",
- "type": "uint8"
+ "type": "uint256"
},
{
"internalType": "uint256[]",
@@ -1244,11 +1517,6 @@
"name": "bIsEnabled",
"type": "bool"
},
- {
- "internalType": "bool",
- "name": "bIsInitialized",
- "type": "bool"
- },
{
"internalType": "bool",
"name": "bIsBeforeOperation",
@@ -1350,8 +1618,8 @@
"type": "function"
}
],
- "bytecode": "0x60808060405234620000195762017aea90816200001f8239f35b600080fdfe6108008060405260043610156200001557600080fd5b600080608052803560e01c918263036ee8501462003eab575081630e5a3b291462003b2257816310ade3ea1462003af05781631797631d1462003a605781631c75255a1462003a0b57816323b65c78146200397b5781632514a6b4146200371f57816341d1a43814620036ec57816356424cf414620036cb5781635c00d98714620036a15781635d0b1849146200367d5781635f1231ea14620035885781635f5d5f0014620034f8578163681ece9d14620034b557816374579b18146200247457816379532bfe14620024505781637daa10ce14620024315781638129fc1c146200201d57816383e4cccf1462001d91578163864f9f7a1462001d4f57816386ad77e214620019d85781638c7a63ae146200195e5781639df9914514620018455781639f36145f1462000577578163a064c4f1146200042c57508063acf80bc414620003ea578063aefca42a14620003c6578063bba510301462000219578063d5a172f214620001ec5763d6a93c51146200018f57600080fd5b34620001e65760805180600319360112620001e3575b6127108110620001bb575b602090604051908152f35b60ff60078260031b01541615620001dd57620001d79062005b81565b620001a5565b620001b0565b80fd5b60805180fd5b34620001e65760805180600319360112620001e35760206001600160a01b03620271265416604051908152f35b34620001e65760805180600319360112620001e3576202712e548091526202712b906020828152600380604060805120015493620002746200025b8662003ffb565b956200026b604051978862003fd9565b80875262003ffb565b8584019190601f19013683376080515b85608051528185528360406080512001548110156200036f576040517f41d1a438000000000000000000000000000000000000000000000000000000008152816004820152602486828281305afa91821562000362576080519262000324575b50620002f1838a62005bed565b90868310156200030e575052620003089062005b81565b62000284565b634e487b7160e01b608051526021600452608051fd5b9091508681813d83116200035a575b6200033f818362003fd9565b81010312620001e6575185811015620001e6579089620002e4565b503d62000333565b6040513d608051823e3d90fd5b84878460405192839281840190828552518091526040840192916080515b8281106200039d57505050500390f35b9193839550908082620003b5600194839751620040f8565b01950191019185949391926200038d565b34620001e65760805180600319360112620001e35760206202712854604051908152f35b34620001e6576020366003190112620001e6576001600160a01b036200040f62003ecd565b166080515262013887602052602060406080512054604051908152f35b34620001e65760209081600319360112620001e6576004356127108110156200055f5790600391821b9060018201549091600481018054946080519481869401905b878510620004fc578862000483888862006fe1565b90156200049257604051908152f35b6084826040519062461bcd60e51b82526004820152603360248201527f73756d566f74696e67576569676874466f72546f6b656e436c6173733a20766f60448201527f74696e67576569676874206f766572666c6f77000000000000000000000000006064820152fd5b9590919293956200055f576200055586620005476001600160a01b03620005286200054f9a8962005f0b565b905490881b1c1693608051948552858c52604060805120549062007088565b989062007003565b62005b81565b939291906200046e565b634e487b7160e01b6080515260326004526024608051fd5b34620001e6576020366003190112620001e657600435608051526202712b602052604060805120604051620005ac8162003f69565b6001600160a01b03825416815260018201918254620005cb8162003ffb565b90620005db604051928362003fd9565b808252602082019460805152608051946020862095905b8282106200067d5762000652868686602083015260405162000625816200061d81600286016200525e565b038262003fd9565b604083015260ff600782015491600960088201549101549060405195869560a0875260a0870190620055c7565b93602086015260408501526200066e60608501838316620040f8565b60081c16151560808301520390f35b6040516200068b8162003f69565b87546001600160a01b0381168252602660ff8260a01c1610156200182d5760a01c60ff166020820152604051620006c28162003f4c565b620006d060018a01620052fc565b8152600289016040518082602082945493848152019060805152608051926020842093905b80601f8301106200165a576200082e94549181811062001643575b81811062001629575b8181106200160f575b818110620015f5575b818110620015dc575b818110620015c2575b818110620015a8575b8181106200158e575b81811062001574575b8181106200155a575b81811062001540575b81811062001526575b8181106200150c575b818110620014f2575b818110620014d8575b818110620014be575b818110620014a4575b8181106200148a575b81811062001470575b81811062001456575b8181106200143c575b81811062001422575b81811062001408575b818110620013ee575b818110620013d4575b818110620013ba575b818110620013a0575b81811062001386575b8181106200136c575b81811062001352575b81811062001338575b1062001327575b50038262003fd9565b6020820152600389018054620008448162003ffb565b9162000854604051938462003fd9565b818352602083019060805152608051906020822091905b83821062001306575050505060408201526004890180546200088d8162003ffb565b916200089d604051938462003fd9565b818352602083019060805152608051906020822091905b8382106200118f57505050506060820152600589016040519081602082549182815201916080515260805190602082205b81601f84011062000e9e5784600997946020979460019a979462000a2b94549181811062000e80575b81811062000e5f575b81811062000e3e575b81811062000e1d575b81811062000dfd575b81811062000ddc575b81811062000dbb575b81811062000d9a575b81811062000d79575b81811062000d58575b81811062000d37575b81811062000d16575b81811062000cf5575b81811062000cd4575b81811062000cb3575b81811062000c92575b81811062000c71575b81811062000c50575b81811062000c2f575b81811062000c0e575b81811062000bed575b81811062000bcc575b81811062000bab575b81811062000b8a575b81811062000b69575b81811062000b48575b81811062000b27575b81811062000b06575b81811062000ae5575b81811062000ac4575b81811062000aa3575b1062000a885750038262003fd9565b608082015262000a3e60068d016200544f565b60a082015262000a5160078d0162005508565b60c0820152600862000a6f8d6200061d60405180948193016200525e565b60e08201526040820152815201970191019095620005f2565b90889160f81c62000a998162004eaa565b8152013862000825565b928a8d9160ff8560f01c1662000ab98162004eaa565b815201930162000a1c565b928a8d9160ff8560e81c1662000ada8162004eaa565b815201930162000a13565b928a8d9160ff8560e01c1662000afb8162004eaa565b815201930162000a0a565b928a8d9160ff8560d81c1662000b1c8162004eaa565b815201930162000a01565b928a8d9160ff8560d01c1662000b3d8162004eaa565b8152019301620009f8565b928a8d9160ff8560c81c1662000b5e8162004eaa565b8152019301620009ef565b928a8d9160ff8560c01c1662000b7f8162004eaa565b8152019301620009e6565b928a8d9160ff8560b81c1662000ba08162004eaa565b8152019301620009dd565b928a8d9160ff8560b01c1662000bc18162004eaa565b8152019301620009d4565b928a8d9160ff8560a81c1662000be28162004eaa565b8152019301620009cb565b928a8d9160ff8560a01c1662000c038162004eaa565b8152019301620009c2565b928a8d9160ff8560981c1662000c248162004eaa565b8152019301620009b9565b928a8d9160ff8560901c1662000c458162004eaa565b8152019301620009b0565b928a8d9160ff8560881c1662000c668162004eaa565b8152019301620009a7565b928a8d9160ff8560801c1662000c878162004eaa565b81520193016200099e565b928a8d9160ff8560781c1662000ca88162004eaa565b815201930162000995565b928a8d9160ff8560701c1662000cc98162004eaa565b81520193016200098c565b928a8d9160ff8560681c1662000cea8162004eaa565b815201930162000983565b928a8d9160ff8560601c1662000d0b8162004eaa565b81520193016200097a565b928a8d9160ff8560581c1662000d2c8162004eaa565b815201930162000971565b928a8d9160ff8560501c1662000d4d8162004eaa565b815201930162000968565b928a8d9160ff8560481c1662000d6e8162004eaa565b81520193016200095f565b928a8d9160ff8560401c1662000d8f8162004eaa565b815201930162000956565b928a8d9160ff8560381c1662000db08162004eaa565b81520193016200094d565b928a8d9160ff8560301c1662000dd18162004eaa565b815201930162000944565b928a8d9160ff8560281c1662000df28162004eaa565b81520193016200093b565b928a8d9160ff85831c1662000e128162004eaa565b815201930162000932565b928a8d9160ff8560181c1662000e338162004eaa565b815201930162000929565b928a8d9160ff8560101c1662000e548162004eaa565b815201930162000920565b928a8d9160ff8560081c1662000e758162004eaa565b815201930162000917565b928a8d9160ff851662000e938162004eaa565b81520193016200090e565b926001610400602092865460ff811662000eb88162004eaa565b825260ff8160081c1662000ecc8162004eaa565b8583015260ff8160101c1662000ee28162004eaa565b604083015260ff8160181c1662000ef98162004eaa565b606083015260ff81861c1662000f0f8162004eaa565b608083015260ff8160281c1662000f268162004eaa565b60a083015260ff81818160301c1662000f3f8162004eaa565b60c09081860152828260381c1662000f578162004eaa565b60e0860152828260401c1662000f6d8162004eaa565b610100860152828260481c1662000f848162004eaa565b610120860152828260501c1662000f9b8162004eaa565b610140860152828260581c1662000fb28162004eaa565b610160860152828260601c1662000fc98162004eaa565b610180860152828260681c1662000fe08162004eaa565b6101a0860152828260701c1662000ff78162004eaa565b6101c0860152828260781c166200100e8162004eaa565b6101e0860152828260801c16620010258162004eaa565b610200860152828260881c166200103c8162004eaa565b610220860152828260901c16620010538162004eaa565b610240860152828260981c166200106a8162004eaa565b610260860152828260a01c16620010818162004eaa565b610280860152828260a81c16620010988162004eaa565b6102a0860152828260b01c16620010af8162004eaa565b6102c0860152828260b81c16620010c68162004eaa565b6102e08601521c16620010d98162004eaa565b61030083015260ff8160c81c16620010f18162004eaa565b61032083015260ff8160d01c16620011098162004eaa565b61034083015260ff8160d81c16620011218162004eaa565b61036083015260ff8160e01c16620011398162004eaa565b61038083015260ff8160e81c16620011518162004eaa565b6103a083015260ff8160f01c16620011698162004eaa565b6103c083015260f81c6200117d8162004eaa565b6103e0820152019401920191620008e5565b60409d9c9b9a999897969d51620011a68162003f4c565b620011b660ff8554168262005435565b60018401546020820152600284018054620011d18162003ffb565b91620011e1604051938462003fd9565b8183526020830190608051526080516020812090915b8383106200127857505050509d9e9798999a9b9c9d6001928260209260406006950152600387015460608201526040516200123b816200061d8160048c016200525e565b608082015260ff6005880154818116151560a0840152818160081c16151560c084015260101c16151560e0820152815201930191019091620008b4565b600760206001926040516200128d8162003f30565b85548152620012d160ff86880154818116620012a98162004eaa565b86850152818160081c16620012be8162004091565b604085015260101c166060830162005442565b620012df600287016200536a565b6080820152620012f26003870162005565565b60a0820152815201920192019190620011f7565b600760206001926200131886620053bf565b8152019301910190916200086b565b60f81c151581526020018d62000825565b92602060019160ff8560f01c16151581520193016200081e565b92602060019160ff8560e81c161515815201930162000815565b92602060019160ff8560e01c16151581520193016200080c565b92602060019160ff8560d81c161515815201930162000803565b92602060019160ff8560d01c1615158152019301620007fa565b92602060019160ff8560c81c1615158152019301620007f1565b92602060019160ff8560c01c1615158152019301620007e8565b92602060019160ff8560b81c1615158152019301620007df565b92602060019160ff8560b01c1615158152019301620007d6565b92602060019160ff8560a81c1615158152019301620007cd565b92602060019160ff8560a01c1615158152019301620007c4565b92602060019160ff8560981c1615158152019301620007bb565b92602060019160ff8560901c1615158152019301620007b2565b92602060019160ff8560881c1615158152019301620007a9565b92602060019160ff8560801c1615158152019301620007a0565b92602060019160ff8560781c161515815201930162000797565b92602060019160ff8560701c16151581520193016200078e565b92602060019160ff8560681c161515815201930162000785565b92602060019160ff8560601c16151581520193016200077c565b92602060019160ff8560581c161515815201930162000773565b92602060019160ff8560501c16151581520193016200076a565b92602060019160ff8560481c161515815201930162000761565b92602060019160ff8560401c161515815201930162000758565b92602060019160ff8560381c16151581520193016200074f565b92602060019160ff8560301c161515815201930162000746565b92602060019160ff8560281c16151581520193016200073d565b92602060019160ff85831c161515815201930162000734565b92602060019160ff8560181c16151581520193016200072b565b92602060019160ff8560101c161515815201930162000722565b92602060019160ff8560081c161515815201930162000719565b92602060019160ff85161515815201930162000710565b916020919350610400600191865460ff81161515825260ff8160081c1615158583015260ff8160101c161515604083015260ff816060828260181c161515818601528282891c1615156080860152828260281c16151560a0860152828260c092828260301c16151584890152828260381c16151560e0890152828260401c161515610100890152828260481c161515610120890152828260501c161515610140890152828260581c1615156101608901521c161515610180860152828260681c1615156101a0860152828260701c1615156101c0860152828260781c1615156101e0860152828260801c161515610200860152828260881c161515610220860152828260901c161515610240860152828260981c161515610260860152828260a01c161515610280860152828260a81c1615156102a0860152828260b01c1615156102c0860152828260b81c1615156102e08601521c16151561030083015260ff8160c81c16151561032083015260ff8160d01c16151561034083015260ff8160d81c16151561036083015260ff8160e01c16151561038083015260ff8160e81c1615156103a083015260ff8160f01c1615156103c083015260f81c15156103e0820152019401920184929391620006f5565b634e487b7160e01b6080515260216004526024608051fd5b6020366003190112620001e6576004356001600160401b038111620001e6576200187490369060040162004430565b6001600160a01b03620018c581835116620018bc6200189d6200189733620178d8565b62005a32565b620018b5620018af86885116620178d8565b62005ab0565b9062005b07565b90331462005b4e565b6080519060208301915b825180518210156200193657906200054f620019309284620018f384339362005bed565b51511614620019296200190a6200189733620178d8565b620018b5620018af8862001920888c5162005bed565b515116620178d8565b9062005b4e565b620018cf565b6200195a6200194586620072a7565b6040519182916020835260208301906200412b565b0390f35b34620001e6576020366003190112620001e6576004356127108110156200055f5760031b6001810154600282015491620019ce6005620019af6006840154936200061d60405180948193016200525e565b604051948594855260208501526080604085015260808401906200412b565b9060608301520390f35b34620001e65760805180600319360112620001e357620138828054620019fe8162003ffb565b9162001a0e604051938462003fd9565b8183526020830190608051527fe5dac618068543225ae1c2f585dbaa37d058ab507104bc7da3da5ab2e5666cc7608051915b83831062001c1157846201388390815462001a5b8162003ffb565b9262001a6b604051948562003fd9565b8184526020840190608051527f9e32270fdbb1cb37df0574dfc18a9a2c56583299a239108c9d137f746b82200a608051915b83831062001ad35762001ac4856200195a8860405193849360408552604085019062005044565b90838203602085015262005044565b60405162001ae18162003f4c565b62001af160ff8454168262005435565b6001830154602082015260028301805462001b0c8162003ffb565b9162001b1c604051938462003fd9565b818352602083019060805152608051906020822091905b83821062001bab575050505060019282602092604060069501526003860154606082015260405162001b6e816200061d8160048b016200525e565b608082015260ff6005870154818116151560a0840152818160081c16151560c084015260101c16151560e082015281520192019201919062001a9d565b6007602060019260405162001bc08162003f30565b8654815262001bdc60ff86890154818116620012a98162004eaa565b62001bea600288016200536a565b608082015262001bfd6003880162005565565b60a082015281520193019101909162001b33565b60405162001c1f8162003f4c565b62001c2f60ff8454168262005435565b6001830154602082015260028301805462001c4a8162003ffb565b9162001c5a604051938462003fd9565b818352602083019060805152608051906020822091905b83821062001ce9575050505060019282602092604060069501526003860154606082015260405162001cac816200061d8160048b016200525e565b608082015260ff6005870154818116151560a0840152818160081c16151560c084015260101c16151560e082015281520192019201919062001a40565b6007602060019260405162001cfe8162003f30565b8654815262001d1a60ff86890154818116620012a98162004eaa565b62001d28600288016200536a565b608082015262001d3b6003880162005565565b60a082015281520193019101909162001c71565b34620001e6576020366003190112620001e6576001600160a01b0362001d7462003ecd565b166080515262013885602052602060406080512054604051908152f35b34620001e657602080600319360112620001e6576004359062001dd2478311156200192962001dc08562006190565b62001dcb4762006190565b9062005c02565b336080515262001e4a6201388580835262001e1f604060805120548511156200192962001dff8762006190565b336080515284875262001e186040608051205462006190565b9062005caa565b336080515280835262001e39846040608051205462006155565b92906200192962001dff8762006190565b3360805152825280604060805120551562001e8c575b5060805180808381949382941562001e82575b3390f115620003625760805180f35b506108fc62001e73565b620138869081549162001e9f8362005d44565b9160805193845b81811062001faa57505062001ebb8462005d44565b918251926001600160401b03841162001f925791839262001edd829562005f95565b01906080515260805192835b83811062001f5657505050505b82811062001f0657505062001e60565b806200054f6001600160a01b0362001f2362001f50948662005bed565b511662001f308362005db5565b90919082549060031b916001600160a01b03809116831b921b1916179055565b62001ef6565b82516001600160a01b03167f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa48201559181019160010162001ee9565b634e487b7160e01b6080515260416004526024608051fd5b62001fb58162005db5565b6001600160a01b03915490826003923392841b1c160362001fe4575b505062001fde9062005b81565b62001ea6565b966200201491839862001ffb62001fde9562005db5565b9054911b1c166200200d828962005bed565b5262005b81565b95908862001fd1565b34620001e65760805180600319360112620001e3575062027126336001600160a01b0319825416179055600190620271298260ff19825416179055604051620020668162003fbd565b60805190526201388280548282558062002391575b50608051526040516200208e8162003fbd565b6080519052608051806200237b57506201388390815481835580620022dc575b5050608051526127106202712a55604051620020ca8162003fa1565b8181526080515b602080821015620021445760405160209291620020ee8262003f30565b60805182526080518183015260805160408301526080516060908184015280608084015260405190620021218262003efe565b80825280838301528060408301528082015260a0830152828501015201620020d1565b83620022c984604051620021588162003fbd565b60805181526040516200216b8162003fbd565b60805181526040516200217e8162003fbd565b6080518152604051620021918162003fbd565b608051815260405191620021a58362003fbd565b608051835260405193620021b98562003efe565b845260208401526040830152606082015260405191620021d98362003f30565b60805183526003602084015260805160408401526080516060840152608083015260a08201526200220a8262005ba7565b52620022168162005ba7565b5062002271604051620022298162003f4c565b6004815284602082015282604082015260805160608201526040516200224f8162003fbd565b608051815260808201528460a08201528460c08201528460e082015262006db8565b60405190620022808262003f4c565b6002825283602083015260408201526080516060820152604051620022a58162003fbd565b608051815260808201528260a08201528260c082015260805160e082015262006e05565b6113886201388b556201388c5560805180f35b60069181830291838304036200236757808491608052527f9e32270fdbb1cb37df0574dfc18a9a2c56583299a239108c9d137f746b82200a908101905b818110620023285750620020ae565b8290608051808255868201556200234260028201620065b3565b6080516003820155620023586004820162006448565b60805160058201550162002319565b80634e487b7160e01b602492526011600452fd5b634e487b7160e01b905260416004526024608051fd5b60069080820290828204036200241d57836080528284527fe5dac618068543225ae1c2f585dbaa37d058ab507104bc7da3da5ab2e5666cc7908101905b818110620023de5750506200207b565b829060805180825587820155620023f860028201620065b3565b60805160038201556200240e6004820162006448565b608051600582015501620023ce565b602484634e487b7160e01b81526011600452fd5b34620001e65760805180600319360112620001e3576020604051338152f35b34620001e65760805180600319360112620001e35760206202712d54604051908152f35b34620001e6576040366003190112620001e6576004356001600160401b038111620001e657620024a990369060040162004152565b6024356001600160401b038111620001e657620024cb90369060040162004430565b620271298054600260ff8216620024e28162004091565b14620034715760ff191660021790556202712e54600181019081106200311a57806202712e5560805190815b84518110156200257157826002620025326200252b848962005bed565b5162014e46565b500154106200254d575b620025479062005b81565b6200250e565b9150620025476002620025656200252b858862005bed565b5001549290506200253c565b50919060805191825b8551811015620025d757620025946200252b828862005bed565b508460038092015410620025b5575b50620025af9062005b81565b6200257a565b819450620025cc6200252b620025af938962005bed565b5001549390620025a3565b508493608051526202712b6020526080519060408220916001600160a01b038251166001600160a01b03198454161783556020820151805191600160401b83116200237b5750600184015482600186015580831062003296575b50608080516001860190525160208082209392015b82821062002bb657505050509060026040620026669301519101620067d9565b62002672835162005d44565b6202712e54608051526202712b6020526080519060056040832001908051926001600160401b0384116200237b5750602090620026b084846200611d565b01906080515260805160208120905b83811062002ba15750505050620026d7835162005d44565b6202712e54608051526202712b6020526080519060046040832001908051926001600160401b0384116200237b57506020906200271584846200611d565b01906080515260805160208120905b83811062002b8c57505050506200273c835162005d44565b906202712e54608051526202712b60205260805160066040822001928051916001600160401b0383116200237b57506020906200277a83866200611d565b0192608051526080519260208420845b83811062002b775750505050620027a2904262007088565b90916202712e5490526202712b602052600760406080512001551562002b33576202712e54608051526202712b6020526008620027ea60406080512092600784015462007088565b91909201551562002aef576202712e54608051526202712b602052600960406080512001600260ff1982541617905562002825815162005d44565b6202712e54608051526202712b60205260805160036040822001918051916001600160401b0383116200237b57506020906200286283856200611d565b0191608051526080519160208320835b83811062002ada5785855b8151811015620028e057806200054f6200289c620028da938562005bed565b516202712e54608051526202712b602052620028c18360036040608051200162005f0b565b90919082549060031b91821b91600019901b1916179055565b6200287d565b50608051905b805182101562002ad4576202712e549182608051526202712b602052620029276200291a8260036040608051200162005f0b565b90549060031b1c62014e46565b505490620029358262005d44565b916080515b81811062002a86575050608051805b835182101562002a51576200295f828562005bed565b5161271090818110156200055f5760031b6001015462002980848762005bed565b51918210156200055f5760066200299d9260031b01549062006fe1565b901562002a0d57620029af9162007088565b919015620029c957620029c29062005b81565b9062002949565b606460405162461bcd60e51b815260206004820152601960248201527f746f74616c566f74696e67506f776572206f766572666c6f77000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152602060248201527f63757272656e74436c617373566f74696e67506f776572206f766572666c6f776044820152fd5b90506200054f91925062002a7f9394608051526202712b602052620028c18360066040608051200162005f0b565b90620028e6565b62002ace9086608051526202712b60205262002abb8162002ab46200291a8760036040608051200162005f0b565b5062005f0b565b90549060031b1c6200200d828762005bed565b6200293a565b60805180f35b60019060208451940193818401550162002872565b606460405162461bcd60e51b815260206004820152601b60248201527f657865637574696e6720656e642074696d65206f766572666c6f7700000000006044820152fd5b606460405162461bcd60e51b815260206004820152601860248201527f766f74696e6720656e642074696d65206f766572666c6f7700000000000000006044820152fd5b6001906020845194019381840155016200278a565b60019060208451940193818401550162002724565b600190602084519401938184015501620026bf565b80516001600160a01b03815116855490602083015160268110156200182d5774ff00000000000000000000000000000000000000007fffffffffffffffffffffff0000000000000000000000000000000000000000009160a01b1692161717855560406001860191015190815190602082519262002c358484620064d6565b019060805152608051906020822091905b83821062003276575050505060208101518051906001600160401b03821162001f92576020600288019162002c7c848462016a33565b019060805152608051916020832090835b8160051c81106200322d5750601f1981168103620031dc575b5050506040820151805191600160401b83116200237b5750600387015482600389015580831062003153575b506080805160038901905251602080822092015b8382106200313257505050506060810151805190600160401b821162001f9257600487015482600489015580831062003095575b506080805160048901905251602080822092015b838210620030745750505050608081015180516001600160401b03811162001f92576020600588019262002d63838562016a33565b0191608051526080519060208220915b8160051c8110620030345750601f198116810362002fd8575b5050506006850160a0820151602081519162002da9838562006564565b0191608051526080516020812090925b82841062002f7257505050506007850160c0820151602081519162002ddf838562006564565b0191608051526080516020812090925b82841062002f03575050505060e001518051906001600160401b03821162001f925762002e2f8262002e25600889015462005221565b600889016200678f565b60805190602091601f841160011462002e88575092826009936020936001966080519262002e7c575b5050600019600383901b1c191690851b1760088801555b0194019101909262002646565b015190508e8062002e58565b600888019052608051602081209291905b601f198516811062002eea575083602093600196938793600997601f1981161062002ed0575b505050811b01600888015562002e6f565b015160001960f88460031b161c191690558e808062002ebf565b9192602060018192868501518155019401920162002e99565b80518051906001600160401b03821162001f925760209062002f2683866200611d565b01836080515260805160208120905b83811062002f5457505050506001602081920192019301929062002def565b60019060206001600160a01b03855116940193818401550162002f35565b80518051906001600160401b03821162001f925760209062002f9583866200611d565b01836080515260805160208120905b83811062002fc357505050506001602081920192019301929062002db9565b60019060208451940193818401550162002fa4565b60805192835b601f1983168303811062002ffc57505060051c01558a808062002d8c565b909360206200302a60019284885191620030168362004eaa565b9060ff809160031b9316831b921b19161790565b9501910162002fde565b608051805b602081106200305057508382015560010162002d73565b949060206200306a60019288855191620030168362004eaa565b9201950162003039565b6006602082620030886001945187620068ac565b0193019101909162002d2e565b60068181020481036200311a5760068381020483036200311a5760048801608051526020608051208360060281015b8260060282018110620030d957505062002d1a565b6006906080518082556001820155620030f560028201620065b3565b60805160038201556200310b6004820162006448565b608051600582015501620030c4565b634e487b7160e01b6080515260116004526024608051fd5b6007602082620031466001945187620168c1565b0193019101909162002ce6565b60078181020481036200311a5760078381020483036200311a5760038801608051526020608051208360070281015b82600702820181106200319757505062002cd2565b80620031a560079262005fed565b6080518060018301558060028301558060038301556004820155620031cd6005820162006448565b60805160068201550162003182565b8392845b601f19831683038110620031fe57505060051c01558b808062002ca6565b90936020620032236001928488511515919060ff809160031b9316831b921b19161790565b95019101620031e0565b84855b602081106200324757508382015560010162002c8d565b949060206200326c6001928885511515919060ff809160031b9316831b921b19161790565b9201950162003230565b60016020826200328983945187620067d9565b0193019101909162002c46565b60098181020481036200311a5760098381020483036200311a5760018501608051526020608051208360090281015b8260090282018110620032da57505062002631565b6080518155620032ed6001820162006497565b6200330360028201805490608051815562016a0b565b600381015460805180600384015581620033ff575b50506004810154608051806004840155816200337b575b5050806200334a600560099301805490608051815562016a0b565b620033586006820162006525565b620033666007820162006525565b620033746008820162006448565b01620032c5565b6006828102048203620033e957506004820160805152602060805120906006028101905b818110156200332f576006906080518082556001820155620033c460028201620065b3565b6080516003820155620033da6004820162006448565b6080516005820155016200339f565b634e487b7160e01b905260116004526024608051fd5b6007828102048203620033e957506003820160805152602060805120906007028101905b818110156200331857806200343a60079262005fed565b6080518060018301558060028301558060038301556004820155620034626005820162006448565b60805160068201550162003423565b606460405162461bcd60e51b815260206004820152601d60248201527f766f74696e6720697320616c726561647920696e2070726f67726573730000006044820152fd5b34620001e6576020366003190112620001e6576004356127108110156200055f57620034eb60046200195a9260031b01620054ac565b60405191829182620040b2565b34620001e65760805180600319360112620001e3576040518062013881918254808252602080920193608051527fcd6f7cece5c70f73af31bb8ed8b80ae1c2a9e5eb261bd5ab2d9374b0c38719c891608051905b82821062003567576200195a85620034eb8189038262003fd9565b83546001600160a01b0316865294850194600193840193909101906200354c565b34620001e657602080600319360112620001e6576001600160a01b03620035ae62003ecd565b604051620035bc8162003efe565b608051815260805184820152606060408201526060608051910152166080515262013880815260406080512060405190620035f78262003efe565b6200367281549160ff83161515845260ff8585019360081c161515835260026040519162003636836200362e81600185016200525e565b038462003fd9565b6040860192835201549260608501938452604051958695818752511515908601525115156040850152516080606085015260a08401906200412b565b905160808301520390f35b34620001e65760805180600319360112620001e35760206202712e54604051908152f35b34620001e6576020366003190112620001e6576020620036c360043562006ee3565b604051908152f35b34620001e65760805180600319360112620001e3576020620036c36200709a565b34620001e6576020366003190112620001e65760206200370e60043562016c12565b6200371d6040518092620040f8565bf35b34620001e657602080600319360112620001e6576004356200374d478211156200192962001dc08462006190565b33608051526201388790818352620037976040608051205482111562001929620037778462006190565b3360805152858752620037906040608051205462006190565b906200631d565b3360805152818352620037df620037b5826040608051205462006155565b919062001929620037c68562006190565b3360805152868852620037906040608051205462006190565b33608051528284526080518080938193604083205581811562003971575b3390f1156200036257336080515281526040608051205415620038205760805180f35b62013888805490620038328262005d44565b9260805192835b818110620039055750506200384e8362005d44565b918251926001600160401b03841162001f925791839262003870829562005f3d565b01906080515260805192835b838110620038c957505050505b8181106200389957505062002ad4565b806200054f6001600160a01b03620038b6620038c3948762005bed565b511662001f308362005d7c565b62003889565b82516001600160a01b03167ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df820155918101916001016200387c565b620039108162005d7c565b6001600160a01b03915490826003923392841b1c16036200393f575b5050620039399062005b81565b62003839565b956200396891839762003956620039399562005d7c565b9054911b1c166200200d828a62005bed565b9490876200392c565b506108fc620037fd565b34620001e65760805180600319360112620001e3576040518062013886918254808252602080920193608051527f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa491608051905b828210620039ea576200195a85620034eb8189038262003fd9565b83546001600160a01b031686529485019460019384019390910190620039cf565b34620001e6576040366003190112620001e657600435602435906001600160a01b038216809203620001e6576127108110156200055f5760039160805152811b01602052602060406080512054604051908152f35b34620001e65760805180600319360112620001e3576040518062013888918254808252602080920193608051527ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df91608051905b82821062003acf576200195a85620034eb8189038262003fd9565b83546001600160a01b03168652948501946001938401939091019062003ab4565b34620001e65760805180600319360112620001e357602060ff6202712954166040519062003b1e8162004091565b8152f35b34620001e6576040366003190112620001e65762003b3f62003ecd565b60249081356001600160401b038111620001e65762003b6390369060040162004021565b91600260ff62027129541662003b798162004091565b0362003e67576202712d5442101562003e23576001600160a01b0382169182608051526202712c906020938285526080519560408720966202712e978854809252875260ff604060805120541662003de05781519481608051526202712b938489526003968760406080512001540362003d7757608051528752608051906040822091528652608051966040882060019889918260ff19825416179055905b62003c235760805180f35b825181101562003d715762003c39818462005bed565b511562003cf7578154806080515284895262003c9c62003c7f62003c668460046040608051200162005f0b565b9054908a1b1c62003c78858a62016a9d565b9062007088565b909260805152868b52620028c18460046040608051200162005f0b565b1562003cb45762003cad9062005b81565b8862003c18565b606488601c896040519262461bcd60e51b845260048401528201527f766f74696e6720666f7220706f776572596573206f766572666c6f77000000006044820152fd5b8154806080515284895262003d1d62003c7f62003c668460046040608051200162005f0b565b1562003d2e5762003cad9062005b81565b606488601b896040519262461bcd60e51b845260048401528201527f766f74696e6720666f7220706f7765724e6f206f766572666c6f7700000000006044820152fd5b62002ad4565b60848960398a6040519262461bcd60e51b845260048401528201527f746865206e756d626572206f6620766f74657320646f6573206e6f74206d617460448201527f636820746865206e756d626572206f6620706f6c6963696573000000000000006064820152fd5b6064876017886040519262461bcd60e51b845260048401528201527f766f7465722068617320616c726561647920766f7465640000000000000000006044820152fd5b60649060176040519162461bcd60e51b8352602060048401528201527f766f74696e6720706572696f642068617320656e6465640000000000000000006044820152fd5b60649060196040519162461bcd60e51b8352602060048401528201527f766f74696e67206973206e6f7420696e2070726f6772657373000000000000006044820152fd5b3462003ec9578160031936011262003ec95760209062027127548152f35b5080fd5b600435906001600160a01b038216820362003ee457565b600080fd5b35906001600160a01b038216820362003ee457565b608081019081106001600160401b0382111762003f1a57604052565b634e487b7160e01b600052604160045260246000fd5b60c081019081106001600160401b0382111762003f1a57604052565b61010081019081106001600160401b0382111762003f1a57604052565b606081019081106001600160401b0382111762003f1a57604052565b60e081019081106001600160401b0382111762003f1a57604052565b604081019081106001600160401b0382111762003f1a57604052565b602081019081106001600160401b0382111762003f1a57604052565b90601f801991011681019081106001600160401b0382111762003f1a57604052565b6001600160401b03811162003f1a5760051b60200190565b3590811515820362003ee457565b81601f8201121562003ee4578035916200403b8362003ffb565b926200404b604051948562003fd9565b808452602092838086019260051b82010192831162003ee4578301905b82821062004077575050505090565b838091620040858462004013565b81520191019062004068565b600411156200409c57565b634e487b7160e01b600052602160045260246000fd5b6020908160408183019282815285518094520193019160005b828110620040da575050505090565b83516001600160a01b031685529381019392810192600101620040cb565b9060038210156200409c5752565b60005b8381106200411a5750506000910152565b818101518382015260200162004109565b90602091620041468151809281855285808601910162004106565b601f01601f1916010190565b81601f8201121562003ee4578035916200416c8362003ffb565b926200417c604051948562003fd9565b808452602092838086019260051b82010192831162003ee4578301905b828210620041a8575050505090565b8135815290830190830162004199565b6001600160401b03811162003f1a57601f01601f191660200190565b81601f8201121562003ee457803590620041ee82620041b8565b92620041fe604051948562003fd9565b8284526020838301011162003ee457816000926020809301838601378301015290565b9080601f8301121562003ee4578135906200423c8262003ffb565b926200424c604051948562003fd9565b828452602092838086019160051b8301019280841162003ee457848301915b8483106200427c5750505050505090565b82356001600160401b03811162003ee4578691620042a084848094890101620041d4565b8152019201916200426b565b9080601f8301121562003ee457813590620042c78262003ffb565b92620042d7604051948562003fd9565b828452602092838086019160051b8301019280841162003ee457848301915b848310620043075750505050505090565b82356001600160401b03811162003ee45786916200432b8484809489010162004152565b815201920191620042f6565b9080601f8301121562003ee457813591620043528362003ffb565b92604092620043648451958662003fd9565b8185526020938486019185600594851b8601019481861162003ee457868101935b8685106200439857505050505050505090565b84356001600160401b03811162003ee457820183603f8201121562003ee4578881013590620043c78262003ffb565b91620043d68751938462003fd9565b808352868b8401918a1b8301019186831162003ee45791878c94929593015b8181106200440e57505082935081520194019362004385565b9193809193956200441f8462003ee9565b8152019101918b93919492620043f5565b6060918161070052806107c052031262003ee457604051620044528162003f69565b8091620044626107005162003ee9565b8252610700516020810135806107e0526001600160401b03811162003ee4576107c051910190601f8201121562003ee457620044a8620044b69135806106e05262003ffb565b604051806106c05262003fd9565b6106c0516106e051905260206106c05101926107c0516106e0519060206107e05161070051019260051b8301011162003ee4576020016106a05290925b6106e05160051b6107e05161070051019060206106a0519183010181101562004e6c57356001600160401b03811162003ee457606091018061074052601f19906107c05103011262003ee4576040516200454d8162003f69565b6200455e6020610740510162003ee9565b81526040610740510135602681101562003ee45760208201526107405160608101356107208190526001600160401b031062003ee45761010090601f19906060810135016107c05103011262003ee457620045c0604051806107a05262003f4c565b6107205161074051016020810135906001600160401b03821162003ee4576020620045f2926107c05192010162004221565b6107a051526107205161074051016040810135906001600160401b03821162003ee457602062004629926107c05192010162004021565b60206107a0510152610720516107405101926001600160401b0360608501351162003ee4576107c051603f6060860135860101121562003ee45762004678602060608601358601013562003ffb565b9462004688604051968762003fd9565b60608501358086016020908101358089526107c0516107205161074051938b01969493019092019160059190911b82016040011162003ee457604001925b61072051610740510160608801359081019088016020013560051b8101604001851015620047d2578435906001600160401b03821162003ee4570160e09182603f19836107c05103011262003ee457604051620047238162003f85565b60408301356001600160401b03811162003ee4576107c0516200474b91850160400162004152565b815260608301356020820152608080840135604083015260a09485850135606084015260c0916200477e83870162004013565b90840152840135946001600160401b03861162003ee45761010060209695620047c292620047b7899860406107c05191850101620041d4565b908601520162004013565b90820152815201930192620046c6565b505095915091935094919460406107a0510152610720516107405101946080860135610780526001600160401b0360808701351162003ee4576107c0519560808101350195603f8701121562003ee45762004831602087013562003ffb565b9462004841604051968762003fd9565b6020878101358088526107c051610780516107205161074051948b01989401019160051b82016040011162003ee4576040909893929897949701935b61078051610720516107405101016040602086013560051b82010186101562004caf578535610760526001600160401b0386351162003ee45761010090603f19908735016107c05103011262003ee45760405193620048dc8562003f4c565b6040610760516107805161072051610740510101010135600681101562003ee45785526060610760516107805161072051610740510101010135602086015261076051610780516107205161074051010101996001600160401b0360808c01351162003ee4576107c051605f60808d01358d0101121562003ee4578a906200496e604060808401358401013562003ffb565b9a6200497e6040519c8d62003fd9565b608083013592830160400135808d526107c051610760516107805161072051610740510101019094019360208e01939160051b85016060011162003ee4579192606001915b6107605161078051610720516107405101010160808f0135908101908f016040013560051b810160600184101562004bb5578335906001600160401b03821162003ee45760c0605f198383016107c05103011262003ee4576040519162004a2a8362003f30565b8181016060810135845260800135600581101562003ee457602084015260a08183010135600481101562003ee4576040840152603d60c08284010135101562003ee45760c0818301013560608401526001600160401b0360e082840101351162003ee4576107c05162004aa99083830160e08101350160600162004152565b60808401526101008183010135916001600160401b03831162003ee45701016080605f19826107c05103011262003ee4578f956040519262004aeb8462003efe565b60608301356001600160401b03811162003ee4576107c05162004b1391850160600162004221565b845260808301356001600160401b03811162003ee4576107c05162004b3d918501606001620042ac565b602085015260a08301356001600160401b03811162003ee4576107c05162004b6a91850160600162004337565b604085015260c0830135936001600160401b03851162003ee45762004b9d60209594606087966107c051920101620041d4565b606082015260a08201528152019301929350620049c3565b509697939c509798939a915050604082015260a091826107605161078051610720516107405101010101356060830152610760516107805161072051610740510101019160c09384840135946001600160401b03861162003ee45762004c2960209695604088976107c051920101620041d4565b608084015260e09162004c5083610760516107805161072051610740510101010162004013565b9084015262004c75610100610760516107805161072051610740510101010162004013565b9083015262004c9a610120610760516107805161072051610740510101010162004013565b9082015281520195019396979291976200487d565b509250969250925060606107a0510152610720516107405101936001600160401b0360a08601351162003ee4576107c0519460a0810135810195603f8701121562003ee45762004d03602087013562003ffb565b9262004d13604051948562003fd9565b6020878101358086526107c051610720516107405193880196930160a0860135019160051b82016040011162003ee457604001935b604060208a013560051b60a086013561072051610740510101010185101562004d86578435600581101562003ee45781526020948501940162004d48565b5096509694939291505060806107a05101526107205161074051019160c09283810135906001600160401b03821162003ee457602062004dcd926107c051920101620042ac565b60a06107a05101526107205161074051019260e09384810135906001600160401b03821162003ee457602062004e0a926107c05192010162004337565b906107a0510152610720516107405101926101008401356001600160401b03811162003ee4576107c05160209562004e4592018601620041d4565b906107a05101526107a05160408201528152019260206106a051016106a0529092620044f3565b50505091906106c05160208201526107005160408101356001600160401b03811162003ee4576107c05160409262004ea59201620041d4565b910152565b600511156200409c57565b90815180825260208080930193019160005b82811062004ed6575050505090565b83518552938101939281019260010162004ec7565b908082519081815260208091019281808460051b8301019501936000915b84831062004f1a5750505050505090565b909192939495848062004f3a600193601f198682030187528a516200412b565b980193019301919493929062004f09565b908082519081815260208091019281808460051b8301019501936000915b84831062004f7a5750505050505090565b909192939495848062004f9a600193601f198682030187528a5162004eb5565b980193019301919493929062004f69565b908082519081815260208091019281808460051b830101950193600080925b85841062004fdc575050505050505090565b9091929380959697601f1983820301855288519082808351928381520192019085905b8082106200502157505050908060019299019401940192959493919062004fca565b919380600192946001600160a01b03875116815201940192018893929162004fff565b90808251808352602080930192600592818084861b8301019601946000915b84831062005075575050505050505090565b90919293949596601f19828203018352875190610100808201835160068110156200409c579083929189945283850151848401528a60409182870151938386015283518091528561012082818801941b8701019401926000905b8282106200513a575050505050928291620051046001956060808501519084015260808085015190848303908501526200412b565b9160a08082015115159083015260c08082015115159083015260e080910151151591015299019301930191959493929062005063565b9193959650919361011f19878203018552855190815181528c820151620051618162004eaa565b8d82015282820151620051748162004091565b8382015260609081830151603d8110156200409c576001938f93836200520f93828796015281620051ff620051ee620051dd6080620051c08189015160c080848a015288019062004eb5565b9560a0809901519881880391015287519080875286019062004eeb565b888701518582038a87015262004f4b565b8a8601518482038c86015262004fab565b930151918184039101526200412b565b9701950192018b9695949391620050cf565b90600182811c9216801562005253575b60208310146200523d57565b634e487b7160e01b600052602260045260246000fd5b91607f169162005231565b9060009291805491620052718362005221565b918282526001938481169081600014620052d8575060011462005295575b50505050565b90919394506000526020928360002092846000945b838610620052c35750505050010190388080806200528f565b805485870183015294019385908201620052aa565b9294505050602093945060ff191683830152151560051b010190388080806200528f565b9081546200530a8162003ffb565b926040936200531c8551918262003fd9565b828152809460208092019260005281600020906000935b8585106200534357505050505050565b600184819284516200535b816200061d818a6200525e565b81520193019401939162005333565b9060405191828154918282526020928383019160005283600020936000905b828210620053a457505050620053a29250038362003fd9565b565b85548452600195860195889550938101939091019062005389565b90604051620053ce8162003f85565b60c060ff60068395620053e1816200536a565b8552600181015460208601526002810154604086015260038101546060860152826004820154161515608086015260405162005426816200061d81600586016200525e565b60a08601520154161515910152565b60068210156200409c5752565b603d8210156200409c5752565b9081546200545d8162003ffb565b926200546d604051948562003fd9565b818452600090815260208082208186015b8484106200548d575050505050565b60018381926200549d856200536a565b8152019201930192906200547e565b9060405191828154918282526020928383019160005283600020936000905b828210620054e457505050620053a29250038362003fd9565b85546001600160a01b031684526001958601958895509381019390910190620054cb565b908154620055168162003ffb565b9262005526604051948562003fd9565b818452600090815260208082208186015b84841062005546575050505050565b60018381926200555685620054ac565b81520192019301929062005537565b9060036060604051620055788162003efe565b620055c381956200558981620052fc565b835262005599600182016200544f565b6020840152620055ac6002820162005508565b60408401526200362e60405180968193016200525e565b0152565b919060608101906001600160a01b03845116815260208401519160606020830152825180915260808201602060808360051b85010194019160005b8181106200562a5750505050604062005627939401519060408184039101526200412b565b90565b90919294607f1985820301845285516001600160a01b03815116825260208101519060268210156200409c57604091602084015201519060606040820152620056828251610100606084015261016083019062004eeb565b602083810151838303605f190160808501528051808452928201929101906000905b80821062005a1757505050604083015190605f198382030160a0840152815180825260208201906020808260051b85010194019260005b82811062005992575050505050606083015190605f198382030160c0840152815190818152602081016020808460051b8401019401926000925b818410620057de575050505050608083015190605f198382030160e0840152602080835192838152019201906000905b808210620057ba57505050620057ad8360209360e0620057966200577e879660a060019a0151605f198683030161010087015262004f4b565b60c0850151848203605f190161012086015262004fab565b92015190610140605f19828503019101526200412b565b9701940192910162005602565b9091926020806001928651620057d08162004eaa565b815201940192019062005745565b9091929394601f9e9d9c9e19828203018452855190815160068110156200409c5781526020820151602082015260408201516101006040830152610100820181518091526101206020818501918360051b8601019301916000905b808210620058a657505050509e9f9d9e82602092620058728493606060019701516060840152608084015183820360808501526200412b565b9160a0810151151560a083015260c0810151151560c083015260e08091015115159101529701940194019293919062005715565b9091929361011f19868203018452845190815181526020820151620058cb8162004eaa565b60208201526040820151620058e08162004091565b6040820152606082015191603d8310156200409c5762005985826020939260019560608695015260a062005924608083015160c0608086015260c085019062004eb5565b9101519160a0818303910152606062005973620059606200594f855160808652608086019062004eeb565b878601518582038987015262004f4b565b6040850151848203604086015262004fab565b9201519060608184039101526200412b565b9601940192019062005839565b9091929394602080600192601f19868203018852885190620059fc620059c1835160e080855284019062004eb5565b8484015185840152604084015160408401526060840151606084015260808401511515608084015260a084015183820360a08501526200412b565b60c092830151151591909201529701950193929101620056db565b909192602080600192865115158152019401920190620056a4565b90620053a2604560405180947f496e76616c69642070726f6772616d20616464726573732e204d73672e73656e60208301527f6465723a20000000000000000000000000000000000000000000000000000000604083015262005a9f815180926020868601910162004106565b810103602581018552018362003fd9565b90620053a26040805180947f2c20616e642070726f6772616d206f70657261746f7220616464726573733a20602083015262005af6815180926020868601910162004106565b810103602081018552018362003fd9565b6020620053a291939293604051948162005b2b879351809286808701910162004106565b820162005b418251809386808501910162004106565b0103808552018362003fd9565b1562005b575750565b62005b7d9060405191829162461bcd60e51b83526020600484015260248301906200412b565b0390fd5b600019811462005b915760010190565b634e487b7160e01b600052601160045260246000fd5b80511562005bb55760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101562005bb55760400190565b80516002101562005bb55760600190565b805182101562005bb55760209160051b010190565b600f620053a2916020949360405195869262005c6062005c528386016021907f496e76616c696420776974686472617720616d6f756e742e20416d6f756e743a8152600160fd1b60208201520190565b918281519485920162004106565b017f2c20616e642062616c616e63653a200000000000000000000000000000000000815262005c99825180936020878501910162004106565b010360101981018552018362003fd9565b6019620053a2916020949360405195869262005cfa62005c528386016021907f496e76616c696420776974686472617720616d6f756e742e20416d6f756e743a8152600160fd1b60208201520190565b017f2c20616e6420776974686472617761626c6520636173683a2000000000000000815262005d33825180936020878501910162004106565b010360061981018552018362003fd9565b9062005d508262003ffb565b62005d5f604051918262003fd9565b828152809262005d72601f199162003ffb565b0190602036910137565b62013888805482101562005bb5576000527ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df0190600090565b62013886805482101562005bb5576000527f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa40190600090565b62013881805482101562005bb5576000527fcd6f7cece5c70f73af31bb8ed8b80ae1c2a9e5eb261bd5ab2d9374b0c38719c80190600090565b6202711d805482101562005bb5576000527f7f4320370b90cfd882bd4442421f8b4dbea0ca3aefc8d29d4787126914d53c5a0190600090565b6201388a805482101562005bb5576000527f3fb2ace5abc3439263a869a5230f0e568826a389e5a73118798eab8fd0f728590190600090565b62027119805482101562005bb5576000527fe43a1016fd4ea9a9b882244b4d001d1f2d6b7fe146dc2643bb2c59db4a7bb0e10190600090565b6202711b805482101562005bb5576000527fc59860dc09a642b584039e685e1d1ef32a7f12bf29c382ee17f417fe2f31f3990190600090565b805482101562005bb55760005260206000200190600090565b81811062005f30575050565b6000815560010162005f24565b600160401b811162003f1a57620138889081549080835581811062005f6157505050565b620053a2926000527ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df918201910162005f24565b600160401b811162003f1a57620138869081549080835581811062005fb957505050565b620053a2926000527f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa4918201910162005f24565b8054600082558062005ffd575050565b620053a29160005260206000209081019062005f24565b600160401b811162003f1a5762027119908154908083558181106200603857505050565b620053a2926000527fe43a1016fd4ea9a9b882244b4d001d1f2d6b7fe146dc2643bb2c59db4a7bb0e1918201910162005f24565b600160401b811162003f1a576202711b908154908083558181106200609057505050565b620053a2926000527fc59860dc09a642b584039e685e1d1ef32a7f12bf29c382ee17f417fe2f31f399918201910162005f24565b6201389180549060009081815582620060dc57505050565b81527f8f332db73d3937798ea82422156d059730b0b3058606439b57b7ae623e945366918201915b8281106200611157505050565b81815560010162006104565b90600160401b811162003f1a578154908083558181106200613d57505050565b620053a2926000526020600020918201910162005f24565b919082811162006166576001920390565b50600091508190565b81156200617a570490565b634e487b7160e01b600052601260045260246000fd5b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000808210156200630e575b506d04ee2d6d415b85acef810000000080831015620062fe575b50662386f26fc1000080831015620062ee575b506305f5e10080831015620062de575b5061271080831015620062ce575b506064821015620062bd575b600a80921015620062b2575b600190816021818601956200623287620041b8565b9662006242604051988962003fd9565b80885262006253601f1991620041b8565b01366020890137860101905b6200626c575b5050505090565b600019019083907f30313233343536373839616263646566000000000000000000000000000000008282061a835304918215620062ac579190826200625f565b62006265565b91600101916200621d565b919060646002910491019162006211565b6004919392049101913862006205565b60089193920491019138620061f7565b60109193920491019138620061e7565b60209193920491019138620061d4565b604093508104915038620061ba565b601e620053a291602094936040519586926200636d62005c528386016021907f496e76616c696420776974686472617720616d6f756e742e20416d6f756e743a8152600160fd1b60208201520190565b017f2c20616e6420776974686472617761626c65206469766964656e64733a2000008152620063a6825180936020878501910162004106565b010360011981018552018362003fd9565b90620063c38262003ffb565b604090620063d48251918262003fd9565b8381528093620063e7601f199162003ffb565b019160005b838110620063fa5750505050565b60209082516200640a8162003f4c565b6000815282600081830152606080868401526000818401526080830152600060a0830152600060c0830152600060e0830152828601015201620063ec565b62006454815462005221565b90816200645f575050565b81601f6000931160011462006472575055565b90808391825262006493601f60208420940160051c84016001850162005f24565b5555565b8054906000815581620064a8575050565b6000526020600020908101905b818110620064c1575050565b80620064cf60019262006448565b01620064b5565b90600160401b811162003f1a57815491818155828210620064f657505050565b600052602060002091820191015b81811062006510575050565b806200651e60019262006448565b0162006504565b805490600081558162006536575050565b6000526020600020908101905b8181106200654f575050565b806200655d60019262005fed565b0162006543565b90600160401b811162003f1a578154918181558282106200658457505050565b600052602060002091820191015b8181106200659e575050565b80620065ac60019262005fed565b0162006592565b8054600080835581620065c557505050565b60079282840292848404036200664657815260208120918201915b828110620065ee5750505050565b8082859255826001820155620066076002820162005fed565b620066156003820162006497565b620066236004820162006525565b620066316005820162006525565b6200663f6006820162006448565b01620065e0565b602482634e487b7160e01b81526011600452fd5b600160401b821162003f1a578054908281558183106200667957505050565b600792828402928484040362005b9157808402908482040362005b915760009182526020822092830192015b828110620066b35750505050565b8082859255826001820155620066cc6002820162005fed565b620066da6003820162006497565b620066e86004820162006525565b620066f66005820162006525565b620067046006820162006448565b01620066a5565b5160068110156200409c5790565b9060068110156200409c5760ff80198354169116179055565b906200673e8162004eaa565b60ff80198354169116179055565b90620067588162004091565b61ff0082549160081b169061ff001916179055565b90603d8110156200409c5762ff000082549160101b169062ff00001916179055565b9190601f81116200679f57505050565b620053a2926000526020600020906020601f840160051c83019310620067ce575b601f0160051c019062005f24565b9091508190620067c0565b91909182516001600160401b03811162003f1a576200680581620067fe845462005221565b846200678f565b602080601f83116001146200684457508192939460009262006838575b50508160011b916000199060031b1c1916179055565b01519050388062006822565b90601f198316958460005282600020926000905b888210620068935750508360019596971062006879575b505050811b019055565b015160001960f88460031b161c191690553880806200686f565b8060018596829496860151815501950193019062006858565b815160068110156200409c57620068c4908262006719565b602082015160018201556002810160408301516020815191620068e883856200665a565b01916000526020600020916000905b8282106200697c57505050509060e06005620053a293606084015160038201556200692a608085015160048301620067d9565b01916200694960a08201511515849060ff801983541691151516179055565b60c0810151835461ff00191690151560081b61ff00161783550151815462ff0000191690151560101b62ff000016179055565b80518051855560018501620069a160208301516200699a8162004eaa565b8262006732565b620069bc6040830151620069b58162004091565b826200674c565b6060820151603d8110156200409c57620069d6916200676d565b60808101518051906001600160401b03821162003f1a576020600288019162006a0084846200611d565b0190600052602060002060005b83811062006cab575050505060a0015180518051906020600388019162006a358484620064d6565b01906000526020600020906000905b83821062006c8b5750505050600485016020820151602081519162006a6a838562006564565b019160005260206000206000925b82841062006c275750505050600585016040820151602081519162006a9e838562006564565b019160005260206000206000925b82841062006bba5750505050606001518051906001600160401b03821162003f1a5762006aec8262006ae2600689015462005221565b600689016200678f565b602090601f831160011462006b3f57928260079360209360019660009262006b33575b5050600019600383901b1c191690851b1760068801555b01940191019092620068f7565b01519050388062006b0f565b906006870160005260206000209160005b601f198516811062006ba1575083602093600196938793600797601f1981161062006b87575b505050811b01600688015562006b26565b015160001960f88460031b161c1916905538808062006b76565b9192602060018192868501518155019401920162006b50565b80518051906001600160401b03821162003f1a5760209062006bdd83866200611d565b0183600052602060002060005b83811062006c0957505050506001602081920192019301929062006aac565b60019060206001600160a01b03855116940193818401550162006bea565b80518051906001600160401b03821162003f1a5760209062006c4a83866200611d565b0183600052602060002060005b83811062006c7657505050506001602081920192019301929062006a78565b60019060208451940193818401550162006c57565b600160208262006c9e83945187620067d9565b0193019101909162006a44565b60019060208451940193818401550162006a0d565b6201388390815481101562005bb557600691600052027f9e32270fdbb1cb37df0574dfc18a9a2c56583299a239108c9d137f746b82200a0190600090565b6202711690815481101562005bb557600691600052027f2a7aa4e7f2fefac7a07702701afb9c202f6f79fb2762c8e42b37a264307667fa0190600090565b6201388290815481101562005bb557600691600052027fe5dac618068543225ae1c2f585dbaa37d058ab507104bc7da3da5ab2e5666cc70190600090565b6202711590815481101562005bb557600691600052027f0f9b10e190177c3c56fc6ce7689c8130c567df57aa02c08e7a090a59992adf920190600090565b620138828054600160401b81101562003f1a5762006ddc9160018201905562006d3c565b91909162006def57620053a291620068ac565b634e487b7160e01b600052600060045260246000fd5b620138838054600160401b81101562003f1a5762006ddc9160018201905562006cc0565b620271168054600160401b81101562003f1a5762006ddc9160018201905562006cfe565b620271158054600160401b81101562003f1a5762006ddc9160018201905562006d7a565b1562006e7957565b608460405162461bcd60e51b815260206004820152603760248201527f73756d4469766964656e64576569676874466f72546f6b656e436c6173733a2060448201527f6469766964656e64576569676874206f766572666c6f770000000000000000006064820152fd5b61271081101562005bb557600390811b60028101549060009260049384830191825492829682849601935b85871062006f355750505050505050620056279162006f2d9162006fe1565b919062006e71565b98979091929394959862006f965762006f8a8962006f826001600160a01b0362006f656200054f9c9d8862005f0b565b905490891b1c169360009485528860205260408520549062007088565b9a9062007003565b95949392919062006f0e565b603282634e487b7160e01b6000525260246000fd5b90811562006fd857606462006fc481840293846200616f565b0362006fd05760019190565b600091508190565b60019150600090565b9190821562006ff95762006fc481840293846200616f565b5060019150600090565b156200700b57565b608460405162461bcd60e51b815260206004820152602e60248201527f746f74616c546f6b656e73506572546f6b656e436c6173733a20746f74616c5460448201527f6f6b656e73206f766572666c6f770000000000000000000000000000000000006064820152fd5b906001820191821062006fd05760019190565b9190820191821062006fd05760019190565b6201388b54620070e4620070ad6201733b565b91620070bf6127109384831062005b4e565b620070d96201388e546201388c54111562001929620173c2565b6201388d5462006fe1565b919050620070f162017423565b5060009081925b81841062007113575b6200710e93500462007159565b905090565b9160ff60078560031b015416156200715257836200713f6200714b9262003c786200054f969762006ee3565b94906200192962017423565b92620070f8565b9162007101565b90801562007171576200716c916200616f565b600191565b5050600090600090565b620138918054600160401b81101562003f1a576001810180835581101562005bb5576001600160a01b03916000527f8f332db73d3937798ea82422156d059730b0b3058606439b57b7ae623e9453660191166001600160a01b0319825416179055565b6201388f8054600160401b81101562003f1a576001810180835581101562005bb5576001600160a01b03916000527f846ab89c81ea9339188216a1864da1a19ebe28d411cbec99efa70ca6d389710d0191166001600160a01b0319825416179055565b6201388190815491600160401b83101562003f1a578262001f30916001620053a29501905562005dee565b604051906200727b8262003fa1565b601882527f5468652070726f6772616d2069732065786563757465642e00000000000000006020830152565b600091825b602080840190815180518710156200743f5781620072cf88620072d79362005bed565b510162007a5a565b602692838210156200409c57601a918203620073975787620072fa915162005bed565b519282840151908110156200409c570362007353575093620073446200734c926200733c6200733560a060406200054f9a0151015162005ba7565b5162005ba7565b519062007088565b959062007a68565b92620072ac565b6064906040519062461bcd60e51b82526004820152601b60248201527f546865206f70636f6465206973206e6f74205041595f434153482e00000000006044820152fd5b92919050620073b081620072cf89869a979a5162005bed565b828110156200409c57601403620073e957505090620073446200054f9562003c78620073e2846200734c965162005bed565b5162007ab4565b620073fb90620072cf85855162005bed565b908110156200409c5760151462007419575b506200734c9062005b81565b9062007344620074389562003c78620073e2846200734c965162005bed565b906200740d565b505050909250803410600014620074ba57608460405162461bcd60e51b815260206004820152603760248201527f546865207061796d656e74206973206e6f7420656e6f7567682e20546865207460448201527f6f74616c207061796d656e742073686f756c64206265200000000000000000006064820152fd5b803411620078cb575b5062027129805460ff8116620074d98162004091565b600181036200750f5750505080620074ff620074f9620075059362007b4b565b62007b60565b62007bac565b620056276200726c565b6200751a8162004091565b600281148080620078bd575b156200762057505050506200753b8162007b4b565b15620075dc576200754c8162007b4b565b1562007598576200755d9062007bac565b6040516200756b8162003fa1565b601581527f54686520766f74652069732065786563757465642e0000000000000000000000602082015290565b606460405162461bcd60e51b815260206004820152601460248201527f496e76616c696420766f74652070726f6772616d0000000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152601760248201527f496e76616c696420766f74696e672070726f6772616d2e0000000000000000006044820152fd5b6200762b8262004091565b60038214918280620078af575b15620077335750505050506200764e8162007b4b565b15620076c95780620074ff620074f9620076689362007b4b565b604051620076768162003f69565b603a81527f5468652070656e64696e672070726f6772616d2069732065786563757465642060208201527f616674657220766f74696e6720616e6420617070726f76616c2e000000000000604082015290565b608460405162461bcd60e51b815260206004820152602260248201527f496e76616c696420657865637574696e672070656e64696e672070726f67726160448201527f6d2e0000000000000000000000000000000000000000000000000000000000006064820152fd5b6200773e8162004091565b8180620078a0575b8062007892575b15620077775750505050906200750591600360ff19825416179055620074ff620074f98262007b4b565b620077828162004091565b82156200787d575b5050806200786e575b620077d657505050604051620077a98162003fa1565b601381527f50726f6772616d207465726d696e617465642e00000000000000000000000000602082015290565b60ff19166001179055620077ea8162007b4b565b15620078045780620074ff620074f9620075059362007b4b565b608460405162461bcd60e51b815260206004820152603e60248201527f5b4572726f72203030335d5468652070726f6772616d206973206e6f7420612060448201527f76616c696420657865637574652070656e64696e672070726f6772616d2e00006064820152fd5b50620271285442101562007793565b6200788a91925062004091565b38806200778a565b50620271285442106200774d565b50620271275442101562007746565b506202712854421062007638565b506202712754421062007526565b6001600160a01b03908183511660005262013885908160205260406000205415620079c6575b620078fd903462006155565b901562007982576200792090838551166000528260205260406000205462007088565b9290156200793e5783511660005260205260406000205538620074c3565b606460405162461bcd60e51b815260206004820152601960248201527f546865206e65772062616c616e6365206f766572666c6f772e000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152601c60248201527f546865207061796d656e742072657475726e206f766572666c6f772e000000006044820152fd5b6000908162013886928354915b82811062007a1f575b5015620079ed575b509050620078f1565b84865116600160401b82101562003f1a5762001f3082620078fd95600162007a189501905562005db5565b38620079e4565b8662007a2b8262005db5565b919054818b51169260031b1c161462007a4f5762007a499062005b81565b620079d3565b5050600138620079dc565b5160268110156200409c5790565b1562007a7057565b606460405162461bcd60e51b815260206004820152601f60248201527f54686520746f74616c207061796d656e7420697320746f6f206c617267652e006044820152fd5b906000805b6040840160a062007ace818351015162005bcb565b515184101562007b4357926200734462007b3360409462007b2b8562007b238662007b118b62007b18836200054f9f9e62007b119062007b399e51015162005bcb565b5162005bed565b519451015162005bdc565b519062006fe1565b929062007a68565b62007088565b9192905062007ab9565b509093505050565b60200151511562007b5b57600190565b600090565b1562007b6857565b606460405162461bcd60e51b815260206004820152600f60248201527f496e76616c69642070726f6772616d00000000000000000000000000000000006044820152fd5b62007bb78162014448565b5162013ef45760068110156200409c576003811462013e8a578062007c1a57606460405162461bcd60e51b815260206004820152601660248201527f5468652070726f6772616d20697320696e76616c6964000000000000000000006044820152fd5b600481036200b5ba5750906000905b602083015180518310156200b5b4578262007c449162005bed565b51602081018051602690818110156200409c57156200b570578151818110156200409c5760010362007e9257505060408091019062007c8860c08351015162005ba7565b519262007caa60a062007c9f818651015162005ba7565b519451015162005bcb565b519562007cbb8551855114620160fd565b62007cca85518851146201616f565b60005b855181101562007e105762007ce3818662005bed565b51612710908181101562005bb557600160ff600762007d0b9360031b015416151514620161e1565b62007d17828a62005bed565b5162007d24838862005bed565b51908282101562005bb557600662007d429260031b01549062007088565b9062007d4f848962005bed565b51918383101562005bb557600662007d6c9360031b015562016238565b62007d78828a62005bed565b519062007d86838862005bed565b518181101562005bb5578392600362007dc6928b62007daf6001600160a01b0398899262005bed565b5116600052811b0160205287600020549062007088565b62007dd2848a62005bed565b519283101562005bb55760036200054f9362007e0a9662007df4878e62005bed565b5116600052811b016020528760002055620162aa565b62007ccd565b50939262007e2d9192965062007e26906201723d565b9262017121565b94519262007e3b8462003fbd565b60008452600036813760005b835181101562007e7557806200054f62007e6662007e6f938762005bed565b51878a62016d14565b62007e47565b509450926020925062007e89915062005b81565b91905062007c29565b8151818110156200409c5760020362008166575050604080910180519283519562007ed762007ec660a08097015162005ba7565b519562007b18818651015162005bcb565b51938751865103620080fd578751845103620080945787518551036200802b575060005b8551811015620080155762007f11818762005bed565b5190612710918281101562005bb55762007f3760ff6007809360031b015416156201631b565b62007f43828962005bed565b518381101562005bb55760031b01805460ff1916600117905562007f68818a62005bed565b5162007f75828962005bed565b51908382101562005bb557600562007f919260031b01620067d9565b62007f9d818662005bed565b5162007faa828962005bed565b518381101562005bb55760031b6001015562007fc7818762005bed565b5162007fd4828962005bed565b518381101562005bb55760031b6002015562007ff1818862005bed565b519182101562005bb557600060066200800f9360031b015562005b81565b62007efb565b5095509390506020925062007e89915062005b81565b6084905162461bcd60e51b815260206004820152603c60248201527f546865206c656e677468206f6620746f6b656e496e666f20616e6420746f6b6560448201527f6e4469766964656e64576569676874206973206e6f7420657175616c000000006064820152fd5b6084905162461bcd60e51b815260206004820152603960248201527f546865206c656e677468206f6620746f6b656e496e666f20616e6420746f6b6560448201527f6e566f74696e67506f776572206973206e6f7420657175616c000000000000006064820152fd5b6084905162461bcd60e51b815260206004820152603860248201527f546865206c656e677468206f6620746f6b656e496e666f20616e6420746f6b6560448201527f6e496e6465784172726179206973206e6f7420657175616c00000000000000006064820152fd5b81959394929551818110156200409c576003036200874557505060408401906200819560c08351015162005ba7565b5193620081ac60a062007c9f818651015162005ba7565b5193620081c1865185511462001929620174fa565b620081d4865186511462001929620174fa565b60005b86518110156200823e57620081ed818662005bed565b519061271082101562005bb557600362008238926001600160a01b038b5116600052811b016020526200054f6040600020546200822b838a62005bed565b5111156200192962017621565b620081d7565b50909493919460005b855181101562008373576200825d818662005bed565b51906127108083101562005bb55760036001600160a01b0393848c5116600052811b01602052620082a160406000205462008299848962005bed565b519062006155565b90620082ae848a62005bed565b51918383101562005bb5576003620082dd93878f5116600052811b016020526040600020556200192962017621565b620082e9828862005bed565b518181101562005bb5576003908462008303858c62005bed565b5116600052811b01602052620083246040600020546200733c848962005bed565b62008330848a62005bed565b519283101562005bb55760036200054f936200836d9662008352878e62005bed565b5116600052811b016020526040600020556200192962017697565b62008247565b5092620083919195969492506200838a906201723d565b9162017121565b926001600160a01b0360405191620083a98362003fa1565b60018352602036818501375116620083c18262005ba7565b526000905b82518210156200873157620083dc828462005bed565b5196620083ea865162005d44565b93600095620083fa845162005d44565b6104c0528698875b8951811015620084c357896200842f8d6001600160a01b0362008426858562005bed565b51169062017008565b158062008485575b6200844f575b50620084499062005b81565b62008402565b81996001600160a01b036200846d62008449946200847b9462005bed565b51166200200d828c62005bed565b989050896200843d565b50506127108c101562005bb5576001600160a01b03620084a6828c62005bed565b511660005260038c811b0160205289604060002054151562008437565b509098969498979291939760005b895181101562008561576127108c101562005bb5576001600160a01b03620084fa828c62005bed565b511660005260038c811b01602052896040600020541562008528575b50620085229062005b81565b620084d1565b81996001600160a01b03620085466200852294620085579462005bed565b51166200200d826104c05162005bed565b9890508962008516565b50989593929650966127108a1015610680526127108a101562005bb55760048a60031b0154966200859d62008597878a6201542e565b62005d44565b9860009a8b610240525b6106805162005bb557610240518a8110156200865757620085f56001600160a01b038f92620085e39060006106805260048560031b0162005f0b565b90549060031b1c166104c051620170cc565b1562008615575b506200860b6102405162005b81565b61024052620085a7565b9b8b6200200d826200864f949f620086406001600160a01b03916004610240519160031b0162005f0b565b90549060031b1c169262005bed565b9a8c620085fc565b509b9398509591969499909893996000915b838310620086f857505050506106805162005bb5578151916001600160401b03831162003f1a576020600491620086a685848660031b016200611d565b019160031b01600052602060002060005b838110620086da5750505050620086ce9062005b81565b909491959295620083c6565b60019060206001600160a01b038551169401938184015501620086b7565b620087236200872a916001600160a01b0362008715868662005bed565b51166200200d828a62005bed565b9262005b81565b9162008669565b50505091926020915062007e899062005b81565b81959394929551818110156200409c57600403620089d2575050604080920160c094620087866200877a878451015162005ba7565b51968351015162005bcb565b51946200879d60a062007c9f818651015162005ba7565b5193620087b2885188511462001929620174fa565b620087c5885185511462001929620174fa565b620087d8885186511462001929620174fa565b60005b88518110156200883f57620087f1818662005bed565b519061271082101562005bb557600362008839926001600160a01b0362008819848e62005bed565b5116600052811b016020526200054f88600020546200822b838a62005bed565b620087db565b50909691959294939660005b83518110156200897f5762008861818862005bed565b5190612710918281101562005bb55760036001600160a01b03918262008888858a62005bed565b5116600052811b01602052620088a98b62008299848b600020549262005bed565b90620088b6848c62005bed565b51918583101562005bb5576003620088ef9385620088d5888d62005bed565b5116600052811b016020528a600020556200192962017621565b620088fb828a62005bed565b518381101562005bb5576003908262008915858b62005bed565b5116600052811b01602052620089368b6200733c848b600020549262005bed565b91905062008945838b62005bed565b519384101562005bb557620089799360039162008963858b62005bed565b5116600052811b01602052876000205562005b81565b6200884b565b5094620089a9929750620089a2919394506200899b906201723d565b9362017121565b9562017121565b9260005b835181101562007e7557806200054f62007e66620089cc938762005bed565b620089ad565b81959493955190808210156200409c57600591820362008c02575050506040918285019062008a1660a062008a0b818551015162005ba7565b519351015162005bcb565b5192825184510362008b995760005b835181101562008a7e5762008a3b818562005bed565b519061271082101562005bb557600362008a78926001600160a01b038b5116600052811b016020526200054f87600020546200822b838962005bed565b62008a25565b509092919260005b845181101562008b1a5762008a9c818662005bed565b51906127108083101562005bb55760036001600160a01b0393848c5116600052811b0160205262008ad7886000205462008299848962005bed565b62008ae3848a62005bed565b519283101562005bb55760036200054f9362008b14968e5116600052811b0160205289600020556200192962017621565b62008a86565b5095939262008b2b9192506201723d565b916001600160a01b0381519462008b428662003fa1565b6001865260203681880137511662008b5a8562005ba7565b52519462008b688662003fbd565b60008652600036813760005b835181101562007e7557806200054f62007e6662008b93938762005bed565b62008b74565b6084855162461bcd60e51b815260206004820152603560248201527f546865206c656e677468206f6620746f6b656e436c61737320616e6420746f6b60448201527f656e416d6f756e74206973206e6f7420657175616c00000000000000000000006064820152fd5b829693949651818110156200409c5760060362008ea05750505090604080920162008c3260c08251015162005ba7565b519462008c4960a062008a0b818551015162005ba7565b5192865183510362008e3757865184510362008dce5760005b875181101562008cc65762008c78818562005bed565b519061271082101562005bb557600362008cc0926001600160a01b0362008ca0848d62005bed565b5116600052811b016020526200054f87600020546200822b838962005bed565b62008c62565b509092919260005b875181101562008d7a5762008ce4818662005bed565b516127108082101562005bb557600383928b62008d0b6001600160a01b0396879262005bed565b5116600052811b0160205262008d2b886000205462008299848962005bed565b62008d37848a62005bed565b519283101562005bb55760036200054f9362008d749662008d5a8f889062005bed565b5116600052811b0160205289600020556200192962017621565b62008cce565b50959262008d8f91925062007e26906201723d565b92519462008d9d8662003fbd565b60008652600036813760005b835181101562007e7557806200054f62007e6662008dc8938762005bed565b62008da9565b6084855162461bcd60e51b815260206004820152603060248201527f546865206c656e677468206f662061646472657373657320616e6420616d6f7560448201527f6e7473206973206e6f7420657175616c000000000000000000000000000000006064820152fd5b6084855162461bcd60e51b815260206004820152603560248201527f546865206c656e677468206f662061646472657373657320616e6420746f6b6560448201527f6e436c6173736573206973206e6f7420657175616c00000000000000000000006064820152fd5b8251818110156200409c57600703620090085750505060408091019362008ecc60c08651015162005ba7565b519262008ede60a08751015162005ba7565b519551519162008ef6855188511462001929620174fa565b60005b8551811015620080155762009002906200054f6001600160a01b038260028862008fea8e62008fdf8e62008fc88f8962008f348a8562005bed565b511660005262008f718962008f6981620138809a8b60205262008f6360ff8760002054161562001929620175e6565b62005bed565b519662005bed565b51968a62008fa783519b8c9662008f888862003efe565b600188526060602089019860008a528781019b8c52019b8c5262005bed565b511660005260205260002097511515889060ff801983541691151516179055565b51865461ff00191690151560081b61ff0016178655565b5160018501620067d9565b5191015562008ffa838a62005bed565b511662007241565b62008ef9565b8251959695939492818510156200409c57600894850362009100575050506200903a60c0604080950151015162005ba7565b519360005b8551811015620090eb57620090e5906001600160a01b038062009063838a62005bed565b5116600052620138809081602052620090ba60ff620090916001828c60002054161515146200192962017535565b826200909e868d62005bed565b5116600052836020528960002054891c161562001929620175ab565b620090c6838a62005bed565b51166000526020528560002061010061ff001982541617905562005b81565b6200903f565b50949093506020925062007e89915062005b81565b8051828110156200409c57600903620091d5575050506200912a60c0604080950151015162005ba7565b519360005b8551811015620090eb57620091cf90866001600160a01b038062009154848462005bed565b5116600052620091a8600189836200918a8762013880978860205262008f638660ff809760002054161515146200192962017535565b5116600052846020528a600020548a1c161515146200192962017570565b620091b4838a62005bed565b51166000526020528560002061ff0019815416905562005b81565b6200912f565b809796949293959751828110156200409c57600a03620092b457505050506040809401916200921a60a06200920f60c08651015162005ba7565b519451015162005ba7565b51916200922f845184511462001929620174fa565b60005b845181101562007e7557620092ae906001600160a01b038062009256838962005bed565b511660005262013880806020526200927e600160ff8c60002054161515146200192962017535565b6200928a838862005bed565b519162009298848a62005bed565b5116600052602052600289600020015562005b81565b62009232565b8097959751828110156200409c57600b03620093845750505050604080920193620092e460c08651015162005ba7565b5194515191620092fc865184511462001929620174fa565b60005b865181101562007e75576200937e906200054f6001600160a01b038062009327848c62005bed565b511660005262013880806020526200934f600160ff8b60002054161515146200192962017535565b6200935b848962005bed565b519162009369858d62005bed565b511660005260205260018860002001620067d9565b620092ff565b8097949593969751828110156200409c57600c03620094dd57505050604001606091828251015193620093b785620154d5565b60005b8551811015620094c75760e0620093d682878751015162005bed565b510151156200945e57620093fa620093f382878751015162005bed565b5162006db8565b62013882805460001992919083810190811162005b91576200941d8a9162006d3c565b5001805461ff0019166101001790555491820191821162005b91578762009448620094589362006d3c565b5001805460ff1916905562005b81565b620093ba565b620094796200947282878751015162005bed565b5162006e05565b62013882805460001992919083810190811162005b91576200949c8a9162006cc0565b5001805461ff0019166101001790555491820191821162005b91578762009448620094589362006cc0565b5095915093506020925062007e89915062005b81565b809796959392949751828110156200409c57600d03620096345750506040019460206200950f60a08851015162005ba7565b51965101519162009524875184511462015dd4565b60005b875181101562008015578080878a62009545620095d5958962005bed565b5115620095db57620095a66200958d8483620095786200956b620095b198889762005bed565b5162013882541162015e6c565b62008f638d620095946200958d858562005bed565b5162006d3c565b509060ff9889920154901c1662015ec3565b500154161562015f35565b86620095c26200958d838c62005bed565b5001805460ff1916600117905562005b81565b62009527565b620095a66200961c848362009607620095fa6200962398889762005bed565b5162013883541162015e6c565b62008f638d620095946200961c858562005bed565b5162006cc0565b86620095c26200961c838c62005bed565b809794939751828110156200409c57600e036200971b5750506040019160206200966360a08551015162005ba7565b51935101519562009678845188511462015dd4565b60005b845181101562008015578062009696620096a2928a62005bed565b51620096a85762005b81565b6200967b565b620096c5620096b8828862005bed565b5162013882541162015fa7565b6200970a87620096ef620096de6200958d858b62005bed565b5060ff9283910154891c1662016019565b88620097006200958d858b62005bed565b500154166201608b565b86620094486200958d838962005bed565b80919293509694959651828110156200409c57600f03620098415750506040016060918282510151936200974f85620154d5565b60005b8551811015620094c75760e06200976e82878751015162005bed565b51015115620097df576200978b620093f382878751015162005bed565b62013882805460001992919083810190811162005b9157620097ae8a9162006d3c565b5001805461ff0019166101001790555491820191821162005b915787620095c2620097d99362006d3c565b62009752565b620097f36200947282878751015162005bed565b62013882805460001992919083810190811162005b9157620098168a9162006cc0565b5001805461ff0019166101001790555491820191821162005b915787620095c2620097d99362006cc0565b809192939496955051828110156200409c57601003620098e657505060400151906200987660a0608084015193015162005ba7565b51936200988b835186511462001929620174fa565b60005b8351811015620098d357806200054f620098ad620098cd938762005bed565b51620098b98162004eaa565b620098c5838a62005bed565b51906201543c565b6200988e565b509350916020915062007e899062005b81565b8095929551828110156200409c5760110362009b96575050906040809401916200991b60a06200920f60c08651015162005ba7565b51916200992c8451845114620153e2565b60005b8451811015620099a5576200999f906200054f6001600160a01b038062009957848a62005bed565b51166000526201388580602052620099798b600020546200733c868b62005bed565b91909262009988868c62005bed565b51166000526020528a600020556200192962017499565b6200992f565b5093945091620099b6915062017121565b906201388692835494620099d0620085978551886201542e565b91600093845b88811062009b58575060005b865181101562009a96576000805b8a811062009a47575b501562009a12575b62009a0c9062005b81565b620099e2565b9462009a3e62009a0c916001600160a01b0362009a30898b62005bed565b51166200200d828962005bed565b95905062009a01565b62009a528162005db5565b906001600160a01b03918291549060031b1c169062009a72858c62005bed565b51161462009a8b5762009a859062005b81565b620099f0565b5050600138620099f9565b5096509490935062009aa88362005d44565b908151916001600160401b03831162003f1a5760209062009ac98462005f95565b019060005260005b82811062009b1a5750505060005b82811062009af75750505062007e8960209162005b81565b806200054f6001600160a01b0362001f2362009b14948662005bed565b62009adf565b60019060206001600160a01b03845116930192817f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa401550162009ad1565b9462009b8962009b90916001600160a01b0362009b758962005db5565b90549060031b1c166200200d828962005bed565b9562005b81565b620099d6565b8051828110156200409c5760120362009e2157505060408094019162009bc760a06200920f60c08651015162005ba7565b519162009bd88451845114620153e2565b60005b845181101562009c2b5762009c25906200054f6001600160a01b038062009c03848a62005bed565b51166000526201388580602052620099798b6000205462008299868b62005bed565b62009bdb565b50949150929162009c3c9062017121565b9062013886805462009c4e8162005d44565b9260009485925b80841062009d1c575050505062009c6c8362005d44565b908151916001600160401b03831162003f1a5760209062009c8d8462005f95565b019060005260005b82811062009cde5750505060005b82811062009cbb5750505062007e8960209162005b81565b806200054f6001600160a01b0362001f2362009cd8948662005bed565b62009ca3565b60019060206001600160a01b03845116930192817f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa401550162009c95565b9297600097929597949194998a5b865181101562009e0f5762009d3f8b62005db5565b906001600160a01b03918291549060031b1c169062009d5f838a62005bed565b51161462009d785762009d729062005b81565b62009d2a565b509950976001979592979491945b8062009ddd575b1562009da55762009d9e9062005b81565b9262009c55565b9562009dd662009d9e916001600160a01b0362009dc28a62005db5565b90549060031b1c166200200d828a62005bed565b9662005b81565b506001600160a01b0362009df18262005db5565b90549060031b1c166000526201388560205282600020541562009d8d565b50999890989795929794919462009d86565b8095929551828110156200409c5760130362009e8257505060408091015101519260005b845181101562009e7157806200054f62009e6462009e6b938862005bed565b5162016981565b62009e45565b5092509062007e8960209162005b81565b805191808310156200409c5760149283036200a0255750505060408091019062009eb160c08351015162005ba7565b519262009ec860a062007c9f818651015162005ba7565b519562009ed98551855114620160fd565b62009ee885518851146201616f565b60005b855181101562009fd05762009f01818962005bed565b5162009f0e828762005bed565b51612710918282101562005bb557600662009f2f9260031b01549062007088565b9062009f3c848962005bed565b51918383101562005bb557600662009f599360031b015562016238565b62009f65828a62005bed565b519062009f73838862005bed565b518181101562005bb5578392600362009f9c928b62007daf6001600160a01b0398899262005bed565b62009fa8848a62005bed565b519283101562005bb55760036200054f9362009fca9662007df4878e62005bed565b62009eeb565b50939262009fe69192965062007e26906201723d565b94519262009ff48462003fbd565b60008452600036813760005b835181101562007e7557806200054f62007e666200a01f938762005bed565b6200a000565b8196949593965190808210156200409c5760159182036200a57d575050505060408401906200a05960c08351015162005ba7565b51936200a07060a062007c9f818651015162005ba7565b51936200a085865185511462001929620174fa565b6200a098865186511462001929620174fa565b60005b86518110156200a0f5576200a0b1818662005bed565b519061271082101562005bb55760036200a0ef926001600160a01b038b5116600052811b016020526200054f6040600020546200822b838a62005bed565b6200a09b565b50909493919460005b85518110156200a207576200a114818662005bed565b51906127108083101562005bb55760036001600160a01b0393848c5116600052811b016020526200a15060406000205462008299848962005bed565b906200a15d848a62005bed565b51918383101562005bb55760036200a18c93878f5116600052811b016020526040600020556200192962017621565b6200a198828862005bed565b518181101562005bb557600390846200a1b2858c62005bed565b5116600052811b016020526200a1d36040600020546200733c848962005bed565b6200a1df848a62005bed565b519283101562005bb55760036200054f936200a2019662008352878e62005bed565b6200a0fe565b50926200a21e9195969492506200838a906201723d565b926001600160a01b03604051916200a2368362003fa1565b600183526020368185013751166200a24e8262005ba7565b526000905b825182101562008731576200a269828462005bed565b51966200a277865162005d44565b936000956200a287845162005d44565b610600528698875b89518110156200a33957896200a2b38d6001600160a01b0362008426858562005bed565b15806200a2fb575b6200a2d3575b506200a2cd9062005b81565b6200a28f565b81996001600160a01b036200846d6200a2cd946200a2f19462005bed565b989050896200a2c1565b50506127108c101562005bb5576001600160a01b036200a31c828c62005bed565b511660005260038c811b016020528960406000205415156200a2bb565b509098969498979291939760005b89518110156200a3d7576127108c101562005bb5576001600160a01b036200a370828c62005bed565b511660005260038c811b0160205289604060002054156200a39e575b506200a3989062005b81565b6200a347565b81996001600160a01b036200a3bc6200a398946200a3cd9462005bed565b51166200200d826106005162005bed565b989050896200a38c565b50989593929650966127108a1015610140526127108a101562005bb55760048a60031b0154966200a40d62008597878a6201542e565b9860009a8b6103c0525b6101405162005bb5576103c0518a8110156200a4b8576200a4656001600160a01b038f926200a4539060006101405260048560031b0162005f0b565b90549060031b1c1661060051620170cc565b156200a485575b506200a47b6103c05162005b81565b6103c0526200a417565b9b8b6200200d826200a4b0949f620086406001600160a01b039160046103c0519160031b0162005f0b565b9a8c6200a46c565b509b9398509591969499909893996000915b8383106200a55957505050506101405162005bb5578151916001600160401b03831162003f1a5760206004916200a50785848660031b016200611d565b019160031b01600052602060002060005b8381106200a53b57505050506200a52f9062005b81565b9094919592956200a253565b60019060206001600160a01b0385511694019381840155016200a518565b620087236200a576916001600160a01b0362008715868662005bed565b916200a4ca565b8297949695975192818410156200409c5760169384036200a5ea57505050505060c060406200a5b0920151015162005ba7565b519260005b845181101562009e7157806200054f6001600160a01b036200a5dc6200a5e4948962005bed565b5116620071de565b6200a5b5565b8051828110156200409c576017036200a65357608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203233206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b8051828110156200409c576018036200a6c757505050505060c060406200a67e920151015162005ba7565b5162013892805460ff191660011790559260005b845181101562009e7157806200054f6001600160a01b036200a6b96200a6c1948962005bed565b51166200717b565b6200a692565b8097969751828110156200409c576019036200a85057505050505060008080604080940160a0808251015180516200a817575b505051906001600160a01b036200a71e6200733560c060e086015195015162005ba7565b511690602083519301915af1903d156200a80e573d916200a73f83620041b8565b926200a74e8351948562003fd9565b83523d6000602085013e5b156200a76e57505062007e8960209162005b81565b62005b7d92506200a7ef8151927f5468652063616c6c20746f2074686520636f6e7472616374206973206e6f742060208501527f7375636365737366756c2e2052657475726e20646174613a2000000000000000838501528381516200a7de816059946020868601910162004106565b810103603981018552018362003fd9565b5191829162461bcd60e51b83526020600484015260248301906200412b565b6060916200a759565b6200a8229062005ba7565b51516200a831575b806200a6fa565b81925062007335906200a8479251015162005ba7565b5190386200a82a565b8051828110156200409c57601a036200a95b57505050506200a87b60a0604080940151015162005ba7565b51906200a88c6003835114620153e2565b6200a8978262005ba7565b51926200a8b06200a8a88462005bcb565b519362005bdc565b51926200a9185750509162007e89916001602094146000146200a911576200a8f0906200a8e36201388d91825462007088565b9091556200192962017423565b6200054f6201388e6200a904815462007075565b909155620019296201745e565b5062005b81565b60649250519062461bcd60e51b82526020600483015260248201527f496e76616c6964207061796d656e7420747970650000000000000000000000006044820152fd5b80919293945051828110156200409c57601b036200ade4575050505050906200a99b6201388b54620070bf6200a9906201733b565b612710831062005b4e565b50506200a9a762017423565b506000805b61271081106200ad7f575b50506200a9c36200709a565b6200a9d26202712a5462005d44565b9060009384905b6127108210156200ad73578160031b9460ff600787015416156200ab28576000976002870154156200ab1657889798975b62005bb55760048701548810156200aafc576200aa2b886004890162005f0b565b90549060031b1c6001600160a01b0316988960005260038801602052604099868b60002054906200aa5c9162006fe1565b9b906200aa6862017423565b6200aa739162005b4e565b60009b60028b01546200aa869162006fe1565b91906200aa9262017423565b6200aa9d9162005b4e565b828d52620138876020528c20908154906200aab89162007088565b9091556200aac562017423565b6200aad09162005b4e565b6200aadc828962005bed565b526200aae89062005b81565b976200aaf49062005b81565b97986200aa0a565b929095506200ab0d91965062005b81565b9095946200a9d9565b929095506200ab0d9196975062005b81565b959392509350505b6200ab3b8262005d44565b91600091825b8281106200acde5750505062013888908154926200ab646200859785846201542e565b9360009081905b8082106200aca557505060005b8381106200ac1057505050508151916001600160401b03831162003f1a576020906200aba48462005f3d565b019060005260005b8281106200abd25750505062007e8960209160006201388d5560006201388e5562005b81565b60019060206001600160a01b03845116930192817ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df0155016200abac565b6000805b8381106200ac5d575b50156200ac36575b6200ac309062005b81565b6200ab78565b906200ac546200ac30916001600160a01b0362008715858762005bed565b9190506200ac25565b6001600160a01b03806200ac72858862005bed565b5116906200ac81838b62005bed565b5116146200ac9a576200ac949062005b81565b6200ac14565b50506001386200ac1d565b9091620087236200acd7916001600160a01b036200acc38662005d7c565b90549060031b1c166200200d828b62005bed565b906200ab6b565b6000805b8581106200ad2b575b50156200ad04575b6200acfe9062005b81565b6200ab41565b926200ad226200acfe916001600160a01b0362009a30878662005bed565b9390506200acf3565b6001600160a01b03806200ad40858762005bed565b5116906200ad4f838a62005bed565b5116146200ad68576200ad629062005b81565b6200ace2565b50506001386200aceb565b9394929150506200ab30565b8060031b9060ff600783015416156200addd576200adcb62007b336200054f946200adbf6200add79560026200adb58762006ee3565b9101549062006fe1565b92906200192962017423565b93906200192962017423565b6200a9ac565b506200a9b7565b8051828110156200409c57601c036200ae4d57608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203238206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b8051828110156200409c57601d036200ae73575b505050505062007e8960209162005b81565b8051828110156200409c57601e146200ae61578051828110156200409c57601f036200aec957505050506020916200aebf6200aeb8604062007e899401515162005ba7565b51620169b8565b913880806200ae61565b8051828110156200409c576020036200aeef575b505050505062007e896020916200aebf565b805190828210156200409c5760218092036200af0d575b506200aedd565b8051838110156200b55b576022036200af4e5750505050505062007e896020916201389260ff1981541690556200af43620060c4565b91388080806200af06565b8051838110156200b55b576023036200af75575b50505050505062007e896020916200af43565b8051838110156200b55b576024146200af62578051838110156200b55b576025146200af62579795949751918210156200b5475750036200b503575060408401906200afc660c08351015162005ba7565b51936200afdd60a062007c9f818651015162005ba7565b51936200aff2865185511462001929620174fa565b6200b005865186511462001929620174fa565b60005b86518110156200b062576200b01e818662005bed565b519061271082101562005bb55760036200b05c926001600160a01b038b5116600052811b016020526200054f6040600020546200822b838a62005bed565b6200b008565b50909493919460005b85518110156200b174576200b081818662005bed565b51906127108083101562005bb55760036001600160a01b0393848c5116600052811b016020526200b0bd60406000205462008299848962005bed565b906200b0ca848a62005bed565b51918383101562005bb55760036200b0f993878f5116600052811b016020526040600020556200192962017621565b6200b105828862005bed565b518181101562005bb557600390846200b11f858c62005bed565b5116600052811b016020526200b1406040600020546200733c848962005bed565b6200b14c848a62005bed565b519283101562005bb55760036200054f936200b16e9662008352878e62005bed565b6200b06b565b50926200b18b9195969492506200838a906201723d565b926001600160a01b03604051916200b1a38362003fa1565b600183526020368185013751166200b1bb8262005ba7565b526000905b82518210156200b4ea576200b1d6828462005bed565b51966200b1e4865162005d44565b936000956200b1f4845162005d44565b610420528698875b89518110156200b2a657896200b2208d6001600160a01b0362008426858562005bed565b15806200b268575b6200b240575b506200b23a9062005b81565b6200b1fc565b81996001600160a01b036200846d6200b23a946200b25e9462005bed565b989050896200b22e565b50506127108c101562005bb5576001600160a01b036200b289828c62005bed565b511660005260038c811b016020528960406000205415156200b228565b509098969498979291939760005b89518110156200b344576127108c101562005bb5576001600160a01b036200b2dd828c62005bed565b511660005260038c811b0160205289604060002054156200b30b575b506200b3059062005b81565b6200b2b4565b81996001600160a01b036200b3296200b305946200b33a9462005bed565b51166200200d826104205162005bed565b989050896200b2f9565b50989593929650966127108a1015610120526127108a101562005bb55760048a60031b0154966200b37a62008597878a6201542e565b9860009a8b610200525b6101205162005bb557610200518a8110156200b425576200b3d26001600160a01b038f926200b3c09060006101205260048560031b0162005f0b565b90549060031b1c1661042051620170cc565b156200b3f2575b506200b3e86102005162005b81565b610200526200b384565b9b8b6200200d826200b41d949f620086406001600160a01b03916004610200519160031b0162005f0b565b9a8c6200b3d9565b509b9398509591969499909893996000915b8383106200b4c657505050506101205162005bb5578151916001600160401b03831162003f1a5760206004916200b47485848660031b016200611d565b019160031b01600052602060002060005b8381106200b4a857505050506200b49c9062005b81565b9094919592956200b1c0565b60019060206001600160a01b0385511694019381840155016200b485565b620087236200b4e3916001600160a01b0362008715868662005bed565b916200b437565b50505091926020915062007e899091388080806200af62565b6064906040519062461bcd60e51b82526020600483015260248201527f496e76616c6964206f7065726174696f6e2074797065000000000000000000006044820152fd5b634e487b7160e01b60005260045260246000fd5b82634e487b7160e01b60005260045260246000fd5b606460405162461bcd60e51b815260206004820152601b60248201527f4f7065726174696f6e207479706520697320756e646566696e656400000000006044820152fd5b50915050565b600281036200b61b5760405162461bcd60e51b815260206004820152602a60248201527f5468652070726f6772616d2069732064656e6965642062792074686520706c7560448201526967696e2073797374656d60b01b6064820152608490fd5b6001146200b6265750565b906200b6366201388354620063b7565b805190600160401b821162003f1a57620271165482620271165580831062013df1575b50602001620271166000527f2a7aa4e7f2fefac7a07702701afb9c202f6f79fb2762c8e42b37a264307667fa6000915b83831062013dd0575050505060005b62013883548110156200b6d257806200054f6200b6b96200b6cc9362006cc0565b506200b6c58362006cfe565b9062014356565b6200b698565b506200b6e26201388254620063b7565b805190600160401b821162003f1a57620271155482620271155580831062013d33575b50602001620271156000527f0f9b10e190177c3c56fc6ce7689c8130c567df57aa02c08e7a090a59992adf926000915b83831062013d12575050505060005b62013882548110156200b77757806200054f6200b7656200b7719362006d3c565b506200b6c58362006d7a565b6200b744565b5060005b612710811015806200b94257600160ff6201389a8460031b0154161515146200b7b1575b506200b7ab9062005b81565b6200b77b565b916000835b62005bb557620138978360031b01548110156200b822576200b819929350600092816001600160a01b036200b7f58694620138978960031b0162005f0b565b90549060031b1c16600052620138968660031b016020526000604081205562005b81565b9093926200b7b6565b5091604051906200b8338262003fbd565b6000825262005bb5578051906001600160401b03821162003f1a576020906200b86583620138978660031b016200611d565b01620138978360031b01600052602060002060005b8381106200b9245750505050600381901b6201389a8101805460ff191690556000620138938201819055620138948201819055620138958201556201389801546200b7ab91906200b8cb9062005221565b601f908181116200b8f8575b50506000620138988260031b01556000620138998260031b0155906200b79f565b6200b91c91620138988460031b016000526020600020910160051c81019062005f24565b38806200b8d7565b60019060206001600160a01b0385511694019381840155016200b87a565b505060005b612710811062013c7d575060005b62013881548110156200b9b357806001600160a01b036200b97a6200b9ad9362005dee565b90549060031b1c166000526202711360205260006002604082208281556200b9a56001820162006448565b015562005b81565b6200b955565b506200b9c3620138815462005d44565b8051906001600160401b03821162003f1a57600160401b821162003f1a57602090620271145483620271145580841062013c44575b50016202711460005260005b82811062013c065750505060005b62013881548110156200ba93576001600160a01b036200ba328262005dee565b90549060031b1c1690620271145481101562005bb5576200ba8d9162027114600052817f8e71c125ecfe4aeed61c8cf4b09183dd0bf2a3230d826486f04e5f6f0de58e2c01906001600160a01b031982541617905562005b81565b6200ba12565b509060005b62013881548110156200bb7357806200bab56200bb0b9262005dee565b906001600160a01b03918291549060031b1c1660005262013880602052604080600020916200bae48462005dee565b90549060031b1c1660005262027113602052600020908082036200bb11575b505062005b81565b6200ba98565b600280916200bb5460ff6200bb3581845416879060ff801983541691151516179055565b825460081c16859061ff00825491151560081b169061ff001916179055565b6200bb66600182016001860162013fec565b015491015538806200bb03565b5060005b6202711d548110156200bbc857806001600160a01b036200bb9c6200bbc29362005e27565b90549060031b1c166000526202711c6020526200054f6040600020606481019062005f24565b6200bb77565b506200bbd86201388a5462005d44565b8051906001600160401b03821162003f1a57600160401b821162003f1a576020906202711d54836202711d5580841062013bcd575b50016202711d60005260005b82811062013b8f5750505060005b6201388a548110156200bc6957806200054f6001600160a01b036200bc506200bc639462005e60565b90549060031b1c1662001f308362005e27565b6200bc27565b5060005b6201388a548110156200bcf857806200bc8a6200bcdf9262005e60565b906001600160a01b03918291549060031b1c1660005262013889602052604080600020916200bcb98462005e60565b90549060031b1c166000526202711c602052600020908082036200bce557505062005b81565b6200bc6d565b6200bcf09162014411565b38806200bb03565b506201388b546202711e556201388c546202711f556201388d5462027120556201388e5462027121556201388f546001600160401b03811162003f1a57600160401b811162003f1a57620271225481620271225580821062013b56575b507f846ab89c81ea9339188216a1864da1a19ebe28d411cbec99efa70ca6d389710d8054906000915b83831062013b1657505050506201389054600160401b811162003f1a57620271235481620271235580821062013ac2575b507f7f73709277f72a9bc7b284375e83603a53394744e9fa86da811e86c2aa78e05e620271236000527f4ad859a97f543436e70c22b09d31fb4c7b9e987d7a008c98817c9b50a97b12246000915b83831062013aa4575050505062013891546001600160401b03811162003f1a57600160401b811162003f1a57620271245481620271245580821062013a6b575b506202712460009081527f8f332db73d3937798ea82422156d059730b0b3058606439b57b7ae623e94536680545b83831062013a2b575050505060ff620138925416151560ff8019620271255416911617620271255560005b62027119548110156200bee057806001600160a01b036200bebb6200beda9362005e99565b90549060031b1c16600052620271186020526000604081205562005b81565b6200be96565b506200bef0620138865462005d44565b8051906001600160401b03821162003f1a576020906200bf108362006014565b016202711960005260005b828110620139ed5750505060005b62013886548110156200bf6b57806200054f6001600160a01b036200bf526200bf659462005db5565b90549060031b1c1662001f308362005e99565b6200bf29565b5060005b62013886548110156200bfde57806200bf8c6200bfd89262005db5565b906001600160a01b03918291549060031b1c166000526201388560205260408060002054916200bfbc8462005db5565b90549060031b1c16600052620271186020526000205562005b81565b6200bf6f565b5060005b6202711b548110156200c02c57806001600160a01b036200c0076200c0269362005ed2565b90549060031b1c166000526202711a6020526000604081205562005b81565b6200bfe2565b506200c03c620138885462005d44565b8051906001600160401b03821162003f1a576020906200c05c836200606c565b016202711b60005260005b828110620139af5750505060005b62013888548110156200c0b757806200054f6001600160a01b036200c09e6200c0b19462005d7c565b90549060031b1c1662001f308362005ed2565b6200c075565b5060005b62013888548110156200c12a57806200c0d86200c1249262005d7c565b906001600160a01b03918291549060031b1c166000526201388760205260408060002054916200c1088462005d7c565b90549060031b1c166000526202711a6020526000205562005b81565b6200c0bb565b50906000905b6020830151805183101562010f5357826200c14b9162005bed565b51602081015160268110156200409c57156200b57057602081015160268110156200409c576001036200c72f57604001906200c18c60c08351015162005ba7565b51936200c1a360a062007c9f818651015162005ba7565b51916200c1b48651855114620160fd565b6200c1c386518451146201616f565b60005b86518110156200c324576200c1dc818662005bed565b5161271081101562005bb557600160ff6201389a6200c2049360031b015416151514620161e1565b6200c210818562005bed565b516200c21d828762005bed565b519061271082101562005bb557620138996200c23f9260031b01549062007088565b906200c24c838862005bed565b519161271083101562005bb557620138996200c26d9360031b015562016238565b6200c279818562005bed565b516200c286828762005bed565b519061271082101562005bb557620138966200c2c9926001600160a01b036200c2b0868d62005bed565b511660005260031b016020526040600020549062007088565b91906200c2d7828862005bed565b519061271082101562005bb5576200c31e93620138966200054f936001600160a01b036200c306878f62005bed565b511660005260031b01602052604060002055620162aa565b6200c1c6565b50926200c33b9192506200899b909594956201723d565b916040516200c34a8162003fbd565b6000815260003681376000945b80518610156200c715576200c36d868262005bed565b51610380526200c37e855162005d44565b966000946200c38e845162005d44565b6103005260009460005b88518110156200c46b578a896200c3c86001600160a01b036200c3bc858462005bed565b51166103805162017072565b15806200c422575b6200c3e9575b50506200c3e39062005b81565b6200c398565b986200c417916200200d826001600160a01b036200c40e879e976200c3e39862005bed565b51169262005bed565b9790508a896200c3d6565b50505061271061038051101562005bb5576001600160a01b036200c447828b62005bed565b5116600052620138966103805160031b016020528a8960406000205415156200c3d0565b50909895979498969291939660005b88518110156200c50a5761271061038051101562005bb5576001600160a01b03806200c4a7838c62005bed565b5116600052620138966103805160031b01602052604060002054156200c4da575b506200c4d49062005b81565b6200c47a565b819b6200c502916200c4f16200c4d4948d62005bed565b51166200200d826103005162005bed565b9a906200c4c8565b5098509695929190939661038051612710811015806102a05262005bb55760031b620138970154986200c54262008597898c6201542e565b6104a0526000610480526000610260525b6102a05162005bb557610260518a8110156200c61c576200c58a6200c5a89160006102a052620138976103805160031b0162005f0b565b91906001600160a01b03928391549060031b1c1661030051620170cc565b156200c5c8575b506200c5be6102605162005b81565b610260526200c553565b60006102a0526200c5e861026051620138976103805160031b0162005f0b565b90549060031b1c166200c602610480516104a05162005bed565b526200c6116104805162005b81565b61048052386200c5af565b50979294959093985095909560005b8281106200c6c9575050506102a05162005bb5576104a051516001600160401b03811162003f1a576200c66a81620138976103805160031b016200611d565b60206104a05101620138976103805160031b01600052602060002060005b8381106200c6ab57505050506200c69f9062005b81565b9492959091956200c357565b60019060206001600160a01b0385511694019381840155016200c688565b806001600160a01b036200c6e26200c70f938562005bed565b51166200c6f6610480516104a05162005bed565b526200c7056104805162005b81565b6104805262005b81565b6200c62b565b5050939092506200c727915062005b81565b90916200c130565b90602082949394015160268110156200409c576002036200c8ec576040809201908151938451916200c7866200c76a60a08098015162005ba7565b51966200c77b818751015162005bcb565b519551015162005bdc565b51948351875103620080fd578351855103620080945783518651036200802b575060005b86518110156200c8d9576200c7c0818862005bed565b5161271081101562005bb55760ff6201389a6200c7e49260031b015416156201631b565b6200c7f0818862005bed565b5161271081101562005bb55760031b6201389a01805460ff191660011790556200c81b818562005bed565b516200c828828962005bed565b519061271082101562005bb557620138986200c8489260031b01620067d9565b6200c854818662005bed565b516200c861828962005bed565b5161271081101562005bb55760031b6201389401556200c882818762005bed565b516200c88f828962005bed565b5161271081101562005bb55760031b6201389501556200c8b0818862005bed565b519061271082101562005bb5576000620138996200c8d39360031b015562005b81565b6200c7aa565b509592509350506200c727915062005b81565b909291602084015160268110156200409c576003036200ced45760408401906200c91b60c08351015162005ba7565b51906200c93260a062007c9f818651015162005ba7565b51936200c947835185511462001929620174fa565b6200c95a835186511462001929620174fa565b60005b83518110156200c9ba576200c973818662005bed565b519061271082101562005bb557620138966200c9b4926001600160a01b038b511660005260031b016020526200054f6040600020546200822b838a62005bed565b6200c95d565b509095919560005b87518110156200cb0f576200c9d8818662005bed565b5161271081101562005bb55762013896906001600160a01b0386511660005260031b016020526200ca1460406000205462008299838962005bed565b906200ca21838862005bed565b519161271083101562005bb557620138966200ca5c936001600160a01b0389511660005260031b016020526040600020556200192962017621565b6200ca68818662005bed565b5161271081101562005bb55762013896906001600160a01b036200ca8d848c62005bed565b511660005260031b016020526200caaf6040600020546200733c838962005bed565b91906200cabd828862005bed565b519061271082101562005bb5576200cb0993620138966200054f936001600160a01b036200caed8f889062005bed565b511660005260031b016020526040600020556200192962017697565b6200c9c2565b509194935091620089a26200cb24916201723d565b926001600160a01b03604051956200cb3c8762003fa1565b600187526020368189013751166200cb548662005ba7565b526000905b86518210156200cec2576200cb6f828862005bed565b516105a0526200cb80855162005d44565b966000946200cb90885162005d44565b6104e05260009460005b88518110156200cc64578a896200cbca6001600160a01b036200cbbe858462005bed565b51166105a05162017072565b15806200cc1b575b6200cbeb575b50506200cbe59062005b81565b6200cb9a565b986200cc10916200200d826001600160a01b036200c40e879e976200cbe59862005bed565b9790508a896200cbd8565b5050506127106105a051101562005bb5576001600160a01b036200cc40828b62005bed565b5116600052620138966105a05160031b016020528a8960406000205415156200cbd2565b509098949897969291939760005b88518110156200cd08576127106105a051101562005bb5576001600160a01b036200cc9e828b62005bed565b5116600052620138966105a05160031b01602052604060002054156200ccd0575b6200ccca9062005b81565b6200cc72565b996200ccff6200ccca916001600160a01b036200ccee8e8d62005bed565b51166200200d826104e05162005bed565b9a90506200ccbf565b5098509694939291956105a051612710811015806104605262005bb55760031b620138970154966200cd3f62008597878a6201542e565b996000996000610280525b6104605162005bb557610280518a8110156200cdf5576001600160a01b036200cd896200cd9b92600061046052620138976105a05160031b0162005f0b565b90549060031b1c166104e051620170cc565b156200cdba575b6200cdb06102805162005b81565b610280526200cd4a565b996200cdee906000610460528c6200200d826001600160a01b036200864061028051620138976105a05160031b0162005f0b565b996200cda2565b509a939794969299919850946000915b8383106200ce9e57505050506104605162005bb5578051906001600160401b03821162003f1a576020906200ce4683620138976105a05160031b016200611d565b01620138976105a05160031b01600052602060002060005b8381106200ce8057505050506200ce759062005b81565b90929591956200cb59565b60019060206001600160a01b0385511694019381840155016200ce5e565b620087236200cebb916001600160a01b0362009a30868662005bed565b916200ce05565b9295505092506200c727915062005b81565b9092602081015160268110156200409c576004036200d504576040016200cf0060c08251015162005ba7565b51936200cf1260c08351015162005bcb565b51906200cf2960a062007c9f818651015162005ba7565b51936200cf3e875184511462001929620174fa565b6200cf51875185511462001929620174fa565b6200cf64875186511462001929620174fa565b60005b87518110156200cfcf576200cf7d818662005bed565b519061271082101562005bb557620138966200cfc9926001600160a01b036200cfa7848d62005bed565b511660005260031b016020526200054f6040600020546200822b838a62005bed565b6200cf67565b509095919593929360005b83518110156200d134576200cff0818762005bed565b5161271081101562005bb55762013896906001600160a01b036200d015848862005bed565b511660005260031b016020526200d03760406000205462008299838862005bed565b906200d044838962005bed565b519161271083101562005bb557620138966200d08a936001600160a01b036200d06e878b62005bed565b511660005260031b016020526040600020556200192962017621565b6200d096818762005bed565b5161271081101562005bb55762013896906001600160a01b036200d0bb848c62005bed565b511660005260031b016020526200d0dd6040600020546200733c838862005bed565b9190506200d0ec818862005bed565b519161271083101562005bb557620138966200d12e936001600160a01b036200d116858e62005bed565b511660005260031b0160205260406000205562005b81565b6200cfda565b5091936200d150919350620089a26200899b919796976201723d565b6000945b80518610156200c715576200d16a868262005bed565b51610340526200d17b855162005d44565b966000946200d18b845162005d44565b6101a05260009460005b88518110156200d25f578a896200d1c56001600160a01b036200d1b9858462005bed565b51166103405162017072565b15806200d216575b6200d1e6575b50506200d1e09062005b81565b6200d195565b986200d20b916200200d826001600160a01b036200c40e879e976200d1e09862005bed565b9790508a896200d1d3565b50505061271061034051101562005bb5576001600160a01b036200d23b828b62005bed565b5116600052620138966103405160031b016020528a8960406000205415156200d1cd565b50909895979498969291939660005b88518110156200d2fe5761271061034051101562005bb5576001600160a01b03806200d29b838c62005bed565b5116600052620138966103405160031b01602052604060002054156200d2ce575b506200d2c89062005b81565b6200d26e565b819b6200d2f6916200d2e56200d2c8948d62005bed565b51166200200d826101a05162005bed565b9a906200d2bc565b5098509695929190939661034051612710811015806102c05262005bb55760031b620138970154986200d33662008597898c6201542e565b6105005260006103e052600060c0525b6102c05162005bb55760c0518a8110156200d40b576200d37c6200d39a9160006102c052620138976103405160031b0162005f0b565b91906001600160a01b03928391549060031b1c166101a051620170cc565b156200d3b8575b506200d3af60c05162005b81565b60c0526200d346565b60006102c0526200d3d760c051620138976103405160031b0162005f0b565b90549060031b1c166200d3f16103e0516105005162005bed565b526200d4006103e05162005b81565b6103e052386200d3a1565b50979294959093985095909560005b8281106200d4b8575050506102c05162005bb55761050051516001600160401b03811162003f1a576200d45981620138976103405160031b016200611d565b60206105005101620138976103405160031b01600052602060002060005b8381106200d49a57505050506200d48e9062005b81565b9492959091956200d154565b60019060206001600160a01b0385511694019381840155016200d477565b806001600160a01b036200d4d16200d4fe938562005bed565b51166200d4e56103e0516105005162005bed565b526200d4f46103e05162005b81565b6103e05262005b81565b6200d41a565b9290602084015160268110156200409c576005036200da7f5760408401906200d53760a062008a0b818551015162005ba7565b519282518451036200da155760005b83518110156200d5a3576200d55c818562005bed565b519061271082101562005bb557620138966200d59d926001600160a01b038a511660005260031b016020526200054f6040600020546200822b838962005bed565b6200d546565b509060005b83518110156200d64e576200d5be818562005bed565b5161271081101562005bb55762013896906001600160a01b0389511660005260031b016020526200d5fa60406000205462008299838862005bed565b91906200d608828762005bed565b519061271082101562005bb5576200d64893620138966200054f936001600160a01b038d511660005260031b016020526040600020556200192962017621565b6200d5a8565b5094939250906200d65f906201723d565b936001600160a01b03604051946200d6778662003fa1565b600186526020368188013751166200d68f8562005ba7565b52604051926200d69f8462003fbd565b6000845260003681376000905b86518210156200cec2576200d6c2828862005bed565b516102e0526200d6d3855162005d44565b966000946200d6e3885162005d44565b6101e05260009460005b88518110156200d7b7578a896200d71d6001600160a01b036200d711858462005bed565b51166102e05162017072565b15806200d76e575b6200d73e575b50506200d7389062005b81565b6200d6ed565b986200d763916200200d826001600160a01b036200c40e879e976200d7389862005bed565b9790508a896200d72b565b5050506127106102e051101562005bb5576001600160a01b036200d793828b62005bed565b5116600052620138966102e05160031b016020528a8960406000205415156200d725565b509098949897969291939760005b88518110156200d85b576127106102e051101562005bb5576001600160a01b036200d7f1828b62005bed565b5116600052620138966102e05160031b01602052604060002054156200d823575b6200d81d9062005b81565b6200d7c5565b996200d8526200d81d916001600160a01b036200d8418e8d62005bed565b51166200200d826101e05162005bed565b9a90506200d812565b5098509694939291956102e051612710811015806104405262005bb55760031b620138970154966200d89262008597878a6201542e565b9960009960006106a0525b6104405162005bb5576106a0518a8110156200d948576001600160a01b036200d8dc6200d8ee92600061044052620138976102e05160031b0162005f0b565b90549060031b1c166101e051620170cc565b156200d90d575b6200d9036106a05162005b81565b6106a0526200d89d565b996200d941906000610440528c6200200d826001600160a01b03620086406106a051620138976102e05160031b0162005f0b565b996200d8f5565b509a939794969299919850946000915b8383106200d9f157505050506104405162005bb5578051906001600160401b03821162003f1a576020906200d99983620138976102e05160031b016200611d565b01620138976102e05160031b01600052602060002060005b8381106200d9d357505050506200d9c89062005b81565b90929591956200d6ac565b60019060206001600160a01b0385511694019381840155016200d9b1565b620087236200da0e916001600160a01b0362009a30868662005bed565b916200d958565b608460405162461bcd60e51b815260206004820152603560248201527f546865206c656e677468206f6620746f6b656e436c61737320616e6420746f6b60448201527f656e416d6f756e74206973206e6f7420657175616c00000000000000000000006064820152fd5b92602081015160268110156200409c576006036200e09d576040016200daaa60c08251015162005ba7565b51936200dac160a062008a0b818551015162005ba7565b519285518351036200e0335785518451036200dfc95760005b86518110156200db42576200daf0818562005bed565b519061271082101562005bb557620138966200db3c926001600160a01b036200db1a848c62005bed565b511660005260031b016020526200054f6040600020546200822b838962005bed565b6200dada565b509060005b86518110156200dbe7576200db5d818562005bed565b5161271081101562005bb55762013896906001600160a01b036200db82848b62005bed565b511660005260031b016020526200dba460406000205462008299838862005bed565b91906200dbb2828762005bed565b519061271082101562005bb5576200dbe193620138966200054f936001600160a01b036200d06e878f62005bed565b6200db47565b50916200dbfe9193506200899b909594956201723d565b91604051926200dc0e8462003fbd565b6000845260003681376000945b80518610156200c715576200dc31868262005bed565b51610320526200dc42855162005d44565b966000946200dc52845162005d44565b6106c05260009460005b88518110156200dd26578a896200dc8c6001600160a01b036200dc80858462005bed565b51166103205162017072565b15806200dcdd575b6200dcad575b50506200dca79062005b81565b6200dc5c565b986200dcd2916200200d826001600160a01b036200c40e879e976200dca79862005bed565b9790508a896200dc9a565b50505061271061032051101562005bb5576001600160a01b036200dd02828b62005bed565b5116600052620138966103205160031b016020528a8960406000205415156200dc94565b50909895979498969291939660005b88518110156200ddc55761271061032051101562005bb5576001600160a01b03806200dd62838c62005bed565b5116600052620138966103205160031b01602052604060002054156200dd95575b506200dd8f9062005b81565b6200dd35565b819b6200ddbd916200ddac6200dd8f948d62005bed565b51166200200d826106c05162005bed565b9a906200dd83565b5098509695929190939661032051612710811015806107205262005bb55760031b620138970154986200ddfd62008597898c6201542e565b61064052600060e05260006103a0525b6107205162005bb5576103a0518a8110156200ded3576200de446200de6291600061072052620138976103205160031b0162005f0b565b91906001600160a01b03928391549060031b1c166106c051620170cc565b156200de82575b506200de786103a05162005b81565b6103a0526200de0d565b6000610720526200dea26103a051620138976103205160031b0162005f0b565b90549060031b1c166200debb60e0516106405162005bed565b526200dec960e05162005b81565b60e052386200de69565b50979294959093985095909560005b8281106200df80575050506107205162005bb55761064051516001600160401b03811162003f1a576200df2181620138976103205160031b016200611d565b60206106405101620138976103205160031b01600052602060002060005b8381106200df6257505050506200df569062005b81565b9492959091956200dc1b565b60019060206001600160a01b0385511694019381840155016200df3f565b806001600160a01b036200df996200dfc3938562005bed565b51166200dfac60e0516106405162005bed565b526200dfba60e05162005b81565b60e05262005b81565b6200dee2565b608460405162461bcd60e51b815260206004820152603060248201527f546865206c656e677468206f662061646472657373657320616e6420616d6f7560448201527f6e7473206973206e6f7420657175616c000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b815260206004820152603560248201527f546865206c656e677468206f662061646472657373657320616e6420746f6b6560448201527f6e436c6173736573206973206e6f7420657175616c00000000000000000000006064820152fd5b60208194929394015160268110156200409c576007036200e25457604001916200e0cc60c08451015162005ba7565b51916200e0de60a08551015162005ba7565b51935151916200e0f6845186511462001929620174fa565b60005b84518110156200e242576001600160a01b03806200e118838862005bed565b511660005262027113806020526200e13d60ff604060002054161562001929620175e6565b60026200e14b848862005bed565b516200e1c06200e15c868c62005bed565b519162008fdf8b604051966200e1728862003efe565b60018852886200e1998b60208b01946000865260408c0197885260608c01998a5262005bed565b511660005260205262008fc8604060002097511515889060ff801983541691151516179055565b519101556200e1d0828762005bed565b511690620271145491600160401b83101562003f1a576001830180620271145583101562005bb5576200e23c92620271146000527f8e71c125ecfe4aeed61c8cf4b09183dd0bf2a3230d826486f04e5f6f0de58e2c01906001600160a01b031982541617905562005b81565b6200e0f9565b5094915092506200c727915062005b81565b602081015160268110156200409c576008036200e3435760c060406200e27e920151015162005ba7565b519160005b83518110156200e334576200e32e906001600160a01b03806200e2a7838862005bed565b51166000526202711390816020526200e2d1600160ff604060002054161515146200192962017535565b806200e2de848962005bed565b5116600052816020526200e30260ff60406000205460081c161562001929620175ab565b6200e30e838862005bed565b5116600052602052604060002061010061ff001982541617905562005b81565b6200e283565b50926200c72791925062005b81565b602081015160268110156200409c576009036200e4235760c060406200e36d920151015162005ba7565b519160005b83518110156200e334576200e41d906001600160a01b03806200e396838862005bed565b51166000526202711390816020526200e3c0600160ff604060002054161515146200192962017535565b806200e3cd848962005bed565b5116600052816020526200e3f5600160ff60406000205460081c161515146200192962017570565b6200e401838862005bed565b5116600052602052604060002061ff0019815416905562005b81565b6200e372565b602081015160268110156200409c57600a036200e50c57604001906200e45f60a06200e45460c08551015162005ba7565b519351015162005ba7565b51926200e474835185511462001929620174fa565b60005b83518110156200e4fb576200e4f5906001600160a01b03806200e49b838862005bed565b511660005262027113806020526200e4c4600160ff604060002054161515146200192962017535565b6200e4d0838962005bed565b51916200e4de848962005bed565b511660005260205260026040600020015562005b81565b6200e477565b50939092506200c727915062005b81565b60208194939294015160268110156200409c57600b036200e5ed57604001926200e53b60c08551015162005ba7565b51935151916200e553855184511462001929620174fa565b60005b85518110156200e5dd576200e5d7906200054f6001600160a01b03806200e57e848b62005bed565b511660005262027113806020526200e5a7600160ff604060002054161515146200192962017535565b6200e5b3848962005bed565b51916200e5c1858c62005bed565b51166000526020526001604060002001620067d9565b6200e556565b509350916200c727915062005b81565b909192602082015160268110156200409c57600c036200e73c57606060408301510151926200e61c84620154d5565b60005b84518110156200e4fb5760e06200e63f8260606040880151015162005bed565b510151156200e6c5576200e6676200e6608260606040880151015162005bed565b5162006e4d565b62027115548060001981011162005b91576200e6896005916000190162006d7a565b5001805461ff0019166101001790556202711554906000198201821062005b91576005620094486200e6bf936000190162006d7a565b6200e61f565b6200e6e46200e6dd8260606040880151015162005bed565b5162006e29565b62027116548060001981011162005b91576200e7066005916000190162006cfe565b5001805461ff0019166101001790556202711654906000198201821062005b91576005620094486200e6bf936000190162006cfe565b929190602081015160268110156200409c57600d036200e885576040019260206200e76c60a08651015162005ba7565b5194510151916200e781855184511462015dd4565b60005b85518110156200e5dd57806200e79f6200e819928662005bed565b51156200e81f576200e7c36200e7b6828962005bed565b5162027115541162015e6c565b6200e7ef60ff60056200e7e26200e7db858c62005bed565b5162006d7a565b50015460081c1662015ec3565b6200e80760ff6005620095a66200e7db858c62005bed565b6005620095c26200e7db838a62005bed565b6200e784565b6200e83c6200e82f828962005bed565b5162027116541162015e6c565b6200e85b60ff60056200e7e26200e854858c62005bed565b5162006cfe565b6200e87360ff6005620095a66200e854858c62005bed565b6005620095c26200e854838a62005bed565b602081015160268110156200409c57600e036200e9bd576040019260206200e8b260a08651015162005ba7565b5194510151916200e8c7855184511462015dd4565b60005b85518110156200e5dd57806200e8e56200e958928662005bed565b51156200e95e576200e9096200e8fc828962005bed565b5162027115541162015fa7565b6200e92e60ff60056200e9216200e7db858c62005bed565b50015460081c1662016019565b6200e94660ff6005620097006200e7db858c62005bed565b6005620094486200e7db838a62005bed565b6200e8ca565b6200e97b6200e96e828962005bed565b5162027116541162015fa7565b6200e99360ff60056200e9216200e854858c62005bed565b6200e9ab60ff6005620097006200e854858c62005bed565b6005620094486200e854838a62005bed565b909192602082015160268110156200409c57600f036200eafe57606060408301510151926200e9ec84620154d5565b60005b84518110156200e4fb5760e06200ea0f8260606040880151015162005bed565b510151156200ea8e576200ea306200e6608260606040880151015162005bed565b62027115548060001981011162005b91576200ea526005916000190162006d7a565b5001805461ff0019166101001790556202711554906000198201821062005b91576005620095c26200ea88936000190162006d7a565b6200e9ef565b6200eaa66200e6dd8260606040880151015162005bed565b62027116548060001981011162005b91576200eac86005916000190162006cfe565b5001805461ff0019166101001790556202711654906000198201821062005b91576005620095c26200ea88936000190162006cfe565b929190602081015160268110156200409c576010036200ec475760400151926200eb3160a0608086015195015162005ba7565b51916200eb46855184511462001929620174fa565b60005b85518110156200e5dd57806200eb646200ebda928862005bed565b516200eb708162004eaa565b6200eb7c828762005bed565b51906200eb898162004eaa565b6200eba06200eb976201765c565b82151562005b4e565b6200ebab8162004eaa565b600181036200ebe057506200ebcf6200ebc36201765c565b61271083111562005b4e565b6202711e5562005b81565b6200eb49565b6200ebeb8162004eaa565b600281036200ec0057506202711f5562005b81565b6200ec0b8162004eaa565b600381036200ec205750620271205562005b81565b806200ec2e60049262004eaa565b146200ec3b575062005b81565b6202712155386200a911565b602081015160268110156200409c576011036200ef0457604001906200ec7860a06200e45460c08551015162005ba7565b51936200ec898351865114620153e2565b60005b83518110156200ed0a576200ed04906200ece46001600160a01b03806200ecb4848962005bed565b51166000526202711890816020526200ecd86040600020546200733c868d62005bed565b93906200192962017499565b6200ecf0848962005bed565b511660005260205260406000205562005b81565b6200ec8c565b509350906200ed199062017121565b906202711954936200ed31620085978451876201542e565b9060009260005b8781106200eec6575060005b85518110156200edf8576000805b8981106200eda9575b50156200ed74575b6200ed6e9062005b81565b6200ed44565b936200eda06200ed6e916001600160a01b036200ed92888a62005bed565b51166200200d828862005bed565b9490506200ed63565b6200edb48162005e99565b906001600160a01b03918291549060031b1c16906200edd4858b62005bed565b5116146200eded576200ede79062005b81565b6200ed52565b50506001386200ed5b565b5095509392506200ee098262005d44565b8051906001600160401b03821162003f1a576020906200ee298362006014565b016202711960005260005b8281106200ee885750505060005b8281106200ee58575050506200c7279062005b81565b806200054f6001600160a01b036200ee756200ee82948662005bed565b511662001f308362005e99565b6200ee42565b60019060206001600160a01b03845116930192817fe43a1016fd4ea9a9b882244b4d001d1f2d6b7fe146dc2643bb2c59db4a7bb0e10155016200ee34565b936200eef76200eefe916001600160a01b036200eee38862005e99565b90549060031b1c166200200d828862005bed565b9462005b81565b6200ed38565b602081949294015160268110156200409c576012036200f16f57604001906200ef3860a06200e45460c08551015162005ba7565b51936200ef498351865114620153e2565b60005b83518110156200ef9e576200ef98906200ece46001600160a01b03806200ef74848962005bed565b51166000526202711890816020526200ecd860406000205462008299868d62005bed565b6200ef4c565b50935091906200efae9062017121565b62027119546200efbe8162005d44565b906000926000915b8083106200f08c575050506200efdc8262005d44565b8051906001600160401b03821162003f1a576020906200effc8362006014565b016202711960005260005b8281106200f04e5750505060005b8281106200f02b575050506200c7279062005b81565b806200054f6001600160a01b036200ee756200f048948662005bed565b6200f015565b60019060206001600160a01b03845116930192817fe43a1016fd4ea9a9b882244b4d001d1f2d6b7fe146dc2643bb2c59db4a7bb0e10155016200f007565b91956000959193959760005b85518110156200f160576200f0ad8962005e99565b906001600160a01b03918291549060031b1c16906200f0cd838962005bed565b5116146200f0e6576200f0e09062005b81565b6200f098565b509750956001959391955b806200f12d575b156200f110576200f1099062005b81565b916200efc6565b936200eef76200f109916001600160a01b036200eee38862005e99565b506001600160a01b036200f1418262005e99565b90549060031b1c1660005262027118602052604060002054156200f0f8565b5097969096959391956200f0f1565b602081949394015160268110156200409c576013036200f2135760408091015101519160005b83518110156200e334576200f1ab818562005bed565b51906202711754600160401b81101562003f1a576001810180620271175581101562005bb5576200f20d9260076200054f9262027117600052027f08f37177f6a5732df494aeff73d589b534878a053b84dfe1e41c467868b7c9fd01620168c1565b6200f195565b60208194939294015160268110156200409c576014036200f75857604001906200f24260c08351015162005ba7565b51936200f25960a062007c9f818651015162005ba7565b51916200f26a8651855114620160fd565b6200f27986518451146201616f565b60005b86518110156200f375576200f292818562005bed565b516200f29f828762005bed565b519061271082101562005bb557620138996200f2c19260031b01549062007088565b906200f2ce838862005bed565b519161271083101562005bb557620138996200f2ef9360031b015562016238565b6200f2fb818562005bed565b516200f308828762005bed565b519061271082101562005bb557620138966200f332926001600160a01b036200c2b0868d62005bed565b91906200f340828862005bed565b519061271082101562005bb5576200f36f93620138966200054f936001600160a01b036200c306878f62005bed565b6200f27c565b50926200f38c9192506200899b909594956201723d565b916040516200f39b8162003fbd565b6000815260003681376000945b80518610156200c715576200f3be868262005bed565b51610360526200f3cf855162005d44565b966000946200f3df845162005d44565b6105805260009460005b88518110156200f4b3578a896200f4196001600160a01b036200f40d858462005bed565b51166103605162017072565b15806200f46a575b6200f43a575b50506200f4349062005b81565b6200f3e9565b986200f45f916200200d826001600160a01b036200c40e879e976200f4349862005bed565b9790508a896200f427565b50505061271061036051101562005bb5576001600160a01b036200f48f828b62005bed565b5116600052620138966103605160031b016020528a8960406000205415156200f421565b50909895979498969291939660005b88518110156200f5525761271061036051101562005bb5576001600160a01b03806200f4ef838c62005bed565b5116600052620138966103605160031b01602052604060002054156200f522575b506200f51c9062005b81565b6200f4c2565b819b6200f54a916200f5396200f51c948d62005bed565b51166200200d826105805162005bed565b9a906200f510565b5098509695929190939661036051612710811015806105205262005bb55760031b620138970154986200f58a62008597898c6201542e565b61022052600061056052600060a0525b6105205162005bb55760a0518a8110156200f65f576200f5d06200f5ee91600061052052620138976103605160031b0162005f0b565b91906001600160a01b03928391549060031b1c1661058051620170cc565b156200f60c575b506200f60360a05162005b81565b60a0526200f59a565b6000610520526200f62b60a051620138976103605160031b0162005f0b565b90549060031b1c166200f645610560516102205162005bed565b526200f6546105605162005b81565b61056052386200f5f5565b50979294959093985095909560005b8281106200f70c575050506105205162005bb55761022051516001600160401b03811162003f1a576200f6ad81620138976103605160031b016200611d565b60206102205101620138976103605160031b01600052602060002060005b8381106200f6ee57505050506200f6e29062005b81565b9492959091956200f3a8565b60019060206001600160a01b0385511694019381840155016200f6cb565b806001600160a01b036200f7256200f752938562005bed565b51166200f739610560516102205162005bed565b526200f7486105605162005b81565b6105605262005b81565b6200f66e565b92602084015160268110156200409c576015036200fd105760408401906200f78560c08351015162005ba7565b51906200f79c60a062007c9f818651015162005ba7565b51936200f7b1835185511462001929620174fa565b6200f7c4835186511462001929620174fa565b60005b83518110156200f824576200f7dd818662005bed565b519061271082101562005bb557620138966200f81e926001600160a01b038b511660005260031b016020526200054f6040600020546200822b838a62005bed565b6200f7c7565b509095919560005b87518110156200f95d576200f842818662005bed565b5161271081101562005bb55762013896906001600160a01b0386511660005260031b016020526200f87e60406000205462008299838962005bed565b906200f88b838862005bed565b519161271083101562005bb557620138966200f8c6936001600160a01b0389511660005260031b016020526040600020556200192962017621565b6200f8d2818662005bed565b5161271081101562005bb55762013896906001600160a01b036200f8f7848c62005bed565b511660005260031b016020526200f9196040600020546200733c838962005bed565b91906200f927828862005bed565b519061271082101562005bb5576200f95793620138966200054f936001600160a01b036200caed8f889062005bed565b6200f82c565b509194935091620089a26200f972916201723d565b926001600160a01b03604051956200f98a8762003fa1565b600187526020368189013751166200f9a28662005ba7565b526000905b86518210156200cec2576200f9bd828862005bed565b51610160526200f9ce855162005d44565b966000946200f9de885162005d44565b6101c05260009460005b88518110156200fab2578a896200fa186001600160a01b036200fa0c858462005bed565b51166101605162017072565b15806200fa69575b6200fa39575b50506200fa339062005b81565b6200f9e8565b986200fa5e916200200d826001600160a01b036200c40e879e976200fa339862005bed565b9790508a896200fa26565b50505061271061016051101562005bb5576001600160a01b036200fa8e828b62005bed565b5116600052620138966101605160031b016020528a8960406000205415156200fa20565b509098949897969291939760005b88518110156200fb565761271061016051101562005bb5576001600160a01b036200faec828b62005bed565b5116600052620138966101605160031b01602052604060002054156200fb1e575b6200fb189062005b81565b6200fac0565b996200fb4d6200fb18916001600160a01b036200fb3c8e8d62005bed565b51166200200d826101c05162005bed565b9a90506200fb0d565b50985096949392919561016051612710811015806106205262005bb55760031b620138970154966200fb8d62008597878a6201542e565b996000996000610700525b6106205162005bb557610700518a8110156200fc43576001600160a01b036200fbd76200fbe992600061062052620138976101605160031b0162005f0b565b90549060031b1c166101c051620170cc565b156200fc08575b6200fbfe6107005162005b81565b610700526200fb98565b996200fc3c906000610620528c6200200d826001600160a01b036200864061070051620138976101605160031b0162005f0b565b996200fbf0565b509a939794969299919850946000915b8383106200fcec57505050506106205162005bb5578051906001600160401b03821162003f1a576020906200fc9483620138976101605160031b016200611d565b01620138976101605160031b01600052602060002060005b8381106200fcce57505050506200fcc39062005b81565b90929591956200f9a7565b60019060206001600160a01b0385511694019381840155016200fcac565b620087236200fd09916001600160a01b0362009a30868662005bed565b916200fc53565b909192602081015160268110156200409c576016036200fdd25760c060406200fd3d920151015162005ba7565b519160005b83518110156200e334576001600160a01b036200fd60828662005bed565b511690620271225491600160401b83101562003f1a576001830180620271225583101562005bb5576200fdcc92620271226000527f1f4fe3ad533e3985b88710ce05a205152f02825e155777f3bcb8b3bbfcfb03a201906001600160a01b031982541617905562005b81565b6200fd42565b602081015160268110156200409c576017036200fe3f57608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203233206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b602081015160268110156200409c576018036200ff0f5760c060406200fe69920151015162005ba7565b5191600160ff1962027125541617620271255560005b83518110156200e334576001600160a01b036200fe9d828662005bed565b511690620271245491600160401b83101562003f1a576001830180620271245583101562005bb5576200ff0992620271246000527f18baa939e2e21be0e012ec26e9ec87e9e6faa065bd9f5835250457786300ece801906001600160a01b031982541617905562005b81565b6200fe7f565b60208194929394015160268110156200409c576019036200ff37575b506200c7279062005b81565b602081015160268110156200409c57601a03620100c85760a060406200ff61920151015162005ba7565b51906200ff726003835114620153e2565b6200ff7d8262005ba7565b516200ff8d6200a8a88462005bcb565b519262010084576200c727926001036201007d576200ffb56201001f91620271205462007088565b6202712055604051906200ffc98262003f69565b603282527f6469766964656e6461626c652062616c616e6365206f766572666c6f7720776860208301527f656e2070726f63657373696e6720636173680000000000000000000000000000604083015262005b4e565b6201007662010032620271215462007075565b620271215560405190620100468262003fa1565b601a82527f6469766964656e647320636f756e746572206f766572666c6f77000000000000602083015262005b4e565b906200ff2b565b5062010076565b606460405162461bcd60e51b815260206004820152601460248201527f496e76616c6964207061796d656e7420747970650000000000000000000000006044820152fd5b602081015160268110156200409c57601b03620106f0575091906202711e54620100f56200a9906201733b565b62027121546202711f541115620101166201010f620173c2565b8262005b4e565b62027120549062010128838362006fe1565b50506201013462017423565b506000805b61271082106201063c575b505090620101746201017a93926201016a6201015f6201733b565b612710861062005b4e565b62001929620173c2565b62006fe1565b90506201018662017423565b5060009060005b612710811062010564575b5090612710620101a9920462007159565b9050620101ba6202712a5462005d44565b906000946000905b61271082101562010557578160031b9460ff6201389a87015416156201031e5760009662013895870154156201030d57600098975b62005bb55762013897870154891015620102f3576201021c8962013897890162005f0b565b90549060031b1c6001600160a01b03169788600052620138968801602052604098868a60002054906201024f9162006fe1565b9a906201025b62017423565b620102669162005b4e565b60009a620138958b01546201027b9162006fe1565b91906201028762017423565b620102929162005b4e565b826000526202711a60205260002090815490620102af9162007088565b909155620102bc62017423565b620102c79162005b4e565b620102d3828962005bed565b52620102df9062005b81565b98620102eb9062005b81565b9897620101f7565b92909550620103059196975062005b81565b9094620101c2565b929095506201030591965062005b81565b95969392509350505b620103328262005d44565b9160009160005b828110620104c2575050506202711b54916201035a6200859784846201542e565b926000906000905b8082106201049d57505060005b8381106201040857505050508051906001600160401b03821162003f1a576020906201039b836200606c565b016202711b60005260005b828110620103ca575050506200c72790600062027120556000620271215562010076565b60019060206001600160a01b03845116930192817fc59860dc09a642b584039e685e1d1ef32a7f12bf29c382ee17f417fe2f31f399015501620103a6565b6000805b83811062010455575b50156201042e575b620104289062005b81565b6201036f565b906201044c62010428916001600160a01b0362009a30858762005bed565b9190506201041d565b6001600160a01b03806201046a858862005bed565b51169062010479838a62005bed565b51161462010492576201048c9062005b81565b6201040c565b505060013862010415565b909162008723620104bb916001600160a01b0362009dc28662005ed2565b9062010362565b6000805b8581106201050f575b5015620104e8575b620104e29062005b81565b62010339565b9262010506620104e2916001600160a01b0362009a30878662005bed565b939050620104d7565b6001600160a01b038062010524858762005bed565b51169062010533838a62005bed565b5116146201054c57620105469062005b81565b620104c6565b5050600138620104cf565b9394959291505062010327565b90918160039695961b60ff6201389a8201541615620106305762013895810154620138978201546000928391825b818410620105ce575050505062007b33620105c593620105bd6200054f9796946200713f9462006fe1565b929062006e71565b9493946201018d565b94929462005bb5576201062985620106216001600160a01b03620105fc6200054f9962013897880162005f0b565b90549060031b1c16956000966000526201389686016020526040600020549062007088565b979062007003565b9262010592565b50919094939462010198565b8160039897981b60ff6201389a8201541615620106e6576201389581015490600062013897820154916000926000925b818410620106a9575050505062007b336201069f936200adbf846201017462006f2d6200adcb966200054f9a9862006fe1565b9096959662010139565b93929362005bb557620106df84620106d76001600160a01b03620105fc6200054f9862013897880162005f0b565b969062007003565b926201066c565b5096959662010144565b602081015160268110156200409c57601c036201075d57608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203238206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b602081015160268110156200409c57601d0362010781575b506200c7279062010076565b602081015160268110156200409c57601e146201077557602081015160268110156200409c57601f0362010825576040620107bf9101515162005ba7565b51906202712354600160401b81101562003f1a576001810180620271235581101562005bb5576200c727926201081e91620271236000527f4ad859a97f543436e70c22b09d31fb4c7b9e987d7a008c98817c9b50a97b122401620067d9565b9062010775565b602081015160268110156200409c5760200362010849575b506200c727906201081e565b602081015160268110156200409c576021146201083d57602081015160268110156200409c57602203620108f0575060ff19620271255416620271255562027124546000620271245580620108a7575b506200c727905b906201083d565b620271246000527f18baa939e2e21be0e012ec26e9ec87e9e6faa065bd9f5835250457786300ece8908101905b818110620108e3575062010899565b60008155600101620108d4565b602081015160268110156200409c5760230362010914575b506200c72790620108a0565b602081015160268110156200409c576024146201090857602081015160268110156200409c576025146201090857929091602084015160268110156200409c5760150362010f0f5760408401906201097160c08351015162005ba7565b51906201098860a062007c9f818651015162005ba7565b51936201099d835185511462001929620174fa565b620109b0835186511462001929620174fa565b60005b835181101562010a1057620109c9818662005bed565b519061271082101562005bb5576201389662010a0a926001600160a01b038b511660005260031b016020526200054f6040600020546200822b838a62005bed565b620109b3565b509095919560005b875181101562010b495762010a2e818662005bed565b5161271081101562005bb55762013896906001600160a01b0386511660005260031b0160205262010a6a60406000205462008299838962005bed565b9062010a77838862005bed565b519161271083101562005bb5576201389662010ab2936001600160a01b0389511660005260031b016020526040600020556200192962017621565b62010abe818662005bed565b5161271081101562005bb55762013896906001600160a01b0362010ae3848c62005bed565b511660005260031b0160205262010b056040600020546200733c838962005bed565b919062010b13828862005bed565b519061271082101562005bb55762010b4393620138966200054f936001600160a01b036200caed8f889062005bed565b62010a18565b509194935091620089a262010b5e916201723d565b926001600160a01b036040519562010b768762003fa1565b6001875260203681890137511662010b8e8662005ba7565b526000905b865182101562010efc5762010ba9828862005bed565b516106605262010bba855162005d44565b9660009462010bca885162005d44565b6106e05260009460005b885181101562010c9e578a8962010c046001600160a01b0362010bf8858462005bed565b51166106605162017072565b158062010c55575b62010c25575b505062010c1f9062005b81565b62010bd4565b9862010c4a916200200d826001600160a01b036200c40e879e9762010c1f9862005bed565b9790508a8962010c12565b50505061271061066051101562005bb5576001600160a01b0362010c7a828b62005bed565b5116600052620138966106605160031b016020528a89604060002054151562010c0c565b509098949897969291939760005b885181101562010d425761271061066051101562005bb5576001600160a01b0362010cd8828b62005bed565b5116600052620138966106605160031b016020526040600020541562010d0a575b62010d049062005b81565b62010cac565b9962010d3962010d04916001600160a01b0362010d288e8d62005bed565b51166200200d826106e05162005bed565b9a905062010cf9565b50985096949392919561066051612710811015806104005262005bb55760031b6201389701549662010d7962008597878a6201542e565b9960009960006105c0525b6104005162005bb5576105c0518a81101562010e2f576001600160a01b0362010dc362010dd592600061040052620138976106605160031b0162005f0b565b90549060031b1c166106e051620170cc565b1562010df4575b62010dea6105c05162005b81565b6105c05262010d84565b9962010e28906000610400528c6200200d826001600160a01b03620086406105c051620138976106605160031b0162005f0b565b9962010ddc565b509a939794969299919850946000915b83831062010ed857505050506104005162005bb5578051906001600160401b03821162003f1a5760209062010e8083620138976106605160031b016200611d565b01620138976106605160031b01600052602060002060005b83811062010eba575050505062010eaf9062005b81565b909295919562010b93565b60019060206001600160a01b03855116940193818401550162010e98565b6200872362010ef5916001600160a01b0362009a30868662005bed565b9162010e3f565b9295505092506200c72791509062010908565b606460405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206f7065726174696f6e2074797065000000000000000000006044820152fd5b5091905062010f62816201486e565b9060068110156200409c576002810362010fce5760405162461bcd60e51b815260206004820152602a60248201527f5468652070726f6772616d2069732064656e6965642062792074686520706c7560448201526967696e2073797374656d60b01b6064820152608490fd5b600381036201109a5750303b1562003ee4579060405180927f74579b180000000000000000000000000000000000000000000000000000000082526044820160406004840152815180915260206064840192019060005b81811062011080575050506201104b8291600094600319848303016024850152620055c7565b038183305af180156201107457620110605750565b6001600160401b03811162003f1a57604052565b6040513d6000823e3d90fd5b825184528694506020938401939092019160010162011025565b6005915014620110a75750565b906000905b602083015180518310156200b5b45782620110c79162005bed565b51602081015160268110156200409c57156200b57057602081015160268110156200409c576001036201130657604001906201110860c08351015162005ba7565b51936201111f60a062007c9f818651015162005ba7565b5191620111308651855114620160fd565b6201113f86518451146201616f565b60005b8651811015620112945762011158818662005bed565b5161271081101562005bb557600160ff60076201117e9360031b015416151514620161e1565b6201118a818562005bed565b5162011197828762005bed565b519061271082101562005bb5576006620111b79260031b01549062007088565b90620111c4838862005bed565b519161271083101562005bb5576006620111e39360031b015562016238565b620111ef818562005bed565b51620111fc828762005bed565b519061271082101562005bb55760036201123c926001600160a01b0362011224868d62005bed565b5116600052811b016020526040600020549062007088565b91906201124a828862005bed565b519061271082101562005bb5576201128e9360036200054f936001600160a01b0362011277878f62005bed565b5116600052811b01602052604060002055620162aa565b62011142565b50949150916200838a620112a8916201723d565b9360405192620112b88462003fbd565b60008452600036813760005b8351811015620112e957806200054f62007e66620112e3938762005bed565b620112c4565b5094509260209250620112fd915062005b81565b919050620110ac565b909192602082015160268110156200409c576002036201149d57604080920190815193845191620113406200c76a60a08098015162005ba7565b51948351875103620080fd578351855103620080945783518651036200802b575060005b865181101562011487576201137a818862005bed565b5161271081101562005bb55760ff60076201139c9260031b015416156201631b565b620113a8818862005bed565b5161271081101562005bb55760031b600701805460ff19166001179055620113d1818562005bed565b51620113de828962005bed565b519061271082101562005bb5576005620113fc9260031b01620067d9565b62011408818662005bed565b5162011415828962005bed565b5161271081101562005bb55760031b6001015562011434818762005bed565b5162011441828962005bed565b5161271081101562005bb55760031b6002015562011460818862005bed565b519061271082101562005bb55760006006620114819360031b015562005b81565b62011364565b50959150935060209250620112fd915062005b81565b929190602081015160268110156200409c57600303620114ca57602091926200054f620112fd9262016367565b602081015160268110156200409c576004036201176f57620114f460c06040830151015162005ba7565b51936201150960c06040840151015162005bcb565b51906201153060a06040620115248282880151015162005ba7565b51950151015162005bcb565b519362011545875184511462001929620174fa565b62011558875185511462001929620174fa565b6201156b875186511462001929620174fa565b60005b8751811015620115d35762011584818662005bed565b519061271082101562005bb5576003620115cd926001600160a01b03620115ac848d62005bed565b5116600052811b016020526200054f6040600020546200822b838a62005bed565b6201156e565b509095919593929360005b83518110156201172c57620115f4818762005bed565b5161271081101562005bb5576003906001600160a01b0362011617848862005bed565b5116600052811b016020526201163860406000205462008299838862005bed565b9062011645838962005bed565b519161271083101562005bb557600362011688936001600160a01b036201166d878b62005bed565b5116600052811b016020526040600020556200192962017621565b62011694818762005bed565b5161271081101562005bb5576003906001600160a01b03620116b7848c62005bed565b5116600052811b01602052620116d86040600020546200733c838862005bed565b919050620116e7818862005bed565b519161271083101562005bb557600362011726936001600160a01b036201170f858e62005bed565b5116600052811b0160205260406000205562005b81565b620115de565b50936201174691929693506200899b620089a2916201723d565b9260005b8351811015620112e957806200054f62007e6662011769938762005bed565b6201174a565b92602084015160268110156200409c576005036201193e576201179a60a06040860151015162005ba7565b5190620117af60a06040870151015162005bcb565b519282518451036200da155760005b83518110156201181857620117d4818562005bed565b519061271082101562005bb557600362011812926001600160a01b038a5116600052811b016020526200054f6040600020546200822b838962005bed565b620117be565b509060005b8351811015620118bd5762011833818562005bed565b5161271081101562005bb5576003906001600160a01b03895116600052811b016020526201186c60406000205462008299838862005bed565b91906201187a828762005bed565b519061271082101562005bb557620118b79360036200054f936001600160a01b038d5116600052811b016020526040600020556200192962017621565b6201181d565b5094925090620118cd906201723d565b906001600160a01b0360405193620118e58562003fa1565b60018552602036818701375116620118fd8462005ba7565b52604051946201190d8662003fbd565b60008652600036813760005b8351811015620112e957806200054f62007e6662011938938762005bed565b62011919565b92602081015160268110156200409c5760060362011af4576040016201196960c08251015162005ba7565b51936201198060a062008a0b818551015162005ba7565b519285518351036200e0335785518451036200dfc95760005b8651811015620119fe57620119af818562005bed565b519061271082101562005bb5576003620119f8926001600160a01b03620119d7848c62005bed565b5116600052811b016020526200054f6040600020546200822b838962005bed565b62011999565b509060005b865181101562011a9e5762011a19818562005bed565b5161271081101562005bb5576003906001600160a01b0362011a3c848b62005bed565b5116600052811b0160205262011a5d60406000205462008299838862005bed565b919062011a6b828762005bed565b519061271082101562005bb55762011a989360036200054f936001600160a01b036201166d878f62005bed565b62011a03565b50949162011ab39193506200838a906201723d565b916040519462011ac38662003fbd565b60008652600036813760005b8351811015620112e957806200054f62007e6662011aee938762005bed565b62011acf565b602081015160268110156200409c5760070362011c07576040019262011b1f60c08551015162005ba7565b519162011b3160a08651015162005ba7565b519451519162011b49845187511462001929620174fa565b60005b8451811015620112e95762011c01906200054f6001600160a01b038062011b74848a62005bed565b51166000528660028b62011bf162011bb48762011bac8162013880978860205262008f6360ff604060002054161562001929620175e6565b519362005bed565b519162008fdf8d6040519662011bca8862003efe565b60018852886200e1998c60208b01946000865260408c0197885260608c01998a5262005bed565b5191015562008ffa838962005bed565b62011b4c565b602081949394015160268110156200409c5760080362011c9f5760c0604062011c34920151015162005ba7565b519160005b835181101562011c8d5762011c87906001600160a01b038062011c5d838862005bed565b51166000526201388090816020526200e2d1600160ff604060002054161515146200192962017535565b62011c39565b50926020919250620112fd9062005b81565b602081015160268110156200409c5760090362011d225760c0604062011cc9920151015162005ba7565b519160005b835181101562011c8d5762011d1c906001600160a01b038062011cf2838862005bed565b51166000526201388090816020526200e3c0600160ff604060002054161515146200192962017535565b62011cce565b602081015160268110156200409c57600a0362011dd1576040019062011d5360a06200e45460c08551015162005ba7565b519262011d68835185511462001929620174fa565b60005b835181101562011dbe5762011db8906001600160a01b038062011d8f838862005bed565b511660005262013880806020526200e4c4600160ff604060002054161515146200192962017535565b62011d6b565b5093620112fd9193506020925062005b81565b60208194939294015160268110156200409c57600b0362011e85576040019262011e0060c08551015162005ba7565b519351519162011e18855184511462001929620174fa565b60005b855181101562011e725762011e6c906200054f6001600160a01b038062011e43848b62005bed565b511660005262013880806020526200e5a7600160ff604060002054161515146200192962017535565b62011e1b565b5093509160209150620112fd9062005b81565b909192602082015160268110156200409c57600c0362011fc6576060604083015101519262011eb484620154d5565b60005b845181101562011dbe5760e062011ed78260606040880151015162005bed565b5101511562011f565762011ef8620093f38260606040880151015162005bed565b62013882548060001981011162005b915762011f1a6005916000190162006d3c565b5001805461ff0019166101001790556201388254906000198201821062005b915760056200944862011f50936000190162006d3c565b62011eb7565b62011f6e620094728260606040880151015162005bed565b62013882548060001981011162005b915762011f906005916000190162006cc0565b5001805461ff0019166101001790556201388254906000198201821062005b915760056200944862011f50936000190162006cc0565b929190602081015160268110156200409c57600d03620120da5760400192602062011ff660a08651015162005ba7565b5194510151916201200b855184511462015dd4565b60005b855181101562011e7257806201202962012082928662005bed565b51156201208857620120406200956b828962005bed565b6201205860ff60056200e7e26200958d858c62005bed565b6201207060ff6005620095a66200958d858c62005bed565b6005620095c26200958d838a62005bed565b6201200e565b62012098620095fa828962005bed565b620120b060ff60056200e7e26200961c858c62005bed565b620120c860ff6005620095a66200961c858c62005bed565b6005620095c26200961c838a62005bed565b602081949294015160268110156200409c57600e03620121a1576040019060206201210a60a08451015162005ba7565b5192510151936201211f835186511462015dd4565b60005b835181101562011e7257806201213d62012149928862005bed565b516201214f5762005b81565b62012122565b6201215f620096b8828762005bed565b6201217760ff60056200e9216200958d858a62005bed565b6201218f60ff6005620097006200958d858a62005bed565b6005620094486200958d838862005bed565b90602082949394015160268110156200409c57600f03620122e35760606040830151015192620121d184620154d5565b60005b845181101562011dbe5760e0620121f48260606040880151015162005bed565b51015115620122735762012215620093f38260606040880151015162005bed565b62013882548060001981011162005b9157620122376005916000190162006d3c565b5001805461ff0019166101001790556201388254906000198201821062005b91576005620095c26201226d936000190162006d3c565b620121d4565b6201228b620094728260606040880151015162005bed565b62013882548060001981011162005b9157620122ad6005916000190162006cc0565b5001805461ff0019166101001790556201388254906000198201821062005b91576005620095c26201226d936000190162006cc0565b90602081949394015160268110156200409c57601003620123545760400151906201231760a0608084015193015162005ba7565b51936201232c835186511462001929620174fa565b60005b835181101562011e7257806200054f620098ad6201234e938762005bed565b6201232f565b602081949294015160268110156200409c57601103620125da57604001906201238860a06200e45460c08551015162005ba7565b5193620123998351865114620153e2565b60005b835181101562012414576201240e906200054f6001600160a01b0380620123c4848962005bed565b51166000526201388580602052620123e76040600020546200733c868d62005bed565b919092620123f6868b62005bed565b51166000526020526040600020556200192962017499565b6201239c565b50935090620124239062017121565b906201388654936201243b620085978451876201542e565b9060009260005b878110620125b7575060005b8551811015620124f4576000805b898110620124a5575b50156201247e575b620124789062005b81565b6201244e565b936201249c62012478916001600160a01b036200ed92888a62005bed565b9490506201246d565b620124b08162005db5565b906001600160a01b03918291549060031b1c1690620124d0858b62005bed565b511614620124e957620124e39062005b81565b6201245c565b505060013862012465565b509550939250620125058262005d44565b8051906001600160401b03821162003f1a57602090620125258362005f95565b016201388660005260005b828110620125795750505060005b8281106201255657505050620112fd60209162005b81565b806200054f6001600160a01b0362001f2362012573948662005bed565b6201253e565b60019060206001600160a01b03845116930192817f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa401550162012530565b936200eef7620125d4916001600160a01b036200eee38862005db5565b62012442565b602081949294015160268110156200409c576012036201284657604001906201260e60a06200e45460c08551015162005ba7565b51936201261f8351865114620153e2565b60005b835181101562012673576201266d906200054f6001600160a01b03806201264a848962005bed565b51166000526201388580602052620123e760406000205462008299868d62005bed565b62012622565b5093509190620126839062017121565b6201388654620126938162005d44565b906000926000915b8083106201276357505050620126b18262005d44565b8051906001600160401b03821162003f1a57602090620126d18362005f95565b016201388660005260005b828110620127255750505060005b8281106201270257505050620112fd60209162005b81565b806200054f6001600160a01b0362001f236201271f948662005bed565b620126ea565b60019060206001600160a01b03845116930192817f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa4015501620126dc565b91956000959193959760005b85518110156201283757620127848962005db5565b906001600160a01b03918291549060031b1c1690620127a4838962005bed565b511614620127bd57620127b79062005b81565b6201276f565b509750956001959391955b8062012804575b15620127e757620127e09062005b81565b916201269b565b936200eef7620127e0916001600160a01b036200eee38862005db5565b506001600160a01b03620128188262005db5565b90549060031b1c166000526201388560205260406000205415620127cf565b509796909695939195620127c8565b602081015160268110156200409c576013036201289f5760408091015101519260005b84518110156201288e57806200054f62009e6462012888938862005bed565b62012869565b50925090620112fd60209162005b81565b602081015160268110156200409c5760140362012a4a5760400190620128ca60c08351015162005ba7565b5193620128e160a062007c9f818651015162005ba7565b5191620128f28651855114620160fd565b6201290186518451146201616f565b60005b8651811015620129f5576201291a818562005bed565b5162012927828762005bed565b519061271082101562005bb5576006620129479260031b01549062007088565b9062012954838862005bed565b519161271083101562005bb5576006620129739360031b015562016238565b6201297f818562005bed565b516201298c828762005bed565b519061271082101562005bb5576003620129b4926001600160a01b0362011224868d62005bed565b9190620129c2828862005bed565b519061271082101562005bb557620129ef9360036200054f936001600160a01b0362011277878f62005bed565b62012904565b50949150916200838a62012a09916201723d565b936040519262012a198462003fbd565b60008452600036813760005b8351811015620112e957806200054f62007e6662012a44938762005bed565b62012a25565b9290602084015160268110156200409c5760150362012ffa57604084019062012a7860c08351015162005ba7565b519062012a8f60a062007c9f818651015162005ba7565b519362012aa4835185511462001929620174fa565b62012ab7835186511462001929620174fa565b60005b835181101562012b145762012ad0818662005bed565b519061271082101562005bb557600362012b0e926001600160a01b038b5116600052811b016020526200054f6040600020546200822b838a62005bed565b62012aba565b509095919560005b875181101562012c425762012b32818662005bed565b5161271081101562005bb5576003906001600160a01b03865116600052811b0160205262012b6b60406000205462008299838962005bed565b9062012b78838862005bed565b519161271083101562005bb557600362012bb0936001600160a01b03895116600052811b016020526040600020556200192962017621565b62012bbc818662005bed565b5161271081101562005bb5576003906001600160a01b0362012bdf848c62005bed565b5116600052811b0160205262012c006040600020546200733c838962005bed565b919062012c0e828862005bed565b519061271082101562005bb55762012c3c9360036200054f936001600160a01b03620083528f889062005bed565b62012b1c565b509194935091620089a262012c57916201723d565b926001600160a01b036040519562012c6f8762003fa1565b6001875260203681890137511662012c878662005ba7565b526000905b865182101562012fe55762012ca2828862005bed565b516101005262012cb3855162005d44565b9660009462012cc3885162005d44565b6101805260009460005b885181101562012d94578a8962012cfd6001600160a01b0362012cf1858462005bed565b51166101005162017008565b158062012d4e575b62012d1e575b505062012d189062005b81565b62012ccd565b9862012d43916200200d826001600160a01b036200c40e879e9762012d189862005bed565b9790508a8962012d0b565b50505061271061010051101562005bb5576001600160a01b0362012d73828b62005bed565b5116600052600361010051811b016020528a89604060002054151562012d05565b509098949897969291939760005b885181101562012e355761271061010051101562005bb5576001600160a01b0362012dce828b62005bed565b5116600052600361010051811b016020526040600020541562012dfd575b62012df79062005b81565b62012da2565b9962012e2c62012df7916001600160a01b0362012e1b8e8d62005bed565b51166200200d826101805162005bed565b9a905062012dec565b50985096949392919561010051612710811015806105e05262005bb55760031b600401549662012e6a62008597878a6201542e565b996000996000610540525b6105e05162005bb557610540518a81101562012f1c576001600160a01b0362012eb262012ec49260006105e05260046101005160031b0162005f0b565b90549060031b1c1661018051620170cc565b1562012ee3575b62012ed96105405162005b81565b6105405262012e75565b9962012f159060006105e0528c6200200d826001600160a01b03620086406105405160046101005160031b0162005f0b565b9962012ecb565b509a939794969299919850946000915b83831062012fc157505050506105e05162005bb5578051906001600160401b03821162003f1a5760209062012f6b8360046101005160031b016200611d565b0160046101005160031b01600052602060002060005b83811062012fa3575050505062012f989062005b81565b909295919562012c8c565b60019060206001600160a01b03855116940193818401550162012f81565b6200872362012fde916001600160a01b0362009a30868662005bed565b9162012f2c565b91945050620112fd9194506020925062005b81565b9092602081015160268110156200409c57601603620130585760c0604062013026920151015162005ba7565b519260005b84518110156201288e57806200054f6001600160a01b036200a5dc62013052948962005bed565b6201302b565b602081015160268110156200409c57601703620130c557608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203233206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b602081015160268110156200409c57601803620131325760c06040620130ef920151015162005ba7565b5192600160ff1962013892541617620138925560005b84518110156201288e57806200054f6001600160a01b036200a6b96201312c948962005bed565b62013105565b602081939293015160268110156200409c57601903620132bc5760008091604082910160a08082510151805162013283575b505051906001600160a01b03620131886200733560c060e086015195015162005ba7565b511690602083519301915af13d156201327a573d90620131a882620041b8565b91620131b8604051938462003fd9565b82523d6000602084013e5b15620131d75750620112fd60209162005b81565b62005b7d9062013259604051917f5468652063616c6c20746f2074686520636f6e7472616374206973206e6f742060208401527f7375636365737366756c2e2052657475726e20646174613a2000000000000000604084015282815162013248816059946020868601910162004106565b810103603981018452018262003fd9565b60405191829162461bcd60e51b83526020600484015260248301906200412b565b606090620131c3565b6201328e9062005ba7565b51516201329d575b8062013164565b8192506200733590620132b39251015162005ba7565b51903862013296565b602081015160268110156200409c57601a03620133765760a06040620132e6920151015162005ba7565b51620132f66003825114620153e2565b620133018162005ba7565b51916201331a620133128362005bcb565b519262005bdc565b51916201008457602092620112fd926001036200a911576201334562013354916201388d5462007088565b6201388d556200192962017423565b6200054f620133676201388e5462007075565b6201388e55620019296201745e565b602081015160268110156200409c57601b03620137ca57509190620133a76201388b54620070bf6200a9906201733b565b5050620133b362017423565b506000805b61271081106201377e575b5050620133cf6200709a565b620133de6202712a5462005d44565b906000946000905b61271082101562013771578160031b9460ff6007870154161562013536576000966002870154156201352557600098975b62005bb55760048701548910156201350b5762013438896004890162005f0b565b90549060031b1c6001600160a01b0316978860005260038801602052604098868a6000205490620134699162006fe1565b9a906201347562017423565b620134809162005b4e565b60009a60028b0154620134939162006fe1565b91906201349f62017423565b620134aa9162005b4e565b826000526201388760205260002090815490620134c79162007088565b909155620134d462017423565b620134df9162005b4e565b620134eb828962005bed565b52620134f79062005b81565b98620135039062005b81565b989762013417565b929095506201351d9196975062005b81565b9094620133e6565b929095506201351d91965062005b81565b95969392509350505b6201354a8262005d44565b9160009160005b828110620136dc57505050620138885491620135726200859784846201542e565b926000906000905b808210620136b757505060005b8381106201362257505050508051906001600160401b03821162003f1a57602090620135b38362005f3d565b016201388860005260005b828110620135e457505050620112fd60209160006201388d5560006201388e5562005b81565b60019060206001600160a01b03845116930192817ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df015501620135be565b6000805b8381106201366f575b501562013648575b620136429062005b81565b62013587565b906201366662013642916001600160a01b0362009a30858762005bed565b91905062013637565b6001600160a01b038062013684858862005bed565b51169062013693838a62005bed565b511614620136ac57620136a69062005b81565b62013626565b50506001386201362f565b909162008723620136d5916001600160a01b0362009dc28662005d7c565b906201357a565b6000805b85811062013729575b501562013702575b620136fc9062005b81565b62013551565b9262013720620136fc916001600160a01b0362009a30878662005bed565b939050620136f1565b6001600160a01b03806201373e858762005bed565b5116906201374d838a62005bed565b5116146201376657620137609062005b81565b620136e0565b5050600138620136e9565b939495929150506201353f565b8060039594951b9060ff60078301541615620137c0576200adcb62007b336200054f946200adbf620137b79560026200adb58762006ee3565b939293620133b8565b50939293620133c3565b602081015160268110156200409c57601c036201383757608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203238206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b602081015160268110156200409c57601d036201385d575b50620112fd60209162005b81565b602081015160268110156200409c57601e146201384f57602081015160268110156200409c57601f03620138ae57602091620138a66200aeb86040620112fd9401515162005ba7565b91506201384f565b602081015160268110156200409c57602003620138d4575b50620112fd602091620138a6565b602081015160268110156200409c57602114620138c657602081015160268110156200409c576022036201392a5750620112fd60209160ff19620138925416620138925562013922620060c4565b9150620138c6565b602081015160268110156200409c5760230362013950575b50620112fd60209162013922565b602081015160268110156200409c576024146201394257602081015160268110156200409c576025146201394257602081015160268110156200409c5760150362010f0f57602091620139a7620112fd9262016367565b915062013942565b60019060206001600160a01b03845116930192817fc59860dc09a642b584039e685e1d1ef32a7f12bf29c382ee17f417fe2f31f3990155016200c067565b60019060206001600160a01b03845116930192817fe43a1016fd4ea9a9b882244b4d001d1f2d6b7fe146dc2643bb2c59db4a7bb0e10155016200bf1b565b60016001600160a01b03819216920192835492817f18baa939e2e21be0e012ec26e9ec87e9e6faa065bd9f5835250457786300ece801550191906200be6b565b62013a9d90827f18baa939e2e21be0e012ec26e9ec87e9e6faa065bd9f5835250457786300ece8918201910162005f24565b386200be3d565b6001808262013ab582948662013fec565b019201920191906200bdfd565b620271236000527f4ad859a97f543436e70c22b09d31fb4c7b9e987d7a008c98817c9b50a97b1224908282015b818301811062013b015750506200bdaf565b8062013b0f60019262006448565b0162013aef565b60016001600160a01b03819216920192835492817f1f4fe3ad533e3985b88710ce05a205152f02825e155777f3bcb8b3bbfcfb03a201550191906200bd7e565b62013b8890827f1f4fe3ad533e3985b88710ce05a205152f02825e155777f3bcb8b3bbfcfb03a2918201910162005f24565b386200bd55565b60019060206001600160a01b03845116930192817f7f4320370b90cfd882bd4442421f8b4dbea0ca3aefc8d29d4787126914d53c5a0155016200bc19565b62013bff90847f7f4320370b90cfd882bd4442421f8b4dbea0ca3aefc8d29d4787126914d53c5a918201910162005f24565b386200bc0d565b60019060206001600160a01b03845116930192817f8e71c125ecfe4aeed61c8cf4b09183dd0bf2a3230d826486f04e5f6f0de58e2c0155016200ba04565b62013c7690847f8e71c125ecfe4aeed61c8cf4b09183dd0bf2a3230d826486f04e5f6f0de58e2c918201910162005f24565b386200b9f8565b8062013c9f9160031b600160ff60078301541615151462013ca5575062005b81565b6200b947565b62013cb96004820162013897830162014185565b6201389a8101600160ff1982541617905580548162013893015560018101546201389482015560028101546201389582015562013cff6005820162013898830162013fec565b620138996006820154910155386200a911565b600660208262013d266001945186620068ac565b019201920191906200b735565b600681810204810362005b9157600683810204830362005b9157620271156000527f0f9b10e190177c3c56fc6ce7689c8130c567df57aa02c08e7a090a59992adf928360060281015b826006028201811062013d915750506200b705565b806000600692556000600182015562013dad60028201620065b3565b6000600382015562013dc26004820162006448565b600060058201550162013d7c565b600660208262013de46001945186620068ac565b019201920191906200b689565b8060060290600682040362005b91578260060260068104840362005b91576000906202711682527f2a7aa4e7f2fefac7a07702701afb9c202f6f79fb2762c8e42b37a264307667fa92830192015b82811062013e4f5750506200b659565b80826006925582600182015562013e6960028201620065b3565b82600382015562013e7d6004820162006448565b8260058201550162013e3f565b608460405162461bcd60e51b815260206004820152604060248201527f546865206265666f7265206f7065726174696f6e20706c7567696e207379737460448201527f656d2073686f756c64206e6f742072657475726e20766f7465206e65656465646064820152fd5b60a460405162461bcd60e51b815260206004820152604760248201527f546865206265666f7265206f7065726174696f6e20706c7567696e207379737460448201527f656d2073686f756c64206e6f742072657475726e206120766f74696e6720727560648201527f6c65206c697374000000000000000000000000000000000000000000000000006084820152fd5b81811462013fe8578154916001600160401b03831162003f1a5762013faa83836200611d565b60005260206000209060005260206000208154916000925b84841062013fd1575050505050565b600180919201938454928185015501929062013fc2565b5050565b9080821462013fe85762014001815462005221565b906001600160401b03821162003f1a5781906201402b8262014024865462005221565b866200678f565b600090601f83116001146201406457600092620140585750508160011b916000199060031b1c1916179055565b01549050388062006822565b81526020808220858352818320935090601f1985169083905b828210620140b95750509084600195949392106201409f57505050811b019055565b015460001960f88460031b161c191690553880806200686f565b84958192958501548155600180910196019401906201407d565b81811462013fe857815491620140ea8383620064d6565b6000526020600020906000526020600020906000905b8382106201410e5750505050565b806201411d6001928562013fec565b92810192918101910162014100565b81811462013fe85781549162014143838362006564565b6000526020600020906000526020600020906000905b838210620141675750505050565b80620141766001928562013f84565b92810192918101910162014159565b81811462013fe8578154916001600160401b03831162003f1a57620141ab83836200611d565b60005260206000209060005260206000208154916000925b848410620141d2575050505050565b60016001600160a01b0381921692019384549281850155019290620141c3565b81811462013fe85781549162014209838362006564565b6000526020600020906000526020600020906000905b8382106201422d5750505050565b806201423c6001928562014185565b9281019291810191016201421f565b81811462013fe8578154916201426283836200665a565b6000526020600020906000526020600020906000905b838210620142865750505050565b806001918403620142a3575b600780910193019101909162014278565b80548455620142e28280860190830160ff90620142c4828254168462006732565b620142d682825460081c16846200674c565b5460101c16906200676d565b620142f4600280830190860162013f84565b60038085019082018082036201430d575b505062014292565b6201431891620140d3565b6201432a60048083019086016201412c565b6201433c6005808301908601620141f2565b6201434e600680830190860162013fec565b388062014305565b919062006def5780820362014369575050565b60ff600580620053a29462014382848654168262006719565b600185015460018201556201439e60028601600283016201424b565b60038501546003820155620143ba600486016004830162013fec565b019201620143d782825416849060ff801983541691151516179055565b8054835461ff001916600891821c8416151590911b61ff00161783555460101c1662ff0000825491151560101b169062ff00001916179055565b9080821462013fe857908154906000915b60648310620144315750505050565b600180919401928354948184015501919262014422565b9062013882546020600093019081515190620144648262003ffb565b9162014474604051938462003fd9565b80835262014485601f199162003ffb565b013660208401376201449a8351518262006fe1565b90156201480457620144ac9062005d44565b90859284515115620147fb57620144c38262005d44565b965b855151811015620146445760008080805b8681106201455b57509050620144f881620144f2858762005bed565b62005435565b60068110156200409c576003146201451d575b50620145179062005b81565b620144c5565b6000905b8082106201453057506201450b565b909562009dd6620145549162014547898d62005bed565b516200200d828a62005bed565b9062014521565b62014574816201456d878d5162005bed565b5162014c43565b9390948083118062014630575b15620145e7575050918385620145dd575b60068110156200409c5760038e9114620145bd575b5050620145b49062005b81565b919091620144d6565b94620145d4916200200d82620145b4959862005bed565b93908c620145a7565b6000955062014592565b80949295919514806201461c575b15620145a75760068110156200409c5760038e9114620145bd575050620145b49062005b81565b5060068110156200409c57801515620145f5565b5060068610156200409c5785151562014581565b5093505090929350600093845b83518610156201479657620146716201466b878662005bed565b6200670b565b906006808310156200409c5760029283036201469c57505062014695909562005b81565b9462014651565b620146ac6201466b898862005bed565b92818410156200409c5760018094148062014782575b15620146d75750505062014695909562005b81565b620146ec6201466b8a899b9694959b62005bed565b92808410156200409c576004809414928362014756575b50826201472b575b50506201471f575b50620146959062005b81565b95506201469562014713565b909150881015620147415787141538806201470b565b602182634e487b7160e01b6000525260246000fd5b908093508a10156201476d57891415913862014703565b602184634e487b7160e01b6000525260246000fd5b50818310156200409c5780831415620146c2565b92509290935060068210156200409c5760038203620147f2575b620147bb8162005d44565b9360005b828110620147ce575050509190565b80620147df620147ec928462005bed565b516200200d828962005bed565b620147bf565b506000620147b0565b50909392505050565b608460405162461bcd60e51b815260206004820152602a60248201527f546865206c656e677468206f6620766f74696e672072756c65206c697374206960448201527f73206f766572666c6f77000000000000000000000000000000000000000000006064820152fd5b90620138835460206000930190815151906201488a8262003ffb565b916201489a604051938462003fd9565b808352620148ab601f199162003ffb565b01366020840137620148c08351518262006fe1565b90156201480457620148d29062005d44565b90859284515115620147fb57620148e98262005d44565b965b85515181101562014a575760008080805b8681106201496e575090506201491881620144f2858762005bed565b60068110156200409c576003146201493d575b50620149379062005b81565b620148eb565b6000905b8082106201495057506201492b565b909562009dd6620149679162014547898d62005bed565b9062014941565b620149878162014980878d5162005bed565b5162014cdf565b9390948083118062014a43575b15620149fa575050918385620149f0575b60068110156200409c5760038e9114620149d0575b5050620149c79062005b81565b919091620148fc565b94620149e7916200200d82620149c7959862005bed565b93908c620149ba565b60009550620149a5565b809492959195148062014a2f575b15620149ba5760068110156200409c5760038e9114620149d0575050620149c79062005b81565b5060068110156200409c5780151562014a08565b5060068610156200409c5785151562014994565b5093505090929350600093845b835186101562014b795762014a7e6201466b878662005bed565b906006808310156200409c57600292830362014aa957505062014aa2909562005b81565b9462014a64565b62014ab96201466b898862005bed565b92818410156200409c5760038094148062014b65575b1562014ae45750505062014aa2909562005b81565b62014af96201466b8a899b9694959b62005bed565b92808410156200409c576005809414928362014b4e575b508262014b38575b505062014b2c575b5062014aa29062005b81565b955062014aa262014b20565b9091508810156200409c57871415388062014b18565b908093508a10156200409c57891415913862014b10565b50818310156200409c578083141562014acf565b92509290935060068210156200409c576003820362014bc8575b62014b9e8162005d44565b9360005b82811062014bb1575050509190565b80620147df62014bc2928462005bed565b62014ba2565b50600062014b93565b1562014bd957565b608460405162461bcd60e51b815260206004820152602860248201527f506c7567696e466163746f72793a20706c7567696e20696e646578206f75742060448201527f6f662072616e67650000000000000000000000000000000000000000000000006064820152fd5b909160008093819362014c5c6201388254831062014bd1565b60ff600562014c6b8462006d3c565b50015460081c161562014cd357828262014c8792600162014ea1565b62014c93575b50929190565b809450600192935062014ca7915062006d3c565b50015490600362014cc860ff62014cbe8662006d3c565b5054169462006d3c565b500154913862014c8d565b50509150915080918190565b909160008093819362014cf86201388354831062014bd1565b60ff600562014d078462006cc0565b50015460081c161562014cd357828262014d22928262014ea1565b62014d2d5750929190565b809450600192935062014d41915062006cc0565b50015490600362014cc860ff62014d588662006cc0565b5054169462006cc0565b1562014d6a57565b608460405162461bcd60e51b815260206004820152603160248201527f436865636b696e6720636f6e646974696f6e206578703a20706c7567696e206960448201527f6e646578206f7574206f662072616e67650000000000000000000000000000006064820152fd5b1562014ddc57565b608460405162461bcd60e51b815260206004820152602f60248201527f436865636b696e6720636f6e646974696f6e206578703a206e6f646520696e6460448201527f6578206f7574206f662072616e676500000000000000000000000000000000006064820152fd5b6201388490815481101562005bb557600791600052027f84d95adeb12a1259eb9eb7c14e7511a374a468bb7f8ac3d8ec617dbcd1336deb0190600090565b805482101562005bb5576000526007602060002091020190600090565b909291908015620152105762014ebd6201388254831062014d62565b62014ed9600262014ece8462006d3c565b500154841062014dd4565b8015620151f25762014f09600162014f0085600262014ef88762006d3c565b500162014e84565b50015460ff1690565b62014f148162004eaa565b8062014f24575050505050600090565b62014f2f8162004eaa565b6003810362014f42575050505050600190565b62014f4d8162004eaa565b6004810362014f60575050505050600090565b62014f6b8162004eaa565b60019080820362014f8457505092620056279362015238565b90929362014f928262004eaa565b600280921462014fa8575b505050505050600090565b8215620151d55762014fd18462014fc5838562014ef88a62006d3c565b50015460081c60ff1690565b925b60009586865b62015163575b5062014feb8762005d44565b9760005b88811062015106575050505050620150078262004091565b8183036201506657505091906000915b818310620150255750505090565b9091928062015043575b6201503b909362005b81565b919062015017565b506201503b6201505e62015058858462005bed565b51151590565b90506201502f565b909150620150748262004091565b8103620150cd57509060009182915b818310620150915750505090565b9091928015620150b0575b620150a8909362005b81565b919062015083565b50620150a8620150c562015058858462005bed565b90506201509c565b60039150620150dc8162004091565b14620150ef575038808080808062014f9d565b6201510262015058620056279262005ba7565b1590565b808a62015142620151396201512f848b620151278c8262014ef88d62006cc0565b500162005f0b565b90549060031b1c90565b86868962014ea1565b620151566201515d946200054f9362005bed565b9015159052565b62014fef565b8462015175858262014ef88662006cc0565b500154811015620151cf576201519b6201512f828762015127888262014ef88962006cc0565b620151b4575b620151ad879162005b81565b9062014fd9565b96620151ad620151c5889262005b81565b98915050620151a1565b62014fdf565b620151eb8462014fc5838562014ef88a62006cc0565b9262014fd3565b6201520a600162014f0085600262014ef88762006cc0565b62014f09565b620152216201388354831062014d62565b62015232600262014ece8462006cc0565b62014ed9565b90929160036201528a9183600014620153125760ff60016201526187600262014ef88662006d3c565b50015460101c16945b84156201530157600262014ef8620152829362006d3c565b500162005565565b91603d8110156200409c57602c8103620152d1575050620152b46200733560208093015162005ba7565b5191015160268110156200409c57620152cd90620176d2565b1490565b90929060018103620152e65750505050600090565b600314620152f657505050600090565b620056279262015382565b600262014ef8620152829362006cc0565b60ff60016201532887600262014ef88662006cc0565b50015460101c16946201526a565b156201533e57565b606460405162461bcd60e51b815260206004820152602060248201527f4f70657261746f722061646472657373206973206e6f742070726f76696465646044820152fd5b919060406200733592016201539c60018251511462015336565b620153b76001620153ae835162005ba7565b51511462015336565b620153cd6001600160a01b039384925162005ba7565b51169215620153dc5751161490565b51161490565b15620153ea57565b606460405162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206e756d626572206f6620706172616d6574657273000000006044820152fd5b9190820180921162005b9157565b620154478162004eaa565b620154556200eb976201765c565b620154608162004eaa565b600181036201547f5750620154786200ebc36201765c565b6201388b55565b6201548a8162004eaa565b600281036201549b57506201388c55565b620154a68162004eaa565b60038103620154b757506201388d55565b80620154c560049262004eaa565b14620154ce5750565b6201388e55565b9060005b825181101562015dcf5760e0620154f1828562005bed565b51015115620159c557620155116201550a828562005bed565b516200670b565b6006808210156200409c576004918203620156a3575060209060016003836201553b868962005bed565b510151060362015558575050620155529062005b81565b620154d9565b62005b7d828462015688606362015589620155828562015579868e62005bed565b51015162006190565b9362006190565b92847f20697320776974682072657475726e2074797065205945535f414e445f534b496040958651978894620155f862005c528388016026907f496e76616c6964206265666f72652d6f7020706c7567696e206c6576656c2e2081526502632bb32b6160d51b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b81526201562882518093601396878501910162004106565b01918201527f505f53414e44424f582c2073686f756c64206265206f6e206c6576656c205b3160338201527f2c20342c20372c2031302c202e2e2e5d00000000000000000000000000000000605382015203604381018552018362003fd9565b5193849362461bcd60e51b855284015260248301906200412b565b620156b36201550a848762005bed565b81811015620159b0576001036201581057506020906002600383620156d9868962005bed565b5101510603620156f0575050620155529062005b81565b62005b7d828462015688605d62015711620155828562015579868e62005bed565b92847f20697320776974682072657475726e20747970652053414e44424f585f4e454560409586519788946201578062005c528388016026907f496e76616c6964206265666f72652d6f7020706c7567696e206c6576656c2e2081526502632bb32b6160d51b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b8152620157b082518093601396878501910162004106565b01918201527f4445442c2073686f756c64206265206f6e206c6576656c205b322c20352c203860338201527f2c2031312c202e2e2e5d00000000000000000000000000000000000000000000605382015203603d81018552018362003fd9565b620158206201550a848762005bed565b908110156201474157600203620159625760209060038262015843858862005bed565b5101510662015859575050620155529062005b81565b62005b7d8284620156886201587f620158788462015579858d62005bed565b9262006190565b91620159536040938451958693620158d062005c528387016026907f496e76616c6964206265666f72652d6f7020706c7567696e206c6576656c2e2081526502632bb32b6160d51b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b815281519062015901826013948d868501910162004106565b0101603e907f20697320776974682072657475726e2074797065204e4f2c2073686f756c642081527f6265206f6e206c6576656c205b332c20362c20392c2031322c202e2e2e5d000060208201520190565b03601f19810184528362003fd9565b62005b7d9060405191829162461bcd60e51b8352820160609060208152601e60208201527f496e76616c69642072657475726e20747970653a20554e444546494e4544000060408201520190565b602183634e487b7160e01b6000525260246000fd5b620159d56201550a828562005bed565b600690818110156200409c5760050362015b29575060206001600382620159fd858862005bed565b510151060362015a135750620155529062005b81565b62005b7d8262015b0c605262015a3462015582866201557981998c62005bed565b926040937f20697320776974682072657475726e2074797065205945532c2073686f756c64855198899362015aa162005c528387016025907f496e76616c69642061667465722d6f7020706c7567696e206c6576656c2e204c815264032bb32b6160dd1b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b815282519062015ad2826013958c878501910162004106565b01918201527f206265206f6e206c6576656c205b312c20342c20372c2031302c202e2e2e5d00603382015203603281018752018562003fd9565b5192839262461bcd60e51b8452600484015260248301906200412b565b62015b396201550a838662005bed565b90808210156200409c57600391820362015c95575060026020918262015b60858862005bed565b510151060362015b765750620155529062005b81565b62005b7d8262015b0c605c62015b9762015582866201557981998c62005bed565b926040937f20697320776974682072657475726e207479706520564f54494e475f4e454544855198899362015c0462005c528387016025907f496e76616c69642061667465722d6f7020706c7567696e206c6576656c2e204c815264032bb32b6160dd1b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b815282519062015c35826013958c878501910162004106565b01918201527f45442c2073686f756c64206265206f6e206c6576656c205b322c20352c20382c60338201527f2031312c202e2e2e5d0000000000000000000000000000000000000000000000605382015203603c81018752018562003fd9565b62015ca56201550a848762005bed565b908110156200409c5760020362015d8a576020908162015cc6848762005bed565b5101510662015cdb5750620155529062005b81565b62005b7d8262015b0c62015cfa62015878856201557981988b62005bed565b9162015d7b604093845197889362015d4a62005c528387016025907f496e76616c69642061667465722d6f7020706c7567696e206c6576656c2e204c815264032bb32b6160dd1b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b815281519062015901826013948b868501910162004106565b03601f19810186528562003fd9565b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c69642072657475726e20747970653a20554e444546494e454400006044820152606490fd5b509050565b1562015ddc57565b60a460405162461bcd60e51b815260206004820152604d60248201527f546865206c656e677468206f662074686520706c7567696e20696e646578657360448201527f20617272617920616e642074686520626f6f6c65616e206172726179206d757360648201527f74206265207468652073616d65000000000000000000000000000000000000006084820152fd5b1562015e7457565b608460405162461bcd60e51b815260206004820152602260248201527f496e76616c696420706c7567696e20696e64657820746f20626520656e61626c604482015261195960f21b6064820152fd5b1562015ecb57565b608460405162461bcd60e51b815260206004820152602b60248201527f54686520706c7567696e20746f20626520656e61626c6564206973206e6f742060448201527f696e697469616c697a65640000000000000000000000000000000000000000006064820152fd5b1562015f3d57565b608460405162461bcd60e51b815260206004820152602b60248201527f54686520706c7567696e20746f20626520656e61626c656420697320616c726560448201527f61647920656e61626c65640000000000000000000000000000000000000000006064820152fd5b1562015faf57565b608460405162461bcd60e51b815260206004820152602360248201527f496e76616c696420706c7567696e20696e64657820746f20626520646973616260448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152fd5b156201602157565b608460405162461bcd60e51b815260206004820152602c60248201527f54686520706c7567696e20746f2062652064697361626c6564206973206e6f7460448201527f20696e697469616c697a656400000000000000000000000000000000000000006064820152fd5b156201609357565b608460405162461bcd60e51b815260206004820152602d60248201527f54686520706c7567696e20746f2062652064697361626c656420697320616c7260448201527f656164792064697361626c6564000000000000000000000000000000000000006064820152fd5b156201610557565b608460405162461bcd60e51b815260206004820152603060248201527f546865206c656e677468206f662074617267657420616e6420746f6b656e436c60448201527f617373206973206e6f7420657175616c000000000000000000000000000000006064820152fd5b156201617757565b608460405162461bcd60e51b815260206004820152602c60248201527f546865206c656e677468206f662074617267657420616e6420616d6f756e742060448201527f6973206e6f7420657175616c00000000000000000000000000000000000000006064820152fd5b15620161e957565b608460405162461bcd60e51b815260206004820152602260248201527f54686520746f6b656e20636c617373206973206e6f7420696e697469616c697a604482015261195960f21b6064820152fd5b156201624057565b608460405162461bcd60e51b815260206004820152602960248201527f54686520746f74616c20737570706c79206f662074686520746f6b656e20697360448201527f206f766572666c6f7700000000000000000000000000000000000000000000006064820152fd5b15620162b257565b608460405162461bcd60e51b8152602060048201526024808201527f5468652062616c616e6365206f662074686520746f6b656e206973206f76657260448201527f666c6f77000000000000000000000000000000000000000000000000000000006064820152fd5b156201632357565b606460405162461bcd60e51b815260206004820152602060248201527f54686520746f6b656e20697320616c726561647920696e697469616c697a65646044820152fd5b60408101906201637c60c08351015162005ba7565b51916201639e60a062016393818451015162005ba7565b519251015162005bcb565b5193620163b3845183511462001929620174fa565b620163c6845186511462001929620174fa565b60005b84518110156201642457620163df818462005bed565b519061271082101562005bb5576201641e916001600160a01b03865116600052600390811b016020526200054f6040600020546200822b838a62005bed565b620163c9565b5092919360005b8351811015620165505762016441818462005bed565b5190612710918281101562005bb5576001600160a01b03908189511660005260039081602091811b0181526201648260406000205462008299868962005bed565b906201648f868a62005bed565b51918783101562005bb55784620164bc93878f5116600052811b0184526040600020556200192962017621565b620164c8848862005bed565b518581101562005bb557829084620164e1878c62005bed565b5116600052811b018152620165016040600020546200733c868962005bed565b91909262016510868a62005bed565b519687101562005bb5576201654a966200054f9562016530888d62005bed565b5116600052811b0190526040600020556200192962017697565b6201642b565b50506200838a62016561916201723d565b9060405193620165718562003fa1565b60018552602036818701376001600160a01b0390816107c0525116620165978562005ba7565b526000935b8151851015620168ba57620165b2858362005bed565b5194620165c0845162005d44565b91600093620165d0825162005d44565b6107e0528496855b87518110156201667957620165ff6107c051620165f6838b62005bed565b51168b62017008565b158062016641575b6201661e575b620166189062005b81565b620165d8565b956201663862016618916107c051620087158a8c62005bed565b9690506201660d565b506127108a101562005bb5576107c0516201665d828a62005bed565b511660005260038a811b01602052604060002054151562016607565b509793929096949195976000986127108610159560031b9860038a019a5b895181101562016713578762005bb5576107c051620166b7828c62005bed565b51166000528b60205260406000205415620166de575b620166d89062005b81565b62016697565b976201670a620166d8918b620166f98c6107c0519262005bed565b51166200200d826107e05162005bed565b989050620166cd565b50949591939650985096909596806107805262005bb55760040180610760525495620167446200859786896201542e565b61074052600097886107a0525b6107805162005bb5576107a05188811015620167ef576201678062016796916000610780526107605162005f0b565b6107c05191549060031b1c166107e051620170cc565b15620167b5575b620167ab6107a05162005b81565b6107a05262016751565b97620167e890620167cd6107a0516107605162005f0b565b6107c05191549060031b1c166200200d826107405162005bed565b976201679d565b5095939096509690969391936000915b8383106201688957505050506107805162005bb55761074051516001600160401b03811162003f1a576201683781610760516200611d565b6020610740510161076051600052602060002060006107c051905b848110620168725750505050506201686a9062005b81565b93926201659c565b600190602083865116950194818501550162016852565b62008723620168b3916107c051620168a2868662005bed565b51166200200d826107405162005bed565b91620167ff565b5050509050565b90805180516001600160401b03811162003f1a57620168e181856200611d565b6020809201846000528260002060005b8381106201696e575050505060c082600692620053a295940151600185015560408101516002850155606081015160038501556201694460808201511515600486019060ff801983541691151516179055565b6201695760a082015160058601620067d9565b0151151591019060ff801983541691151516179055565b82518282015591840191600101620168f1565b620138848054600160401b81101562003f1a57620169a59160018201905562014e46565b91909162006def57620053a291620168c1565b62013890908154600160401b81101562003f1a576001810180845581101562005bb557620053a2926000527f7f73709277f72a9bc7b284375e83603a53394744e9fa86da811e86c2aa78e05e01620067d9565b908062016a16575050565b620053a291600052601f6020600020910160051c81019062005f24565b90600160401b811162003f1a57815481835580821062016a5257505050565b620053a292600052601f6020600020918180850160051c840194168062016a81575b500160051c019062005f24565b600019908186019182549160200360031b1c1690553862016a74565b60009262016ab762016ab0859462014e46565b50620053bf565b9380935b85515185101562016bbd575061271084101562005bb55760039380851b946001600160a01b0385166000526020908601815262016b05604096600188600020549101549062006fe1565b9384911562016b7a579062016b1a9162007088565b96901562016b3757505062016b2f9062005b81565b939062016abb565b60649250519062461bcd60e51b82526004820152601460248201527f746f74616c20706f776572206f766572666c6f770000000000000000000000006044820152fd5b60648389519062461bcd60e51b82526004820152600e60248201527f706f776572206f766572666c6f770000000000000000000000000000000000006044820152fd5b93505092505090565b1562016bce57565b606460405162461bcd60e51b815260206004820152601360248201527f63757272656e74596573206f766572666c6f77000000000000000000000000006044820152fd5b600162016c1f8262014e46565b5001546202712e546000928184526202712b908160205262016c48816004604088200162005f0b565b90549060031b1c918386528060205262016c69826005604089200162005f0b565b90549060031b1c93865260205260ff600662016c9d62016c8f848360408b200162005f0b565b90549060031b1c9362014e46565b5001541662016cf2575062016ce29262016cd362016ccd938362016cc562016cda9562006fab565b969062016bc6565b6201542e565b9062006fe1565b929062016bc6565b111562016cec5790565b50600190565b62010174925062016ce29362016d0c62016cda9362006fab565b949062016bc6565b9092919262016d24825162005d44565b60009162016d33815162005d44565b8390845b865181101562016dce576001600160a01b0362016d5a81620165f6848b62005bed565b158062016d99575b62016d7a575b5062016d749062005b81565b62016d37565b819662016d919162009a3062016d74948b62005bed565b959062016d68565b506127108a101562005bb5578062016db2838a62005bed565b511660005260038a811b01602052604060002054151562016d62565b509295919694509260005b875181101562016e4f5761271086101562005bb5576001600160a01b038062016e03838b62005bed565b5116600052600387811b016020526040600020541562016e30575b5062016e2a9062005b81565b62016dd9565b819562016e47916200ed9262016e2a948c62005bed565b949062016e1e565b509250945092612710831015938462005bb55760049586600395861b019687549462016e806200859782886201542e565b9460009689889a5b62016ff357818b101562016f2957506000998b62016ec362016eab838362005f0b565b90546001600160a01b0392918e1b1c82168a620170cc565b1562016ee6575b50509062016edb8b94939262005b81565b9a9091929362016e88565b91998c95949392909162016efc908c9062005f0b565b9054908d1b1c1662016f0f828b62005bed565b5262016f1b9062005b81565b9890919293508b3862016eca565b9697949a98505091975092506000915b83831062016fcf575050505062016fba578051926001600160401b03841162016fa5575062016f6983836200611d565b602080910191600052806000209060005b84811062016f89575050505050565b83516001600160a01b0316838201559281019260010162016f7a565b604190634e487b7160e01b6000525260246000fd5b603283634e487b7160e01b6000525260246000fd5b6200872362016fec916001600160a01b0362008715868662005bed565b9162016f39565b603285634e487b7160e01b6000525260246000fd5b9060005b61271083101562005bb5576003600484821b018054831015620170685782620170359162005f0b565b916001600160a01b0392839254911b1c169083161462017060576201705a9062005b81565b6201700c565b505050600190565b5050505050600090565b9060005b61271083101562005bb55760036201389784821b018054831015620170685782620170a19162005f0b565b916001600160a01b0392839254911b1c16908316146201706057620170c69062005b81565b62017076565b9060005b82518110156201710b576001600160a01b0380620170ef838662005bed565b5116908316146201706057620171059062005b81565b620170d0565b505050600090565b801562005b91576000190190565b9081519060005b60001983810184811162005b9157821015620171ef576001820180831162005b91575b84811062017166575050620171609062005b81565b62017128565b6001600160a01b03806201717b858962005bed565b5116816201718a848a62005bed565b511614620171a5575b506201719f9062005b81565b6201714b565b828692960182811162005b91576201719f92620171e892620171cc620171e1938b62005bed565b5116620171da898b62005bed565b5262017113565b9562017113565b9062017193565b505090620171fd8162005d44565b9060005b81811062017210575090925050565b806001600160a01b036201722962017237938862005bed565b51166200200d828662005bed565b62017201565b80519160005b60001984810185811162005b9157821015620172f5576001820180831162005b91575b858110620172815750506201727b9062005b81565b62017243565b6201728d838662005bed565b516201729a828762005bed565b5114620172b3575b620172ad9062005b81565b62017266565b948181019080821162005b9157620172e6620172ed91620172d9620172ad948962005bed565b51620171da8a8a62005bed565b9662017113565b9050620172a2565b50509091620173048162005d44565b9060005b81811062017317575090925050565b806201732862017335928762005bed565b516200200d828662005bed565b62017308565b604051620173498162003efe565b604481527f496e76616c6964206469766964656e64207065726d797269616420706572207460208201527f72616e73616374696f6e2e2053686f756c64206265206c657373207468616e2060408201527f3130303000000000000000000000000000000000000000000000000000000000606082015290565b604051620173d08162003f69565b603281527f4e6f20656e6f756768206e756d626572206f66207472616e73616374696f6e7360208201527f20666f72206469766964656e6473207965740000000000000000000000000000604082015290565b604051620174318162003fa1565b601c81527f6469766964656e6473206f7065726174696f6e206f766572666c6f7700000000602082015290565b6040516201746c8162003fa1565b600d81527f556e6b6e6f776e204572726f7200000000000000000000000000000000000000602082015290565b604051620174a78162003f69565b602681527f4572726f7220696e20776974686472617761626c6520636173682063616c637560208201527f6c6174696f6e0000000000000000000000000000000000000000000000000000604082015290565b604051620175088162003fa1565b601281527f496e76616c696420506172616d65746572730000000000000000000000000000602082015290565b604051620175438162003fa1565b601581527f4d656d62657220646f6573206e6f742065786973740000000000000000000000602082015290565b6040516201757e8162003fa1565b601781527f4d656d626572206973206e6f742073757370656e646564000000000000000000602082015290565b604051620175b98162003fa1565b601b81527f4d656d62657220697320616c72656164792073757370656e6465640000000000602082015290565b604051620175f48162003fa1565b601581527f4d656d62657220616c7265616479206578697374730000000000000000000000602082015290565b6040516201762f8162003fa1565b601181527f4e6f20656e6f7567682062616c616e6365000000000000000000000000000000602082015290565b6040516201766a8162003fa1565b601881527f496e76616c696420706172616d6574657220746f207365740000000000000000602082015290565b604051620176a58162003fa1565b601581527f546f6b656e20616d6f756e74206f766572666c6f770000000000000000000000602082015290565b60268110156200409c578015620178c0576001811462016cec5760028114620178ba5760038114620178b45760048114620178ae5760058114620178a85760068114620178a257600781146201789c57600881146201789657600981146201789057600a81146201788a57600b81146201788457600c81146201787e57600d81146201787857600e81146201787257600f81146201786c57601081146201786657601181146201786057601281146201785a57601381146201785457601481146201784e57601581146201784857601881146201784257601781146201783c57601981146201783657601a81146201783057601b81146201782a57601c81146201782457601d81146201781e57601e81146201781857601f81146201781257602081146201780c576021146201780757600090565b602190565b50602090565b50601f90565b50601e90565b50601d90565b50601c90565b50601b90565b50601a90565b50601990565b50601790565b50601690565b50601590565b50601490565b50601390565b50601290565b50601190565b50601090565b50600f90565b50600e90565b50600d90565b50600c90565b50600b90565b50600a90565b50600990565b50600890565b50600790565b50600690565b50600590565b50600490565b50600390565b50600290565b50600090565b90815181101562005bb5570160200190565b60405190620178e78262003f69565b60288252604036602084013760005b601481106201790457505090565b60139080820391821162005b91578160031b917f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81160362005b915760ff80831162005b915762017963600180941b6001600160a01b0386166200616f565b60f081168282160391821162005b91577f0f00000000000000000000000000000000000000000000000000000000000000620179a39160f41b1662017a3f565b9082841b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416840362005b915762017a13917fff000000000000000000000000000000000000000000000000000000000000009160001a62017a08858a620178c6565b5360f81b1662017a3f565b92810180911162005b915762017a3262017a399360001a9186620178c6565b5362005b81565b620178f6565b60f81c600a81101562017a805760300160ff811162005b915760f81b7fff000000000000000000000000000000000000000000000000000000000000001690565b60570160ff811162005b915760f81b7fff00000000000000000000000000000000000000000000000000000000000000169056fea2646970667358221220a88b2310de1c810e72a47968a10611bf5aba2909acc6aaec5b26a486d5c735f764736f6c63430008130033",
- "deployedBytecode": "0x6108008060405260043610156200001557600080fd5b600080608052803560e01c918263036ee8501462003eab575081630e5a3b291462003b2257816310ade3ea1462003af05781631797631d1462003a605781631c75255a1462003a0b57816323b65c78146200397b5781632514a6b4146200371f57816341d1a43814620036ec57816356424cf414620036cb5781635c00d98714620036a15781635d0b1849146200367d5781635f1231ea14620035885781635f5d5f0014620034f8578163681ece9d14620034b557816374579b18146200247457816379532bfe14620024505781637daa10ce14620024315781638129fc1c146200201d57816383e4cccf1462001d91578163864f9f7a1462001d4f57816386ad77e214620019d85781638c7a63ae146200195e5781639df9914514620018455781639f36145f1462000577578163a064c4f1146200042c57508063acf80bc414620003ea578063aefca42a14620003c6578063bba510301462000219578063d5a172f214620001ec5763d6a93c51146200018f57600080fd5b34620001e65760805180600319360112620001e3575b6127108110620001bb575b602090604051908152f35b60ff60078260031b01541615620001dd57620001d79062005b81565b620001a5565b620001b0565b80fd5b60805180fd5b34620001e65760805180600319360112620001e35760206001600160a01b03620271265416604051908152f35b34620001e65760805180600319360112620001e3576202712e548091526202712b906020828152600380604060805120015493620002746200025b8662003ffb565b956200026b604051978862003fd9565b80875262003ffb565b8584019190601f19013683376080515b85608051528185528360406080512001548110156200036f576040517f41d1a438000000000000000000000000000000000000000000000000000000008152816004820152602486828281305afa91821562000362576080519262000324575b50620002f1838a62005bed565b90868310156200030e575052620003089062005b81565b62000284565b634e487b7160e01b608051526021600452608051fd5b9091508681813d83116200035a575b6200033f818362003fd9565b81010312620001e6575185811015620001e6579089620002e4565b503d62000333565b6040513d608051823e3d90fd5b84878460405192839281840190828552518091526040840192916080515b8281106200039d57505050500390f35b9193839550908082620003b5600194839751620040f8565b01950191019185949391926200038d565b34620001e65760805180600319360112620001e35760206202712854604051908152f35b34620001e6576020366003190112620001e6576001600160a01b036200040f62003ecd565b166080515262013887602052602060406080512054604051908152f35b34620001e65760209081600319360112620001e6576004356127108110156200055f5790600391821b9060018201549091600481018054946080519481869401905b878510620004fc578862000483888862006fe1565b90156200049257604051908152f35b6084826040519062461bcd60e51b82526004820152603360248201527f73756d566f74696e67576569676874466f72546f6b656e436c6173733a20766f60448201527f74696e67576569676874206f766572666c6f77000000000000000000000000006064820152fd5b9590919293956200055f576200055586620005476001600160a01b03620005286200054f9a8962005f0b565b905490881b1c1693608051948552858c52604060805120549062007088565b989062007003565b62005b81565b939291906200046e565b634e487b7160e01b6080515260326004526024608051fd5b34620001e6576020366003190112620001e657600435608051526202712b602052604060805120604051620005ac8162003f69565b6001600160a01b03825416815260018201918254620005cb8162003ffb565b90620005db604051928362003fd9565b808252602082019460805152608051946020862095905b8282106200067d5762000652868686602083015260405162000625816200061d81600286016200525e565b038262003fd9565b604083015260ff600782015491600960088201549101549060405195869560a0875260a0870190620055c7565b93602086015260408501526200066e60608501838316620040f8565b60081c16151560808301520390f35b6040516200068b8162003f69565b87546001600160a01b0381168252602660ff8260a01c1610156200182d5760a01c60ff166020820152604051620006c28162003f4c565b620006d060018a01620052fc565b8152600289016040518082602082945493848152019060805152608051926020842093905b80601f8301106200165a576200082e94549181811062001643575b81811062001629575b8181106200160f575b818110620015f5575b818110620015dc575b818110620015c2575b818110620015a8575b8181106200158e575b81811062001574575b8181106200155a575b81811062001540575b81811062001526575b8181106200150c575b818110620014f2575b818110620014d8575b818110620014be575b818110620014a4575b8181106200148a575b81811062001470575b81811062001456575b8181106200143c575b81811062001422575b81811062001408575b818110620013ee575b818110620013d4575b818110620013ba575b818110620013a0575b81811062001386575b8181106200136c575b81811062001352575b81811062001338575b1062001327575b50038262003fd9565b6020820152600389018054620008448162003ffb565b9162000854604051938462003fd9565b818352602083019060805152608051906020822091905b83821062001306575050505060408201526004890180546200088d8162003ffb565b916200089d604051938462003fd9565b818352602083019060805152608051906020822091905b8382106200118f57505050506060820152600589016040519081602082549182815201916080515260805190602082205b81601f84011062000e9e5784600997946020979460019a979462000a2b94549181811062000e80575b81811062000e5f575b81811062000e3e575b81811062000e1d575b81811062000dfd575b81811062000ddc575b81811062000dbb575b81811062000d9a575b81811062000d79575b81811062000d58575b81811062000d37575b81811062000d16575b81811062000cf5575b81811062000cd4575b81811062000cb3575b81811062000c92575b81811062000c71575b81811062000c50575b81811062000c2f575b81811062000c0e575b81811062000bed575b81811062000bcc575b81811062000bab575b81811062000b8a575b81811062000b69575b81811062000b48575b81811062000b27575b81811062000b06575b81811062000ae5575b81811062000ac4575b81811062000aa3575b1062000a885750038262003fd9565b608082015262000a3e60068d016200544f565b60a082015262000a5160078d0162005508565b60c0820152600862000a6f8d6200061d60405180948193016200525e565b60e08201526040820152815201970191019095620005f2565b90889160f81c62000a998162004eaa565b8152013862000825565b928a8d9160ff8560f01c1662000ab98162004eaa565b815201930162000a1c565b928a8d9160ff8560e81c1662000ada8162004eaa565b815201930162000a13565b928a8d9160ff8560e01c1662000afb8162004eaa565b815201930162000a0a565b928a8d9160ff8560d81c1662000b1c8162004eaa565b815201930162000a01565b928a8d9160ff8560d01c1662000b3d8162004eaa565b8152019301620009f8565b928a8d9160ff8560c81c1662000b5e8162004eaa565b8152019301620009ef565b928a8d9160ff8560c01c1662000b7f8162004eaa565b8152019301620009e6565b928a8d9160ff8560b81c1662000ba08162004eaa565b8152019301620009dd565b928a8d9160ff8560b01c1662000bc18162004eaa565b8152019301620009d4565b928a8d9160ff8560a81c1662000be28162004eaa565b8152019301620009cb565b928a8d9160ff8560a01c1662000c038162004eaa565b8152019301620009c2565b928a8d9160ff8560981c1662000c248162004eaa565b8152019301620009b9565b928a8d9160ff8560901c1662000c458162004eaa565b8152019301620009b0565b928a8d9160ff8560881c1662000c668162004eaa565b8152019301620009a7565b928a8d9160ff8560801c1662000c878162004eaa565b81520193016200099e565b928a8d9160ff8560781c1662000ca88162004eaa565b815201930162000995565b928a8d9160ff8560701c1662000cc98162004eaa565b81520193016200098c565b928a8d9160ff8560681c1662000cea8162004eaa565b815201930162000983565b928a8d9160ff8560601c1662000d0b8162004eaa565b81520193016200097a565b928a8d9160ff8560581c1662000d2c8162004eaa565b815201930162000971565b928a8d9160ff8560501c1662000d4d8162004eaa565b815201930162000968565b928a8d9160ff8560481c1662000d6e8162004eaa565b81520193016200095f565b928a8d9160ff8560401c1662000d8f8162004eaa565b815201930162000956565b928a8d9160ff8560381c1662000db08162004eaa565b81520193016200094d565b928a8d9160ff8560301c1662000dd18162004eaa565b815201930162000944565b928a8d9160ff8560281c1662000df28162004eaa565b81520193016200093b565b928a8d9160ff85831c1662000e128162004eaa565b815201930162000932565b928a8d9160ff8560181c1662000e338162004eaa565b815201930162000929565b928a8d9160ff8560101c1662000e548162004eaa565b815201930162000920565b928a8d9160ff8560081c1662000e758162004eaa565b815201930162000917565b928a8d9160ff851662000e938162004eaa565b81520193016200090e565b926001610400602092865460ff811662000eb88162004eaa565b825260ff8160081c1662000ecc8162004eaa565b8583015260ff8160101c1662000ee28162004eaa565b604083015260ff8160181c1662000ef98162004eaa565b606083015260ff81861c1662000f0f8162004eaa565b608083015260ff8160281c1662000f268162004eaa565b60a083015260ff81818160301c1662000f3f8162004eaa565b60c09081860152828260381c1662000f578162004eaa565b60e0860152828260401c1662000f6d8162004eaa565b610100860152828260481c1662000f848162004eaa565b610120860152828260501c1662000f9b8162004eaa565b610140860152828260581c1662000fb28162004eaa565b610160860152828260601c1662000fc98162004eaa565b610180860152828260681c1662000fe08162004eaa565b6101a0860152828260701c1662000ff78162004eaa565b6101c0860152828260781c166200100e8162004eaa565b6101e0860152828260801c16620010258162004eaa565b610200860152828260881c166200103c8162004eaa565b610220860152828260901c16620010538162004eaa565b610240860152828260981c166200106a8162004eaa565b610260860152828260a01c16620010818162004eaa565b610280860152828260a81c16620010988162004eaa565b6102a0860152828260b01c16620010af8162004eaa565b6102c0860152828260b81c16620010c68162004eaa565b6102e08601521c16620010d98162004eaa565b61030083015260ff8160c81c16620010f18162004eaa565b61032083015260ff8160d01c16620011098162004eaa565b61034083015260ff8160d81c16620011218162004eaa565b61036083015260ff8160e01c16620011398162004eaa565b61038083015260ff8160e81c16620011518162004eaa565b6103a083015260ff8160f01c16620011698162004eaa565b6103c083015260f81c6200117d8162004eaa565b6103e0820152019401920191620008e5565b60409d9c9b9a999897969d51620011a68162003f4c565b620011b660ff8554168262005435565b60018401546020820152600284018054620011d18162003ffb565b91620011e1604051938462003fd9565b8183526020830190608051526080516020812090915b8383106200127857505050509d9e9798999a9b9c9d6001928260209260406006950152600387015460608201526040516200123b816200061d8160048c016200525e565b608082015260ff6005880154818116151560a0840152818160081c16151560c084015260101c16151560e0820152815201930191019091620008b4565b600760206001926040516200128d8162003f30565b85548152620012d160ff86880154818116620012a98162004eaa565b86850152818160081c16620012be8162004091565b604085015260101c166060830162005442565b620012df600287016200536a565b6080820152620012f26003870162005565565b60a0820152815201920192019190620011f7565b600760206001926200131886620053bf565b8152019301910190916200086b565b60f81c151581526020018d62000825565b92602060019160ff8560f01c16151581520193016200081e565b92602060019160ff8560e81c161515815201930162000815565b92602060019160ff8560e01c16151581520193016200080c565b92602060019160ff8560d81c161515815201930162000803565b92602060019160ff8560d01c1615158152019301620007fa565b92602060019160ff8560c81c1615158152019301620007f1565b92602060019160ff8560c01c1615158152019301620007e8565b92602060019160ff8560b81c1615158152019301620007df565b92602060019160ff8560b01c1615158152019301620007d6565b92602060019160ff8560a81c1615158152019301620007cd565b92602060019160ff8560a01c1615158152019301620007c4565b92602060019160ff8560981c1615158152019301620007bb565b92602060019160ff8560901c1615158152019301620007b2565b92602060019160ff8560881c1615158152019301620007a9565b92602060019160ff8560801c1615158152019301620007a0565b92602060019160ff8560781c161515815201930162000797565b92602060019160ff8560701c16151581520193016200078e565b92602060019160ff8560681c161515815201930162000785565b92602060019160ff8560601c16151581520193016200077c565b92602060019160ff8560581c161515815201930162000773565b92602060019160ff8560501c16151581520193016200076a565b92602060019160ff8560481c161515815201930162000761565b92602060019160ff8560401c161515815201930162000758565b92602060019160ff8560381c16151581520193016200074f565b92602060019160ff8560301c161515815201930162000746565b92602060019160ff8560281c16151581520193016200073d565b92602060019160ff85831c161515815201930162000734565b92602060019160ff8560181c16151581520193016200072b565b92602060019160ff8560101c161515815201930162000722565b92602060019160ff8560081c161515815201930162000719565b92602060019160ff85161515815201930162000710565b916020919350610400600191865460ff81161515825260ff8160081c1615158583015260ff8160101c161515604083015260ff816060828260181c161515818601528282891c1615156080860152828260281c16151560a0860152828260c092828260301c16151584890152828260381c16151560e0890152828260401c161515610100890152828260481c161515610120890152828260501c161515610140890152828260581c1615156101608901521c161515610180860152828260681c1615156101a0860152828260701c1615156101c0860152828260781c1615156101e0860152828260801c161515610200860152828260881c161515610220860152828260901c161515610240860152828260981c161515610260860152828260a01c161515610280860152828260a81c1615156102a0860152828260b01c1615156102c0860152828260b81c1615156102e08601521c16151561030083015260ff8160c81c16151561032083015260ff8160d01c16151561034083015260ff8160d81c16151561036083015260ff8160e01c16151561038083015260ff8160e81c1615156103a083015260ff8160f01c1615156103c083015260f81c15156103e0820152019401920184929391620006f5565b634e487b7160e01b6080515260216004526024608051fd5b6020366003190112620001e6576004356001600160401b038111620001e6576200187490369060040162004430565b6001600160a01b03620018c581835116620018bc6200189d6200189733620178d8565b62005a32565b620018b5620018af86885116620178d8565b62005ab0565b9062005b07565b90331462005b4e565b6080519060208301915b825180518210156200193657906200054f620019309284620018f384339362005bed565b51511614620019296200190a6200189733620178d8565b620018b5620018af8862001920888c5162005bed565b515116620178d8565b9062005b4e565b620018cf565b6200195a6200194586620072a7565b6040519182916020835260208301906200412b565b0390f35b34620001e6576020366003190112620001e6576004356127108110156200055f5760031b6001810154600282015491620019ce6005620019af6006840154936200061d60405180948193016200525e565b604051948594855260208501526080604085015260808401906200412b565b9060608301520390f35b34620001e65760805180600319360112620001e357620138828054620019fe8162003ffb565b9162001a0e604051938462003fd9565b8183526020830190608051527fe5dac618068543225ae1c2f585dbaa37d058ab507104bc7da3da5ab2e5666cc7608051915b83831062001c1157846201388390815462001a5b8162003ffb565b9262001a6b604051948562003fd9565b8184526020840190608051527f9e32270fdbb1cb37df0574dfc18a9a2c56583299a239108c9d137f746b82200a608051915b83831062001ad35762001ac4856200195a8860405193849360408552604085019062005044565b90838203602085015262005044565b60405162001ae18162003f4c565b62001af160ff8454168262005435565b6001830154602082015260028301805462001b0c8162003ffb565b9162001b1c604051938462003fd9565b818352602083019060805152608051906020822091905b83821062001bab575050505060019282602092604060069501526003860154606082015260405162001b6e816200061d8160048b016200525e565b608082015260ff6005870154818116151560a0840152818160081c16151560c084015260101c16151560e082015281520192019201919062001a9d565b6007602060019260405162001bc08162003f30565b8654815262001bdc60ff86890154818116620012a98162004eaa565b62001bea600288016200536a565b608082015262001bfd6003880162005565565b60a082015281520193019101909162001b33565b60405162001c1f8162003f4c565b62001c2f60ff8454168262005435565b6001830154602082015260028301805462001c4a8162003ffb565b9162001c5a604051938462003fd9565b818352602083019060805152608051906020822091905b83821062001ce9575050505060019282602092604060069501526003860154606082015260405162001cac816200061d8160048b016200525e565b608082015260ff6005870154818116151560a0840152818160081c16151560c084015260101c16151560e082015281520192019201919062001a40565b6007602060019260405162001cfe8162003f30565b8654815262001d1a60ff86890154818116620012a98162004eaa565b62001d28600288016200536a565b608082015262001d3b6003880162005565565b60a082015281520193019101909162001c71565b34620001e6576020366003190112620001e6576001600160a01b0362001d7462003ecd565b166080515262013885602052602060406080512054604051908152f35b34620001e657602080600319360112620001e6576004359062001dd2478311156200192962001dc08562006190565b62001dcb4762006190565b9062005c02565b336080515262001e4a6201388580835262001e1f604060805120548511156200192962001dff8762006190565b336080515284875262001e186040608051205462006190565b9062005caa565b336080515280835262001e39846040608051205462006155565b92906200192962001dff8762006190565b3360805152825280604060805120551562001e8c575b5060805180808381949382941562001e82575b3390f115620003625760805180f35b506108fc62001e73565b620138869081549162001e9f8362005d44565b9160805193845b81811062001faa57505062001ebb8462005d44565b918251926001600160401b03841162001f925791839262001edd829562005f95565b01906080515260805192835b83811062001f5657505050505b82811062001f0657505062001e60565b806200054f6001600160a01b0362001f2362001f50948662005bed565b511662001f308362005db5565b90919082549060031b916001600160a01b03809116831b921b1916179055565b62001ef6565b82516001600160a01b03167f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa48201559181019160010162001ee9565b634e487b7160e01b6080515260416004526024608051fd5b62001fb58162005db5565b6001600160a01b03915490826003923392841b1c160362001fe4575b505062001fde9062005b81565b62001ea6565b966200201491839862001ffb62001fde9562005db5565b9054911b1c166200200d828962005bed565b5262005b81565b95908862001fd1565b34620001e65760805180600319360112620001e3575062027126336001600160a01b0319825416179055600190620271298260ff19825416179055604051620020668162003fbd565b60805190526201388280548282558062002391575b50608051526040516200208e8162003fbd565b6080519052608051806200237b57506201388390815481835580620022dc575b5050608051526127106202712a55604051620020ca8162003fa1565b8181526080515b602080821015620021445760405160209291620020ee8262003f30565b60805182526080518183015260805160408301526080516060908184015280608084015260405190620021218262003efe565b80825280838301528060408301528082015260a0830152828501015201620020d1565b83620022c984604051620021588162003fbd565b60805181526040516200216b8162003fbd565b60805181526040516200217e8162003fbd565b6080518152604051620021918162003fbd565b608051815260405191620021a58362003fbd565b608051835260405193620021b98562003efe565b845260208401526040830152606082015260405191620021d98362003f30565b60805183526003602084015260805160408401526080516060840152608083015260a08201526200220a8262005ba7565b52620022168162005ba7565b5062002271604051620022298162003f4c565b6004815284602082015282604082015260805160608201526040516200224f8162003fbd565b608051815260808201528460a08201528460c08201528460e082015262006db8565b60405190620022808262003f4c565b6002825283602083015260408201526080516060820152604051620022a58162003fbd565b608051815260808201528260a08201528260c082015260805160e082015262006e05565b6113886201388b556201388c5560805180f35b60069181830291838304036200236757808491608052527f9e32270fdbb1cb37df0574dfc18a9a2c56583299a239108c9d137f746b82200a908101905b818110620023285750620020ae565b8290608051808255868201556200234260028201620065b3565b6080516003820155620023586004820162006448565b60805160058201550162002319565b80634e487b7160e01b602492526011600452fd5b634e487b7160e01b905260416004526024608051fd5b60069080820290828204036200241d57836080528284527fe5dac618068543225ae1c2f585dbaa37d058ab507104bc7da3da5ab2e5666cc7908101905b818110620023de5750506200207b565b829060805180825587820155620023f860028201620065b3565b60805160038201556200240e6004820162006448565b608051600582015501620023ce565b602484634e487b7160e01b81526011600452fd5b34620001e65760805180600319360112620001e3576020604051338152f35b34620001e65760805180600319360112620001e35760206202712d54604051908152f35b34620001e6576040366003190112620001e6576004356001600160401b038111620001e657620024a990369060040162004152565b6024356001600160401b038111620001e657620024cb90369060040162004430565b620271298054600260ff8216620024e28162004091565b14620034715760ff191660021790556202712e54600181019081106200311a57806202712e5560805190815b84518110156200257157826002620025326200252b848962005bed565b5162014e46565b500154106200254d575b620025479062005b81565b6200250e565b9150620025476002620025656200252b858862005bed565b5001549290506200253c565b50919060805191825b8551811015620025d757620025946200252b828862005bed565b508460038092015410620025b5575b50620025af9062005b81565b6200257a565b819450620025cc6200252b620025af938962005bed565b5001549390620025a3565b508493608051526202712b6020526080519060408220916001600160a01b038251166001600160a01b03198454161783556020820151805191600160401b83116200237b5750600184015482600186015580831062003296575b50608080516001860190525160208082209392015b82821062002bb657505050509060026040620026669301519101620067d9565b62002672835162005d44565b6202712e54608051526202712b6020526080519060056040832001908051926001600160401b0384116200237b5750602090620026b084846200611d565b01906080515260805160208120905b83811062002ba15750505050620026d7835162005d44565b6202712e54608051526202712b6020526080519060046040832001908051926001600160401b0384116200237b57506020906200271584846200611d565b01906080515260805160208120905b83811062002b8c57505050506200273c835162005d44565b906202712e54608051526202712b60205260805160066040822001928051916001600160401b0383116200237b57506020906200277a83866200611d565b0192608051526080519260208420845b83811062002b775750505050620027a2904262007088565b90916202712e5490526202712b602052600760406080512001551562002b33576202712e54608051526202712b6020526008620027ea60406080512092600784015462007088565b91909201551562002aef576202712e54608051526202712b602052600960406080512001600260ff1982541617905562002825815162005d44565b6202712e54608051526202712b60205260805160036040822001918051916001600160401b0383116200237b57506020906200286283856200611d565b0191608051526080519160208320835b83811062002ada5785855b8151811015620028e057806200054f6200289c620028da938562005bed565b516202712e54608051526202712b602052620028c18360036040608051200162005f0b565b90919082549060031b91821b91600019901b1916179055565b6200287d565b50608051905b805182101562002ad4576202712e549182608051526202712b602052620029276200291a8260036040608051200162005f0b565b90549060031b1c62014e46565b505490620029358262005d44565b916080515b81811062002a86575050608051805b835182101562002a51576200295f828562005bed565b5161271090818110156200055f5760031b6001015462002980848762005bed565b51918210156200055f5760066200299d9260031b01549062006fe1565b901562002a0d57620029af9162007088565b919015620029c957620029c29062005b81565b9062002949565b606460405162461bcd60e51b815260206004820152601960248201527f746f74616c566f74696e67506f776572206f766572666c6f77000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152602060248201527f63757272656e74436c617373566f74696e67506f776572206f766572666c6f776044820152fd5b90506200054f91925062002a7f9394608051526202712b602052620028c18360066040608051200162005f0b565b90620028e6565b62002ace9086608051526202712b60205262002abb8162002ab46200291a8760036040608051200162005f0b565b5062005f0b565b90549060031b1c6200200d828762005bed565b6200293a565b60805180f35b60019060208451940193818401550162002872565b606460405162461bcd60e51b815260206004820152601b60248201527f657865637574696e6720656e642074696d65206f766572666c6f7700000000006044820152fd5b606460405162461bcd60e51b815260206004820152601860248201527f766f74696e6720656e642074696d65206f766572666c6f7700000000000000006044820152fd5b6001906020845194019381840155016200278a565b60019060208451940193818401550162002724565b600190602084519401938184015501620026bf565b80516001600160a01b03815116855490602083015160268110156200182d5774ff00000000000000000000000000000000000000007fffffffffffffffffffffff0000000000000000000000000000000000000000009160a01b1692161717855560406001860191015190815190602082519262002c358484620064d6565b019060805152608051906020822091905b83821062003276575050505060208101518051906001600160401b03821162001f92576020600288019162002c7c848462016a33565b019060805152608051916020832090835b8160051c81106200322d5750601f1981168103620031dc575b5050506040820151805191600160401b83116200237b5750600387015482600389015580831062003153575b506080805160038901905251602080822092015b8382106200313257505050506060810151805190600160401b821162001f9257600487015482600489015580831062003095575b506080805160048901905251602080822092015b838210620030745750505050608081015180516001600160401b03811162001f92576020600588019262002d63838562016a33565b0191608051526080519060208220915b8160051c8110620030345750601f198116810362002fd8575b5050506006850160a0820151602081519162002da9838562006564565b0191608051526080516020812090925b82841062002f7257505050506007850160c0820151602081519162002ddf838562006564565b0191608051526080516020812090925b82841062002f03575050505060e001518051906001600160401b03821162001f925762002e2f8262002e25600889015462005221565b600889016200678f565b60805190602091601f841160011462002e88575092826009936020936001966080519262002e7c575b5050600019600383901b1c191690851b1760088801555b0194019101909262002646565b015190508e8062002e58565b600888019052608051602081209291905b601f198516811062002eea575083602093600196938793600997601f1981161062002ed0575b505050811b01600888015562002e6f565b015160001960f88460031b161c191690558e808062002ebf565b9192602060018192868501518155019401920162002e99565b80518051906001600160401b03821162001f925760209062002f2683866200611d565b01836080515260805160208120905b83811062002f5457505050506001602081920192019301929062002def565b60019060206001600160a01b03855116940193818401550162002f35565b80518051906001600160401b03821162001f925760209062002f9583866200611d565b01836080515260805160208120905b83811062002fc357505050506001602081920192019301929062002db9565b60019060208451940193818401550162002fa4565b60805192835b601f1983168303811062002ffc57505060051c01558a808062002d8c565b909360206200302a60019284885191620030168362004eaa565b9060ff809160031b9316831b921b19161790565b9501910162002fde565b608051805b602081106200305057508382015560010162002d73565b949060206200306a60019288855191620030168362004eaa565b9201950162003039565b6006602082620030886001945187620068ac565b0193019101909162002d2e565b60068181020481036200311a5760068381020483036200311a5760048801608051526020608051208360060281015b8260060282018110620030d957505062002d1a565b6006906080518082556001820155620030f560028201620065b3565b60805160038201556200310b6004820162006448565b608051600582015501620030c4565b634e487b7160e01b6080515260116004526024608051fd5b6007602082620031466001945187620168c1565b0193019101909162002ce6565b60078181020481036200311a5760078381020483036200311a5760038801608051526020608051208360070281015b82600702820181106200319757505062002cd2565b80620031a560079262005fed565b6080518060018301558060028301558060038301556004820155620031cd6005820162006448565b60805160068201550162003182565b8392845b601f19831683038110620031fe57505060051c01558b808062002ca6565b90936020620032236001928488511515919060ff809160031b9316831b921b19161790565b95019101620031e0565b84855b602081106200324757508382015560010162002c8d565b949060206200326c6001928885511515919060ff809160031b9316831b921b19161790565b9201950162003230565b60016020826200328983945187620067d9565b0193019101909162002c46565b60098181020481036200311a5760098381020483036200311a5760018501608051526020608051208360090281015b8260090282018110620032da57505062002631565b6080518155620032ed6001820162006497565b6200330360028201805490608051815562016a0b565b600381015460805180600384015581620033ff575b50506004810154608051806004840155816200337b575b5050806200334a600560099301805490608051815562016a0b565b620033586006820162006525565b620033666007820162006525565b620033746008820162006448565b01620032c5565b6006828102048203620033e957506004820160805152602060805120906006028101905b818110156200332f576006906080518082556001820155620033c460028201620065b3565b6080516003820155620033da6004820162006448565b6080516005820155016200339f565b634e487b7160e01b905260116004526024608051fd5b6007828102048203620033e957506003820160805152602060805120906007028101905b818110156200331857806200343a60079262005fed565b6080518060018301558060028301558060038301556004820155620034626005820162006448565b60805160068201550162003423565b606460405162461bcd60e51b815260206004820152601d60248201527f766f74696e6720697320616c726561647920696e2070726f67726573730000006044820152fd5b34620001e6576020366003190112620001e6576004356127108110156200055f57620034eb60046200195a9260031b01620054ac565b60405191829182620040b2565b34620001e65760805180600319360112620001e3576040518062013881918254808252602080920193608051527fcd6f7cece5c70f73af31bb8ed8b80ae1c2a9e5eb261bd5ab2d9374b0c38719c891608051905b82821062003567576200195a85620034eb8189038262003fd9565b83546001600160a01b0316865294850194600193840193909101906200354c565b34620001e657602080600319360112620001e6576001600160a01b03620035ae62003ecd565b604051620035bc8162003efe565b608051815260805184820152606060408201526060608051910152166080515262013880815260406080512060405190620035f78262003efe565b6200367281549160ff83161515845260ff8585019360081c161515835260026040519162003636836200362e81600185016200525e565b038462003fd9565b6040860192835201549260608501938452604051958695818752511515908601525115156040850152516080606085015260a08401906200412b565b905160808301520390f35b34620001e65760805180600319360112620001e35760206202712e54604051908152f35b34620001e6576020366003190112620001e6576020620036c360043562006ee3565b604051908152f35b34620001e65760805180600319360112620001e3576020620036c36200709a565b34620001e6576020366003190112620001e65760206200370e60043562016c12565b6200371d6040518092620040f8565bf35b34620001e657602080600319360112620001e6576004356200374d478211156200192962001dc08462006190565b33608051526201388790818352620037976040608051205482111562001929620037778462006190565b3360805152858752620037906040608051205462006190565b906200631d565b3360805152818352620037df620037b5826040608051205462006155565b919062001929620037c68562006190565b3360805152868852620037906040608051205462006190565b33608051528284526080518080938193604083205581811562003971575b3390f1156200036257336080515281526040608051205415620038205760805180f35b62013888805490620038328262005d44565b9260805192835b818110620039055750506200384e8362005d44565b918251926001600160401b03841162001f925791839262003870829562005f3d565b01906080515260805192835b838110620038c957505050505b8181106200389957505062002ad4565b806200054f6001600160a01b03620038b6620038c3948762005bed565b511662001f308362005d7c565b62003889565b82516001600160a01b03167ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df820155918101916001016200387c565b620039108162005d7c565b6001600160a01b03915490826003923392841b1c16036200393f575b5050620039399062005b81565b62003839565b956200396891839762003956620039399562005d7c565b9054911b1c166200200d828a62005bed565b9490876200392c565b506108fc620037fd565b34620001e65760805180600319360112620001e3576040518062013886918254808252602080920193608051527f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa491608051905b828210620039ea576200195a85620034eb8189038262003fd9565b83546001600160a01b031686529485019460019384019390910190620039cf565b34620001e6576040366003190112620001e657600435602435906001600160a01b038216809203620001e6576127108110156200055f5760039160805152811b01602052602060406080512054604051908152f35b34620001e65760805180600319360112620001e3576040518062013888918254808252602080920193608051527ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df91608051905b82821062003acf576200195a85620034eb8189038262003fd9565b83546001600160a01b03168652948501946001938401939091019062003ab4565b34620001e65760805180600319360112620001e357602060ff6202712954166040519062003b1e8162004091565b8152f35b34620001e6576040366003190112620001e65762003b3f62003ecd565b60249081356001600160401b038111620001e65762003b6390369060040162004021565b91600260ff62027129541662003b798162004091565b0362003e67576202712d5442101562003e23576001600160a01b0382169182608051526202712c906020938285526080519560408720966202712e978854809252875260ff604060805120541662003de05781519481608051526202712b938489526003968760406080512001540362003d7757608051528752608051906040822091528652608051966040882060019889918260ff19825416179055905b62003c235760805180f35b825181101562003d715762003c39818462005bed565b511562003cf7578154806080515284895262003c9c62003c7f62003c668460046040608051200162005f0b565b9054908a1b1c62003c78858a62016a9d565b9062007088565b909260805152868b52620028c18460046040608051200162005f0b565b1562003cb45762003cad9062005b81565b8862003c18565b606488601c896040519262461bcd60e51b845260048401528201527f766f74696e6720666f7220706f776572596573206f766572666c6f77000000006044820152fd5b8154806080515284895262003d1d62003c7f62003c668460046040608051200162005f0b565b1562003d2e5762003cad9062005b81565b606488601b896040519262461bcd60e51b845260048401528201527f766f74696e6720666f7220706f7765724e6f206f766572666c6f7700000000006044820152fd5b62002ad4565b60848960398a6040519262461bcd60e51b845260048401528201527f746865206e756d626572206f6620766f74657320646f6573206e6f74206d617460448201527f636820746865206e756d626572206f6620706f6c6963696573000000000000006064820152fd5b6064876017886040519262461bcd60e51b845260048401528201527f766f7465722068617320616c726561647920766f7465640000000000000000006044820152fd5b60649060176040519162461bcd60e51b8352602060048401528201527f766f74696e6720706572696f642068617320656e6465640000000000000000006044820152fd5b60649060196040519162461bcd60e51b8352602060048401528201527f766f74696e67206973206e6f7420696e2070726f6772657373000000000000006044820152fd5b3462003ec9578160031936011262003ec95760209062027127548152f35b5080fd5b600435906001600160a01b038216820362003ee457565b600080fd5b35906001600160a01b038216820362003ee457565b608081019081106001600160401b0382111762003f1a57604052565b634e487b7160e01b600052604160045260246000fd5b60c081019081106001600160401b0382111762003f1a57604052565b61010081019081106001600160401b0382111762003f1a57604052565b606081019081106001600160401b0382111762003f1a57604052565b60e081019081106001600160401b0382111762003f1a57604052565b604081019081106001600160401b0382111762003f1a57604052565b602081019081106001600160401b0382111762003f1a57604052565b90601f801991011681019081106001600160401b0382111762003f1a57604052565b6001600160401b03811162003f1a5760051b60200190565b3590811515820362003ee457565b81601f8201121562003ee4578035916200403b8362003ffb565b926200404b604051948562003fd9565b808452602092838086019260051b82010192831162003ee4578301905b82821062004077575050505090565b838091620040858462004013565b81520191019062004068565b600411156200409c57565b634e487b7160e01b600052602160045260246000fd5b6020908160408183019282815285518094520193019160005b828110620040da575050505090565b83516001600160a01b031685529381019392810192600101620040cb565b9060038210156200409c5752565b60005b8381106200411a5750506000910152565b818101518382015260200162004109565b90602091620041468151809281855285808601910162004106565b601f01601f1916010190565b81601f8201121562003ee4578035916200416c8362003ffb565b926200417c604051948562003fd9565b808452602092838086019260051b82010192831162003ee4578301905b828210620041a8575050505090565b8135815290830190830162004199565b6001600160401b03811162003f1a57601f01601f191660200190565b81601f8201121562003ee457803590620041ee82620041b8565b92620041fe604051948562003fd9565b8284526020838301011162003ee457816000926020809301838601378301015290565b9080601f8301121562003ee4578135906200423c8262003ffb565b926200424c604051948562003fd9565b828452602092838086019160051b8301019280841162003ee457848301915b8483106200427c5750505050505090565b82356001600160401b03811162003ee4578691620042a084848094890101620041d4565b8152019201916200426b565b9080601f8301121562003ee457813590620042c78262003ffb565b92620042d7604051948562003fd9565b828452602092838086019160051b8301019280841162003ee457848301915b848310620043075750505050505090565b82356001600160401b03811162003ee45786916200432b8484809489010162004152565b815201920191620042f6565b9080601f8301121562003ee457813591620043528362003ffb565b92604092620043648451958662003fd9565b8185526020938486019185600594851b8601019481861162003ee457868101935b8685106200439857505050505050505090565b84356001600160401b03811162003ee457820183603f8201121562003ee4578881013590620043c78262003ffb565b91620043d68751938462003fd9565b808352868b8401918a1b8301019186831162003ee45791878c94929593015b8181106200440e57505082935081520194019362004385565b9193809193956200441f8462003ee9565b8152019101918b93919492620043f5565b6060918161070052806107c052031262003ee457604051620044528162003f69565b8091620044626107005162003ee9565b8252610700516020810135806107e0526001600160401b03811162003ee4576107c051910190601f8201121562003ee457620044a8620044b69135806106e05262003ffb565b604051806106c05262003fd9565b6106c0516106e051905260206106c05101926107c0516106e0519060206107e05161070051019260051b8301011162003ee4576020016106a05290925b6106e05160051b6107e05161070051019060206106a0519183010181101562004e6c57356001600160401b03811162003ee457606091018061074052601f19906107c05103011262003ee4576040516200454d8162003f69565b6200455e6020610740510162003ee9565b81526040610740510135602681101562003ee45760208201526107405160608101356107208190526001600160401b031062003ee45761010090601f19906060810135016107c05103011262003ee457620045c0604051806107a05262003f4c565b6107205161074051016020810135906001600160401b03821162003ee4576020620045f2926107c05192010162004221565b6107a051526107205161074051016040810135906001600160401b03821162003ee457602062004629926107c05192010162004021565b60206107a0510152610720516107405101926001600160401b0360608501351162003ee4576107c051603f6060860135860101121562003ee45762004678602060608601358601013562003ffb565b9462004688604051968762003fd9565b60608501358086016020908101358089526107c0516107205161074051938b01969493019092019160059190911b82016040011162003ee457604001925b61072051610740510160608801359081019088016020013560051b8101604001851015620047d2578435906001600160401b03821162003ee4570160e09182603f19836107c05103011262003ee457604051620047238162003f85565b60408301356001600160401b03811162003ee4576107c0516200474b91850160400162004152565b815260608301356020820152608080840135604083015260a09485850135606084015260c0916200477e83870162004013565b90840152840135946001600160401b03861162003ee45761010060209695620047c292620047b7899860406107c05191850101620041d4565b908601520162004013565b90820152815201930192620046c6565b505095915091935094919460406107a0510152610720516107405101946080860135610780526001600160401b0360808701351162003ee4576107c0519560808101350195603f8701121562003ee45762004831602087013562003ffb565b9462004841604051968762003fd9565b6020878101358088526107c051610780516107205161074051948b01989401019160051b82016040011162003ee4576040909893929897949701935b61078051610720516107405101016040602086013560051b82010186101562004caf578535610760526001600160401b0386351162003ee45761010090603f19908735016107c05103011262003ee45760405193620048dc8562003f4c565b6040610760516107805161072051610740510101010135600681101562003ee45785526060610760516107805161072051610740510101010135602086015261076051610780516107205161074051010101996001600160401b0360808c01351162003ee4576107c051605f60808d01358d0101121562003ee4578a906200496e604060808401358401013562003ffb565b9a6200497e6040519c8d62003fd9565b608083013592830160400135808d526107c051610760516107805161072051610740510101019094019360208e01939160051b85016060011162003ee4579192606001915b6107605161078051610720516107405101010160808f0135908101908f016040013560051b810160600184101562004bb5578335906001600160401b03821162003ee45760c0605f198383016107c05103011262003ee4576040519162004a2a8362003f30565b8181016060810135845260800135600581101562003ee457602084015260a08183010135600481101562003ee4576040840152603d60c08284010135101562003ee45760c0818301013560608401526001600160401b0360e082840101351162003ee4576107c05162004aa99083830160e08101350160600162004152565b60808401526101008183010135916001600160401b03831162003ee45701016080605f19826107c05103011262003ee4578f956040519262004aeb8462003efe565b60608301356001600160401b03811162003ee4576107c05162004b1391850160600162004221565b845260808301356001600160401b03811162003ee4576107c05162004b3d918501606001620042ac565b602085015260a08301356001600160401b03811162003ee4576107c05162004b6a91850160600162004337565b604085015260c0830135936001600160401b03851162003ee45762004b9d60209594606087966107c051920101620041d4565b606082015260a08201528152019301929350620049c3565b509697939c509798939a915050604082015260a091826107605161078051610720516107405101010101356060830152610760516107805161072051610740510101019160c09384840135946001600160401b03861162003ee45762004c2960209695604088976107c051920101620041d4565b608084015260e09162004c5083610760516107805161072051610740510101010162004013565b9084015262004c75610100610760516107805161072051610740510101010162004013565b9083015262004c9a610120610760516107805161072051610740510101010162004013565b9082015281520195019396979291976200487d565b509250969250925060606107a0510152610720516107405101936001600160401b0360a08601351162003ee4576107c0519460a0810135810195603f8701121562003ee45762004d03602087013562003ffb565b9262004d13604051948562003fd9565b6020878101358086526107c051610720516107405193880196930160a0860135019160051b82016040011162003ee457604001935b604060208a013560051b60a086013561072051610740510101010185101562004d86578435600581101562003ee45781526020948501940162004d48565b5096509694939291505060806107a05101526107205161074051019160c09283810135906001600160401b03821162003ee457602062004dcd926107c051920101620042ac565b60a06107a05101526107205161074051019260e09384810135906001600160401b03821162003ee457602062004e0a926107c05192010162004337565b906107a0510152610720516107405101926101008401356001600160401b03811162003ee4576107c05160209562004e4592018601620041d4565b906107a05101526107a05160408201528152019260206106a051016106a0529092620044f3565b50505091906106c05160208201526107005160408101356001600160401b03811162003ee4576107c05160409262004ea59201620041d4565b910152565b600511156200409c57565b90815180825260208080930193019160005b82811062004ed6575050505090565b83518552938101939281019260010162004ec7565b908082519081815260208091019281808460051b8301019501936000915b84831062004f1a5750505050505090565b909192939495848062004f3a600193601f198682030187528a516200412b565b980193019301919493929062004f09565b908082519081815260208091019281808460051b8301019501936000915b84831062004f7a5750505050505090565b909192939495848062004f9a600193601f198682030187528a5162004eb5565b980193019301919493929062004f69565b908082519081815260208091019281808460051b830101950193600080925b85841062004fdc575050505050505090565b9091929380959697601f1983820301855288519082808351928381520192019085905b8082106200502157505050908060019299019401940192959493919062004fca565b919380600192946001600160a01b03875116815201940192018893929162004fff565b90808251808352602080930192600592818084861b8301019601946000915b84831062005075575050505050505090565b90919293949596601f19828203018352875190610100808201835160068110156200409c579083929189945283850151848401528a60409182870151938386015283518091528561012082818801941b8701019401926000905b8282106200513a575050505050928291620051046001956060808501519084015260808085015190848303908501526200412b565b9160a08082015115159083015260c08082015115159083015260e080910151151591015299019301930191959493929062005063565b9193959650919361011f19878203018552855190815181528c820151620051618162004eaa565b8d82015282820151620051748162004091565b8382015260609081830151603d8110156200409c576001938f93836200520f93828796015281620051ff620051ee620051dd6080620051c08189015160c080848a015288019062004eb5565b9560a0809901519881880391015287519080875286019062004eeb565b888701518582038a87015262004f4b565b8a8601518482038c86015262004fab565b930151918184039101526200412b565b9701950192018b9695949391620050cf565b90600182811c9216801562005253575b60208310146200523d57565b634e487b7160e01b600052602260045260246000fd5b91607f169162005231565b9060009291805491620052718362005221565b918282526001938481169081600014620052d8575060011462005295575b50505050565b90919394506000526020928360002092846000945b838610620052c35750505050010190388080806200528f565b805485870183015294019385908201620052aa565b9294505050602093945060ff191683830152151560051b010190388080806200528f565b9081546200530a8162003ffb565b926040936200531c8551918262003fd9565b828152809460208092019260005281600020906000935b8585106200534357505050505050565b600184819284516200535b816200061d818a6200525e565b81520193019401939162005333565b9060405191828154918282526020928383019160005283600020936000905b828210620053a457505050620053a29250038362003fd9565b565b85548452600195860195889550938101939091019062005389565b90604051620053ce8162003f85565b60c060ff60068395620053e1816200536a565b8552600181015460208601526002810154604086015260038101546060860152826004820154161515608086015260405162005426816200061d81600586016200525e565b60a08601520154161515910152565b60068210156200409c5752565b603d8210156200409c5752565b9081546200545d8162003ffb565b926200546d604051948562003fd9565b818452600090815260208082208186015b8484106200548d575050505050565b60018381926200549d856200536a565b8152019201930192906200547e565b9060405191828154918282526020928383019160005283600020936000905b828210620054e457505050620053a29250038362003fd9565b85546001600160a01b031684526001958601958895509381019390910190620054cb565b908154620055168162003ffb565b9262005526604051948562003fd9565b818452600090815260208082208186015b84841062005546575050505050565b60018381926200555685620054ac565b81520192019301929062005537565b9060036060604051620055788162003efe565b620055c381956200558981620052fc565b835262005599600182016200544f565b6020840152620055ac6002820162005508565b60408401526200362e60405180968193016200525e565b0152565b919060608101906001600160a01b03845116815260208401519160606020830152825180915260808201602060808360051b85010194019160005b8181106200562a5750505050604062005627939401519060408184039101526200412b565b90565b90919294607f1985820301845285516001600160a01b03815116825260208101519060268210156200409c57604091602084015201519060606040820152620056828251610100606084015261016083019062004eeb565b602083810151838303605f190160808501528051808452928201929101906000905b80821062005a1757505050604083015190605f198382030160a0840152815180825260208201906020808260051b85010194019260005b82811062005992575050505050606083015190605f198382030160c0840152815190818152602081016020808460051b8401019401926000925b818410620057de575050505050608083015190605f198382030160e0840152602080835192838152019201906000905b808210620057ba57505050620057ad8360209360e0620057966200577e879660a060019a0151605f198683030161010087015262004f4b565b60c0850151848203605f190161012086015262004fab565b92015190610140605f19828503019101526200412b565b9701940192910162005602565b9091926020806001928651620057d08162004eaa565b815201940192019062005745565b9091929394601f9e9d9c9e19828203018452855190815160068110156200409c5781526020820151602082015260408201516101006040830152610100820181518091526101206020818501918360051b8601019301916000905b808210620058a657505050509e9f9d9e82602092620058728493606060019701516060840152608084015183820360808501526200412b565b9160a0810151151560a083015260c0810151151560c083015260e08091015115159101529701940194019293919062005715565b9091929361011f19868203018452845190815181526020820151620058cb8162004eaa565b60208201526040820151620058e08162004091565b6040820152606082015191603d8310156200409c5762005985826020939260019560608695015260a062005924608083015160c0608086015260c085019062004eb5565b9101519160a0818303910152606062005973620059606200594f855160808652608086019062004eeb565b878601518582038987015262004f4b565b6040850151848203604086015262004fab565b9201519060608184039101526200412b565b9601940192019062005839565b9091929394602080600192601f19868203018852885190620059fc620059c1835160e080855284019062004eb5565b8484015185840152604084015160408401526060840151606084015260808401511515608084015260a084015183820360a08501526200412b565b60c092830151151591909201529701950193929101620056db565b909192602080600192865115158152019401920190620056a4565b90620053a2604560405180947f496e76616c69642070726f6772616d20616464726573732e204d73672e73656e60208301527f6465723a20000000000000000000000000000000000000000000000000000000604083015262005a9f815180926020868601910162004106565b810103602581018552018362003fd9565b90620053a26040805180947f2c20616e642070726f6772616d206f70657261746f7220616464726573733a20602083015262005af6815180926020868601910162004106565b810103602081018552018362003fd9565b6020620053a291939293604051948162005b2b879351809286808701910162004106565b820162005b418251809386808501910162004106565b0103808552018362003fd9565b1562005b575750565b62005b7d9060405191829162461bcd60e51b83526020600484015260248301906200412b565b0390fd5b600019811462005b915760010190565b634e487b7160e01b600052601160045260246000fd5b80511562005bb55760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101562005bb55760400190565b80516002101562005bb55760600190565b805182101562005bb55760209160051b010190565b600f620053a2916020949360405195869262005c6062005c528386016021907f496e76616c696420776974686472617720616d6f756e742e20416d6f756e743a8152600160fd1b60208201520190565b918281519485920162004106565b017f2c20616e642062616c616e63653a200000000000000000000000000000000000815262005c99825180936020878501910162004106565b010360101981018552018362003fd9565b6019620053a2916020949360405195869262005cfa62005c528386016021907f496e76616c696420776974686472617720616d6f756e742e20416d6f756e743a8152600160fd1b60208201520190565b017f2c20616e6420776974686472617761626c6520636173683a2000000000000000815262005d33825180936020878501910162004106565b010360061981018552018362003fd9565b9062005d508262003ffb565b62005d5f604051918262003fd9565b828152809262005d72601f199162003ffb565b0190602036910137565b62013888805482101562005bb5576000527ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df0190600090565b62013886805482101562005bb5576000527f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa40190600090565b62013881805482101562005bb5576000527fcd6f7cece5c70f73af31bb8ed8b80ae1c2a9e5eb261bd5ab2d9374b0c38719c80190600090565b6202711d805482101562005bb5576000527f7f4320370b90cfd882bd4442421f8b4dbea0ca3aefc8d29d4787126914d53c5a0190600090565b6201388a805482101562005bb5576000527f3fb2ace5abc3439263a869a5230f0e568826a389e5a73118798eab8fd0f728590190600090565b62027119805482101562005bb5576000527fe43a1016fd4ea9a9b882244b4d001d1f2d6b7fe146dc2643bb2c59db4a7bb0e10190600090565b6202711b805482101562005bb5576000527fc59860dc09a642b584039e685e1d1ef32a7f12bf29c382ee17f417fe2f31f3990190600090565b805482101562005bb55760005260206000200190600090565b81811062005f30575050565b6000815560010162005f24565b600160401b811162003f1a57620138889081549080835581811062005f6157505050565b620053a2926000527ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df918201910162005f24565b600160401b811162003f1a57620138869081549080835581811062005fb957505050565b620053a2926000527f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa4918201910162005f24565b8054600082558062005ffd575050565b620053a29160005260206000209081019062005f24565b600160401b811162003f1a5762027119908154908083558181106200603857505050565b620053a2926000527fe43a1016fd4ea9a9b882244b4d001d1f2d6b7fe146dc2643bb2c59db4a7bb0e1918201910162005f24565b600160401b811162003f1a576202711b908154908083558181106200609057505050565b620053a2926000527fc59860dc09a642b584039e685e1d1ef32a7f12bf29c382ee17f417fe2f31f399918201910162005f24565b6201389180549060009081815582620060dc57505050565b81527f8f332db73d3937798ea82422156d059730b0b3058606439b57b7ae623e945366918201915b8281106200611157505050565b81815560010162006104565b90600160401b811162003f1a578154908083558181106200613d57505050565b620053a2926000526020600020918201910162005f24565b919082811162006166576001920390565b50600091508190565b81156200617a570490565b634e487b7160e01b600052601260045260246000fd5b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000808210156200630e575b506d04ee2d6d415b85acef810000000080831015620062fe575b50662386f26fc1000080831015620062ee575b506305f5e10080831015620062de575b5061271080831015620062ce575b506064821015620062bd575b600a80921015620062b2575b600190816021818601956200623287620041b8565b9662006242604051988962003fd9565b80885262006253601f1991620041b8565b01366020890137860101905b6200626c575b5050505090565b600019019083907f30313233343536373839616263646566000000000000000000000000000000008282061a835304918215620062ac579190826200625f565b62006265565b91600101916200621d565b919060646002910491019162006211565b6004919392049101913862006205565b60089193920491019138620061f7565b60109193920491019138620061e7565b60209193920491019138620061d4565b604093508104915038620061ba565b601e620053a291602094936040519586926200636d62005c528386016021907f496e76616c696420776974686472617720616d6f756e742e20416d6f756e743a8152600160fd1b60208201520190565b017f2c20616e6420776974686472617761626c65206469766964656e64733a2000008152620063a6825180936020878501910162004106565b010360011981018552018362003fd9565b90620063c38262003ffb565b604090620063d48251918262003fd9565b8381528093620063e7601f199162003ffb565b019160005b838110620063fa5750505050565b60209082516200640a8162003f4c565b6000815282600081830152606080868401526000818401526080830152600060a0830152600060c0830152600060e0830152828601015201620063ec565b62006454815462005221565b90816200645f575050565b81601f6000931160011462006472575055565b90808391825262006493601f60208420940160051c84016001850162005f24565b5555565b8054906000815581620064a8575050565b6000526020600020908101905b818110620064c1575050565b80620064cf60019262006448565b01620064b5565b90600160401b811162003f1a57815491818155828210620064f657505050565b600052602060002091820191015b81811062006510575050565b806200651e60019262006448565b0162006504565b805490600081558162006536575050565b6000526020600020908101905b8181106200654f575050565b806200655d60019262005fed565b0162006543565b90600160401b811162003f1a578154918181558282106200658457505050565b600052602060002091820191015b8181106200659e575050565b80620065ac60019262005fed565b0162006592565b8054600080835581620065c557505050565b60079282840292848404036200664657815260208120918201915b828110620065ee5750505050565b8082859255826001820155620066076002820162005fed565b620066156003820162006497565b620066236004820162006525565b620066316005820162006525565b6200663f6006820162006448565b01620065e0565b602482634e487b7160e01b81526011600452fd5b600160401b821162003f1a578054908281558183106200667957505050565b600792828402928484040362005b9157808402908482040362005b915760009182526020822092830192015b828110620066b35750505050565b8082859255826001820155620066cc6002820162005fed565b620066da6003820162006497565b620066e86004820162006525565b620066f66005820162006525565b620067046006820162006448565b01620066a5565b5160068110156200409c5790565b9060068110156200409c5760ff80198354169116179055565b906200673e8162004eaa565b60ff80198354169116179055565b90620067588162004091565b61ff0082549160081b169061ff001916179055565b90603d8110156200409c5762ff000082549160101b169062ff00001916179055565b9190601f81116200679f57505050565b620053a2926000526020600020906020601f840160051c83019310620067ce575b601f0160051c019062005f24565b9091508190620067c0565b91909182516001600160401b03811162003f1a576200680581620067fe845462005221565b846200678f565b602080601f83116001146200684457508192939460009262006838575b50508160011b916000199060031b1c1916179055565b01519050388062006822565b90601f198316958460005282600020926000905b888210620068935750508360019596971062006879575b505050811b019055565b015160001960f88460031b161c191690553880806200686f565b8060018596829496860151815501950193019062006858565b815160068110156200409c57620068c4908262006719565b602082015160018201556002810160408301516020815191620068e883856200665a565b01916000526020600020916000905b8282106200697c57505050509060e06005620053a293606084015160038201556200692a608085015160048301620067d9565b01916200694960a08201511515849060ff801983541691151516179055565b60c0810151835461ff00191690151560081b61ff00161783550151815462ff0000191690151560101b62ff000016179055565b80518051855560018501620069a160208301516200699a8162004eaa565b8262006732565b620069bc6040830151620069b58162004091565b826200674c565b6060820151603d8110156200409c57620069d6916200676d565b60808101518051906001600160401b03821162003f1a576020600288019162006a0084846200611d565b0190600052602060002060005b83811062006cab575050505060a0015180518051906020600388019162006a358484620064d6565b01906000526020600020906000905b83821062006c8b5750505050600485016020820151602081519162006a6a838562006564565b019160005260206000206000925b82841062006c275750505050600585016040820151602081519162006a9e838562006564565b019160005260206000206000925b82841062006bba5750505050606001518051906001600160401b03821162003f1a5762006aec8262006ae2600689015462005221565b600689016200678f565b602090601f831160011462006b3f57928260079360209360019660009262006b33575b5050600019600383901b1c191690851b1760068801555b01940191019092620068f7565b01519050388062006b0f565b906006870160005260206000209160005b601f198516811062006ba1575083602093600196938793600797601f1981161062006b87575b505050811b01600688015562006b26565b015160001960f88460031b161c1916905538808062006b76565b9192602060018192868501518155019401920162006b50565b80518051906001600160401b03821162003f1a5760209062006bdd83866200611d565b0183600052602060002060005b83811062006c0957505050506001602081920192019301929062006aac565b60019060206001600160a01b03855116940193818401550162006bea565b80518051906001600160401b03821162003f1a5760209062006c4a83866200611d565b0183600052602060002060005b83811062006c7657505050506001602081920192019301929062006a78565b60019060208451940193818401550162006c57565b600160208262006c9e83945187620067d9565b0193019101909162006a44565b60019060208451940193818401550162006a0d565b6201388390815481101562005bb557600691600052027f9e32270fdbb1cb37df0574dfc18a9a2c56583299a239108c9d137f746b82200a0190600090565b6202711690815481101562005bb557600691600052027f2a7aa4e7f2fefac7a07702701afb9c202f6f79fb2762c8e42b37a264307667fa0190600090565b6201388290815481101562005bb557600691600052027fe5dac618068543225ae1c2f585dbaa37d058ab507104bc7da3da5ab2e5666cc70190600090565b6202711590815481101562005bb557600691600052027f0f9b10e190177c3c56fc6ce7689c8130c567df57aa02c08e7a090a59992adf920190600090565b620138828054600160401b81101562003f1a5762006ddc9160018201905562006d3c565b91909162006def57620053a291620068ac565b634e487b7160e01b600052600060045260246000fd5b620138838054600160401b81101562003f1a5762006ddc9160018201905562006cc0565b620271168054600160401b81101562003f1a5762006ddc9160018201905562006cfe565b620271158054600160401b81101562003f1a5762006ddc9160018201905562006d7a565b1562006e7957565b608460405162461bcd60e51b815260206004820152603760248201527f73756d4469766964656e64576569676874466f72546f6b656e436c6173733a2060448201527f6469766964656e64576569676874206f766572666c6f770000000000000000006064820152fd5b61271081101562005bb557600390811b60028101549060009260049384830191825492829682849601935b85871062006f355750505050505050620056279162006f2d9162006fe1565b919062006e71565b98979091929394959862006f965762006f8a8962006f826001600160a01b0362006f656200054f9c9d8862005f0b565b905490891b1c169360009485528860205260408520549062007088565b9a9062007003565b95949392919062006f0e565b603282634e487b7160e01b6000525260246000fd5b90811562006fd857606462006fc481840293846200616f565b0362006fd05760019190565b600091508190565b60019150600090565b9190821562006ff95762006fc481840293846200616f565b5060019150600090565b156200700b57565b608460405162461bcd60e51b815260206004820152602e60248201527f746f74616c546f6b656e73506572546f6b656e436c6173733a20746f74616c5460448201527f6f6b656e73206f766572666c6f770000000000000000000000000000000000006064820152fd5b906001820191821062006fd05760019190565b9190820191821062006fd05760019190565b6201388b54620070e4620070ad6201733b565b91620070bf6127109384831062005b4e565b620070d96201388e546201388c54111562001929620173c2565b6201388d5462006fe1565b919050620070f162017423565b5060009081925b81841062007113575b6200710e93500462007159565b905090565b9160ff60078560031b015416156200715257836200713f6200714b9262003c786200054f969762006ee3565b94906200192962017423565b92620070f8565b9162007101565b90801562007171576200716c916200616f565b600191565b5050600090600090565b620138918054600160401b81101562003f1a576001810180835581101562005bb5576001600160a01b03916000527f8f332db73d3937798ea82422156d059730b0b3058606439b57b7ae623e9453660191166001600160a01b0319825416179055565b6201388f8054600160401b81101562003f1a576001810180835581101562005bb5576001600160a01b03916000527f846ab89c81ea9339188216a1864da1a19ebe28d411cbec99efa70ca6d389710d0191166001600160a01b0319825416179055565b6201388190815491600160401b83101562003f1a578262001f30916001620053a29501905562005dee565b604051906200727b8262003fa1565b601882527f5468652070726f6772616d2069732065786563757465642e00000000000000006020830152565b600091825b602080840190815180518710156200743f5781620072cf88620072d79362005bed565b510162007a5a565b602692838210156200409c57601a918203620073975787620072fa915162005bed565b519282840151908110156200409c570362007353575093620073446200734c926200733c6200733560a060406200054f9a0151015162005ba7565b5162005ba7565b519062007088565b959062007a68565b92620072ac565b6064906040519062461bcd60e51b82526004820152601b60248201527f546865206f70636f6465206973206e6f74205041595f434153482e00000000006044820152fd5b92919050620073b081620072cf89869a979a5162005bed565b828110156200409c57601403620073e957505090620073446200054f9562003c78620073e2846200734c965162005bed565b5162007ab4565b620073fb90620072cf85855162005bed565b908110156200409c5760151462007419575b506200734c9062005b81565b9062007344620074389562003c78620073e2846200734c965162005bed565b906200740d565b505050909250803410600014620074ba57608460405162461bcd60e51b815260206004820152603760248201527f546865207061796d656e74206973206e6f7420656e6f7567682e20546865207460448201527f6f74616c207061796d656e742073686f756c64206265200000000000000000006064820152fd5b803411620078cb575b5062027129805460ff8116620074d98162004091565b600181036200750f5750505080620074ff620074f9620075059362007b4b565b62007b60565b62007bac565b620056276200726c565b6200751a8162004091565b600281148080620078bd575b156200762057505050506200753b8162007b4b565b15620075dc576200754c8162007b4b565b1562007598576200755d9062007bac565b6040516200756b8162003fa1565b601581527f54686520766f74652069732065786563757465642e0000000000000000000000602082015290565b606460405162461bcd60e51b815260206004820152601460248201527f496e76616c696420766f74652070726f6772616d0000000000000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152601760248201527f496e76616c696420766f74696e672070726f6772616d2e0000000000000000006044820152fd5b6200762b8262004091565b60038214918280620078af575b15620077335750505050506200764e8162007b4b565b15620076c95780620074ff620074f9620076689362007b4b565b604051620076768162003f69565b603a81527f5468652070656e64696e672070726f6772616d2069732065786563757465642060208201527f616674657220766f74696e6720616e6420617070726f76616c2e000000000000604082015290565b608460405162461bcd60e51b815260206004820152602260248201527f496e76616c696420657865637574696e672070656e64696e672070726f67726160448201527f6d2e0000000000000000000000000000000000000000000000000000000000006064820152fd5b6200773e8162004091565b8180620078a0575b8062007892575b15620077775750505050906200750591600360ff19825416179055620074ff620074f98262007b4b565b620077828162004091565b82156200787d575b5050806200786e575b620077d657505050604051620077a98162003fa1565b601381527f50726f6772616d207465726d696e617465642e00000000000000000000000000602082015290565b60ff19166001179055620077ea8162007b4b565b15620078045780620074ff620074f9620075059362007b4b565b608460405162461bcd60e51b815260206004820152603e60248201527f5b4572726f72203030335d5468652070726f6772616d206973206e6f7420612060448201527f76616c696420657865637574652070656e64696e672070726f6772616d2e00006064820152fd5b50620271285442101562007793565b6200788a91925062004091565b38806200778a565b50620271285442106200774d565b50620271275442101562007746565b506202712854421062007638565b506202712754421062007526565b6001600160a01b03908183511660005262013885908160205260406000205415620079c6575b620078fd903462006155565b901562007982576200792090838551166000528260205260406000205462007088565b9290156200793e5783511660005260205260406000205538620074c3565b606460405162461bcd60e51b815260206004820152601960248201527f546865206e65772062616c616e6365206f766572666c6f772e000000000000006044820152fd5b606460405162461bcd60e51b815260206004820152601c60248201527f546865207061796d656e742072657475726e206f766572666c6f772e000000006044820152fd5b6000908162013886928354915b82811062007a1f575b5015620079ed575b509050620078f1565b84865116600160401b82101562003f1a5762001f3082620078fd95600162007a189501905562005db5565b38620079e4565b8662007a2b8262005db5565b919054818b51169260031b1c161462007a4f5762007a499062005b81565b620079d3565b5050600138620079dc565b5160268110156200409c5790565b1562007a7057565b606460405162461bcd60e51b815260206004820152601f60248201527f54686520746f74616c207061796d656e7420697320746f6f206c617267652e006044820152fd5b906000805b6040840160a062007ace818351015162005bcb565b515184101562007b4357926200734462007b3360409462007b2b8562007b238662007b118b62007b18836200054f9f9e62007b119062007b399e51015162005bcb565b5162005bed565b519451015162005bdc565b519062006fe1565b929062007a68565b62007088565b9192905062007ab9565b509093505050565b60200151511562007b5b57600190565b600090565b1562007b6857565b606460405162461bcd60e51b815260206004820152600f60248201527f496e76616c69642070726f6772616d00000000000000000000000000000000006044820152fd5b62007bb78162014448565b5162013ef45760068110156200409c576003811462013e8a578062007c1a57606460405162461bcd60e51b815260206004820152601660248201527f5468652070726f6772616d20697320696e76616c6964000000000000000000006044820152fd5b600481036200b5ba5750906000905b602083015180518310156200b5b4578262007c449162005bed565b51602081018051602690818110156200409c57156200b570578151818110156200409c5760010362007e9257505060408091019062007c8860c08351015162005ba7565b519262007caa60a062007c9f818651015162005ba7565b519451015162005bcb565b519562007cbb8551855114620160fd565b62007cca85518851146201616f565b60005b855181101562007e105762007ce3818662005bed565b51612710908181101562005bb557600160ff600762007d0b9360031b015416151514620161e1565b62007d17828a62005bed565b5162007d24838862005bed565b51908282101562005bb557600662007d429260031b01549062007088565b9062007d4f848962005bed565b51918383101562005bb557600662007d6c9360031b015562016238565b62007d78828a62005bed565b519062007d86838862005bed565b518181101562005bb5578392600362007dc6928b62007daf6001600160a01b0398899262005bed565b5116600052811b0160205287600020549062007088565b62007dd2848a62005bed565b519283101562005bb55760036200054f9362007e0a9662007df4878e62005bed565b5116600052811b016020528760002055620162aa565b62007ccd565b50939262007e2d9192965062007e26906201723d565b9262017121565b94519262007e3b8462003fbd565b60008452600036813760005b835181101562007e7557806200054f62007e6662007e6f938762005bed565b51878a62016d14565b62007e47565b509450926020925062007e89915062005b81565b91905062007c29565b8151818110156200409c5760020362008166575050604080910180519283519562007ed762007ec660a08097015162005ba7565b519562007b18818651015162005bcb565b51938751865103620080fd578751845103620080945787518551036200802b575060005b8551811015620080155762007f11818762005bed565b5190612710918281101562005bb55762007f3760ff6007809360031b015416156201631b565b62007f43828962005bed565b518381101562005bb55760031b01805460ff1916600117905562007f68818a62005bed565b5162007f75828962005bed565b51908382101562005bb557600562007f919260031b01620067d9565b62007f9d818662005bed565b5162007faa828962005bed565b518381101562005bb55760031b6001015562007fc7818762005bed565b5162007fd4828962005bed565b518381101562005bb55760031b6002015562007ff1818862005bed565b519182101562005bb557600060066200800f9360031b015562005b81565b62007efb565b5095509390506020925062007e89915062005b81565b6084905162461bcd60e51b815260206004820152603c60248201527f546865206c656e677468206f6620746f6b656e496e666f20616e6420746f6b6560448201527f6e4469766964656e64576569676874206973206e6f7420657175616c000000006064820152fd5b6084905162461bcd60e51b815260206004820152603960248201527f546865206c656e677468206f6620746f6b656e496e666f20616e6420746f6b6560448201527f6e566f74696e67506f776572206973206e6f7420657175616c000000000000006064820152fd5b6084905162461bcd60e51b815260206004820152603860248201527f546865206c656e677468206f6620746f6b656e496e666f20616e6420746f6b6560448201527f6e496e6465784172726179206973206e6f7420657175616c00000000000000006064820152fd5b81959394929551818110156200409c576003036200874557505060408401906200819560c08351015162005ba7565b5193620081ac60a062007c9f818651015162005ba7565b5193620081c1865185511462001929620174fa565b620081d4865186511462001929620174fa565b60005b86518110156200823e57620081ed818662005bed565b519061271082101562005bb557600362008238926001600160a01b038b5116600052811b016020526200054f6040600020546200822b838a62005bed565b5111156200192962017621565b620081d7565b50909493919460005b855181101562008373576200825d818662005bed565b51906127108083101562005bb55760036001600160a01b0393848c5116600052811b01602052620082a160406000205462008299848962005bed565b519062006155565b90620082ae848a62005bed565b51918383101562005bb5576003620082dd93878f5116600052811b016020526040600020556200192962017621565b620082e9828862005bed565b518181101562005bb5576003908462008303858c62005bed565b5116600052811b01602052620083246040600020546200733c848962005bed565b62008330848a62005bed565b519283101562005bb55760036200054f936200836d9662008352878e62005bed565b5116600052811b016020526040600020556200192962017697565b62008247565b5092620083919195969492506200838a906201723d565b9162017121565b926001600160a01b0360405191620083a98362003fa1565b60018352602036818501375116620083c18262005ba7565b526000905b82518210156200873157620083dc828462005bed565b5196620083ea865162005d44565b93600095620083fa845162005d44565b6104c0528698875b8951811015620084c357896200842f8d6001600160a01b0362008426858562005bed565b51169062017008565b158062008485575b6200844f575b50620084499062005b81565b62008402565b81996001600160a01b036200846d62008449946200847b9462005bed565b51166200200d828c62005bed565b989050896200843d565b50506127108c101562005bb5576001600160a01b03620084a6828c62005bed565b511660005260038c811b0160205289604060002054151562008437565b509098969498979291939760005b895181101562008561576127108c101562005bb5576001600160a01b03620084fa828c62005bed565b511660005260038c811b01602052896040600020541562008528575b50620085229062005b81565b620084d1565b81996001600160a01b03620085466200852294620085579462005bed565b51166200200d826104c05162005bed565b9890508962008516565b50989593929650966127108a1015610680526127108a101562005bb55760048a60031b0154966200859d62008597878a6201542e565b62005d44565b9860009a8b610240525b6106805162005bb557610240518a8110156200865757620085f56001600160a01b038f92620085e39060006106805260048560031b0162005f0b565b90549060031b1c166104c051620170cc565b1562008615575b506200860b6102405162005b81565b61024052620085a7565b9b8b6200200d826200864f949f620086406001600160a01b03916004610240519160031b0162005f0b565b90549060031b1c169262005bed565b9a8c620085fc565b509b9398509591969499909893996000915b838310620086f857505050506106805162005bb5578151916001600160401b03831162003f1a576020600491620086a685848660031b016200611d565b019160031b01600052602060002060005b838110620086da5750505050620086ce9062005b81565b909491959295620083c6565b60019060206001600160a01b038551169401938184015501620086b7565b620087236200872a916001600160a01b0362008715868662005bed565b51166200200d828a62005bed565b9262005b81565b9162008669565b50505091926020915062007e899062005b81565b81959394929551818110156200409c57600403620089d2575050604080920160c094620087866200877a878451015162005ba7565b51968351015162005bcb565b51946200879d60a062007c9f818651015162005ba7565b5193620087b2885188511462001929620174fa565b620087c5885185511462001929620174fa565b620087d8885186511462001929620174fa565b60005b88518110156200883f57620087f1818662005bed565b519061271082101562005bb557600362008839926001600160a01b0362008819848e62005bed565b5116600052811b016020526200054f88600020546200822b838a62005bed565b620087db565b50909691959294939660005b83518110156200897f5762008861818862005bed565b5190612710918281101562005bb55760036001600160a01b03918262008888858a62005bed565b5116600052811b01602052620088a98b62008299848b600020549262005bed565b90620088b6848c62005bed565b51918583101562005bb5576003620088ef9385620088d5888d62005bed565b5116600052811b016020528a600020556200192962017621565b620088fb828a62005bed565b518381101562005bb5576003908262008915858b62005bed565b5116600052811b01602052620089368b6200733c848b600020549262005bed565b91905062008945838b62005bed565b519384101562005bb557620089799360039162008963858b62005bed565b5116600052811b01602052876000205562005b81565b6200884b565b5094620089a9929750620089a2919394506200899b906201723d565b9362017121565b9562017121565b9260005b835181101562007e7557806200054f62007e66620089cc938762005bed565b620089ad565b81959493955190808210156200409c57600591820362008c02575050506040918285019062008a1660a062008a0b818551015162005ba7565b519351015162005bcb565b5192825184510362008b995760005b835181101562008a7e5762008a3b818562005bed565b519061271082101562005bb557600362008a78926001600160a01b038b5116600052811b016020526200054f87600020546200822b838962005bed565b62008a25565b509092919260005b845181101562008b1a5762008a9c818662005bed565b51906127108083101562005bb55760036001600160a01b0393848c5116600052811b0160205262008ad7886000205462008299848962005bed565b62008ae3848a62005bed565b519283101562005bb55760036200054f9362008b14968e5116600052811b0160205289600020556200192962017621565b62008a86565b5095939262008b2b9192506201723d565b916001600160a01b0381519462008b428662003fa1565b6001865260203681880137511662008b5a8562005ba7565b52519462008b688662003fbd565b60008652600036813760005b835181101562007e7557806200054f62007e6662008b93938762005bed565b62008b74565b6084855162461bcd60e51b815260206004820152603560248201527f546865206c656e677468206f6620746f6b656e436c61737320616e6420746f6b60448201527f656e416d6f756e74206973206e6f7420657175616c00000000000000000000006064820152fd5b829693949651818110156200409c5760060362008ea05750505090604080920162008c3260c08251015162005ba7565b519462008c4960a062008a0b818551015162005ba7565b5192865183510362008e3757865184510362008dce5760005b875181101562008cc65762008c78818562005bed565b519061271082101562005bb557600362008cc0926001600160a01b0362008ca0848d62005bed565b5116600052811b016020526200054f87600020546200822b838962005bed565b62008c62565b509092919260005b875181101562008d7a5762008ce4818662005bed565b516127108082101562005bb557600383928b62008d0b6001600160a01b0396879262005bed565b5116600052811b0160205262008d2b886000205462008299848962005bed565b62008d37848a62005bed565b519283101562005bb55760036200054f9362008d749662008d5a8f889062005bed565b5116600052811b0160205289600020556200192962017621565b62008cce565b50959262008d8f91925062007e26906201723d565b92519462008d9d8662003fbd565b60008652600036813760005b835181101562007e7557806200054f62007e6662008dc8938762005bed565b62008da9565b6084855162461bcd60e51b815260206004820152603060248201527f546865206c656e677468206f662061646472657373657320616e6420616d6f7560448201527f6e7473206973206e6f7420657175616c000000000000000000000000000000006064820152fd5b6084855162461bcd60e51b815260206004820152603560248201527f546865206c656e677468206f662061646472657373657320616e6420746f6b6560448201527f6e436c6173736573206973206e6f7420657175616c00000000000000000000006064820152fd5b8251818110156200409c57600703620090085750505060408091019362008ecc60c08651015162005ba7565b519262008ede60a08751015162005ba7565b519551519162008ef6855188511462001929620174fa565b60005b8551811015620080155762009002906200054f6001600160a01b038260028862008fea8e62008fdf8e62008fc88f8962008f348a8562005bed565b511660005262008f718962008f6981620138809a8b60205262008f6360ff8760002054161562001929620175e6565b62005bed565b519662005bed565b51968a62008fa783519b8c9662008f888862003efe565b600188526060602089019860008a528781019b8c52019b8c5262005bed565b511660005260205260002097511515889060ff801983541691151516179055565b51865461ff00191690151560081b61ff0016178655565b5160018501620067d9565b5191015562008ffa838a62005bed565b511662007241565b62008ef9565b8251959695939492818510156200409c57600894850362009100575050506200903a60c0604080950151015162005ba7565b519360005b8551811015620090eb57620090e5906001600160a01b038062009063838a62005bed565b5116600052620138809081602052620090ba60ff620090916001828c60002054161515146200192962017535565b826200909e868d62005bed565b5116600052836020528960002054891c161562001929620175ab565b620090c6838a62005bed565b51166000526020528560002061010061ff001982541617905562005b81565b6200903f565b50949093506020925062007e89915062005b81565b8051828110156200409c57600903620091d5575050506200912a60c0604080950151015162005ba7565b519360005b8551811015620090eb57620091cf90866001600160a01b038062009154848462005bed565b5116600052620091a8600189836200918a8762013880978860205262008f638660ff809760002054161515146200192962017535565b5116600052846020528a600020548a1c161515146200192962017570565b620091b4838a62005bed565b51166000526020528560002061ff0019815416905562005b81565b6200912f565b809796949293959751828110156200409c57600a03620092b457505050506040809401916200921a60a06200920f60c08651015162005ba7565b519451015162005ba7565b51916200922f845184511462001929620174fa565b60005b845181101562007e7557620092ae906001600160a01b038062009256838962005bed565b511660005262013880806020526200927e600160ff8c60002054161515146200192962017535565b6200928a838862005bed565b519162009298848a62005bed565b5116600052602052600289600020015562005b81565b62009232565b8097959751828110156200409c57600b03620093845750505050604080920193620092e460c08651015162005ba7565b5194515191620092fc865184511462001929620174fa565b60005b865181101562007e75576200937e906200054f6001600160a01b038062009327848c62005bed565b511660005262013880806020526200934f600160ff8b60002054161515146200192962017535565b6200935b848962005bed565b519162009369858d62005bed565b511660005260205260018860002001620067d9565b620092ff565b8097949593969751828110156200409c57600c03620094dd57505050604001606091828251015193620093b785620154d5565b60005b8551811015620094c75760e0620093d682878751015162005bed565b510151156200945e57620093fa620093f382878751015162005bed565b5162006db8565b62013882805460001992919083810190811162005b91576200941d8a9162006d3c565b5001805461ff0019166101001790555491820191821162005b91578762009448620094589362006d3c565b5001805460ff1916905562005b81565b620093ba565b620094796200947282878751015162005bed565b5162006e05565b62013882805460001992919083810190811162005b91576200949c8a9162006cc0565b5001805461ff0019166101001790555491820191821162005b91578762009448620094589362006cc0565b5095915093506020925062007e89915062005b81565b809796959392949751828110156200409c57600d03620096345750506040019460206200950f60a08851015162005ba7565b51965101519162009524875184511462015dd4565b60005b875181101562008015578080878a62009545620095d5958962005bed565b5115620095db57620095a66200958d8483620095786200956b620095b198889762005bed565b5162013882541162015e6c565b62008f638d620095946200958d858562005bed565b5162006d3c565b509060ff9889920154901c1662015ec3565b500154161562015f35565b86620095c26200958d838c62005bed565b5001805460ff1916600117905562005b81565b62009527565b620095a66200961c848362009607620095fa6200962398889762005bed565b5162013883541162015e6c565b62008f638d620095946200961c858562005bed565b5162006cc0565b86620095c26200961c838c62005bed565b809794939751828110156200409c57600e036200971b5750506040019160206200966360a08551015162005ba7565b51935101519562009678845188511462015dd4565b60005b845181101562008015578062009696620096a2928a62005bed565b51620096a85762005b81565b6200967b565b620096c5620096b8828862005bed565b5162013882541162015fa7565b6200970a87620096ef620096de6200958d858b62005bed565b5060ff9283910154891c1662016019565b88620097006200958d858b62005bed565b500154166201608b565b86620094486200958d838962005bed565b80919293509694959651828110156200409c57600f03620098415750506040016060918282510151936200974f85620154d5565b60005b8551811015620094c75760e06200976e82878751015162005bed565b51015115620097df576200978b620093f382878751015162005bed565b62013882805460001992919083810190811162005b9157620097ae8a9162006d3c565b5001805461ff0019166101001790555491820191821162005b915787620095c2620097d99362006d3c565b62009752565b620097f36200947282878751015162005bed565b62013882805460001992919083810190811162005b9157620098168a9162006cc0565b5001805461ff0019166101001790555491820191821162005b915787620095c2620097d99362006cc0565b809192939496955051828110156200409c57601003620098e657505060400151906200987660a0608084015193015162005ba7565b51936200988b835186511462001929620174fa565b60005b8351811015620098d357806200054f620098ad620098cd938762005bed565b51620098b98162004eaa565b620098c5838a62005bed565b51906201543c565b6200988e565b509350916020915062007e899062005b81565b8095929551828110156200409c5760110362009b96575050906040809401916200991b60a06200920f60c08651015162005ba7565b51916200992c8451845114620153e2565b60005b8451811015620099a5576200999f906200054f6001600160a01b038062009957848a62005bed565b51166000526201388580602052620099798b600020546200733c868b62005bed565b91909262009988868c62005bed565b51166000526020528a600020556200192962017499565b6200992f565b5093945091620099b6915062017121565b906201388692835494620099d0620085978551886201542e565b91600093845b88811062009b58575060005b865181101562009a96576000805b8a811062009a47575b501562009a12575b62009a0c9062005b81565b620099e2565b9462009a3e62009a0c916001600160a01b0362009a30898b62005bed565b51166200200d828962005bed565b95905062009a01565b62009a528162005db5565b906001600160a01b03918291549060031b1c169062009a72858c62005bed565b51161462009a8b5762009a859062005b81565b620099f0565b5050600138620099f9565b5096509490935062009aa88362005d44565b908151916001600160401b03831162003f1a5760209062009ac98462005f95565b019060005260005b82811062009b1a5750505060005b82811062009af75750505062007e8960209162005b81565b806200054f6001600160a01b0362001f2362009b14948662005bed565b62009adf565b60019060206001600160a01b03845116930192817f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa401550162009ad1565b9462009b8962009b90916001600160a01b0362009b758962005db5565b90549060031b1c166200200d828962005bed565b9562005b81565b620099d6565b8051828110156200409c5760120362009e2157505060408094019162009bc760a06200920f60c08651015162005ba7565b519162009bd88451845114620153e2565b60005b845181101562009c2b5762009c25906200054f6001600160a01b038062009c03848a62005bed565b51166000526201388580602052620099798b6000205462008299868b62005bed565b62009bdb565b50949150929162009c3c9062017121565b9062013886805462009c4e8162005d44565b9260009485925b80841062009d1c575050505062009c6c8362005d44565b908151916001600160401b03831162003f1a5760209062009c8d8462005f95565b019060005260005b82811062009cde5750505060005b82811062009cbb5750505062007e8960209162005b81565b806200054f6001600160a01b0362001f2362009cd8948662005bed565b62009ca3565b60019060206001600160a01b03845116930192817f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa401550162009c95565b9297600097929597949194998a5b865181101562009e0f5762009d3f8b62005db5565b906001600160a01b03918291549060031b1c169062009d5f838a62005bed565b51161462009d785762009d729062005b81565b62009d2a565b509950976001979592979491945b8062009ddd575b1562009da55762009d9e9062005b81565b9262009c55565b9562009dd662009d9e916001600160a01b0362009dc28a62005db5565b90549060031b1c166200200d828a62005bed565b9662005b81565b506001600160a01b0362009df18262005db5565b90549060031b1c166000526201388560205282600020541562009d8d565b50999890989795929794919462009d86565b8095929551828110156200409c5760130362009e8257505060408091015101519260005b845181101562009e7157806200054f62009e6462009e6b938862005bed565b5162016981565b62009e45565b5092509062007e8960209162005b81565b805191808310156200409c5760149283036200a0255750505060408091019062009eb160c08351015162005ba7565b519262009ec860a062007c9f818651015162005ba7565b519562009ed98551855114620160fd565b62009ee885518851146201616f565b60005b855181101562009fd05762009f01818962005bed565b5162009f0e828762005bed565b51612710918282101562005bb557600662009f2f9260031b01549062007088565b9062009f3c848962005bed565b51918383101562005bb557600662009f599360031b015562016238565b62009f65828a62005bed565b519062009f73838862005bed565b518181101562005bb5578392600362009f9c928b62007daf6001600160a01b0398899262005bed565b62009fa8848a62005bed565b519283101562005bb55760036200054f9362009fca9662007df4878e62005bed565b62009eeb565b50939262009fe69192965062007e26906201723d565b94519262009ff48462003fbd565b60008452600036813760005b835181101562007e7557806200054f62007e666200a01f938762005bed565b6200a000565b8196949593965190808210156200409c5760159182036200a57d575050505060408401906200a05960c08351015162005ba7565b51936200a07060a062007c9f818651015162005ba7565b51936200a085865185511462001929620174fa565b6200a098865186511462001929620174fa565b60005b86518110156200a0f5576200a0b1818662005bed565b519061271082101562005bb55760036200a0ef926001600160a01b038b5116600052811b016020526200054f6040600020546200822b838a62005bed565b6200a09b565b50909493919460005b85518110156200a207576200a114818662005bed565b51906127108083101562005bb55760036001600160a01b0393848c5116600052811b016020526200a15060406000205462008299848962005bed565b906200a15d848a62005bed565b51918383101562005bb55760036200a18c93878f5116600052811b016020526040600020556200192962017621565b6200a198828862005bed565b518181101562005bb557600390846200a1b2858c62005bed565b5116600052811b016020526200a1d36040600020546200733c848962005bed565b6200a1df848a62005bed565b519283101562005bb55760036200054f936200a2019662008352878e62005bed565b6200a0fe565b50926200a21e9195969492506200838a906201723d565b926001600160a01b03604051916200a2368362003fa1565b600183526020368185013751166200a24e8262005ba7565b526000905b825182101562008731576200a269828462005bed565b51966200a277865162005d44565b936000956200a287845162005d44565b610600528698875b89518110156200a33957896200a2b38d6001600160a01b0362008426858562005bed565b15806200a2fb575b6200a2d3575b506200a2cd9062005b81565b6200a28f565b81996001600160a01b036200846d6200a2cd946200a2f19462005bed565b989050896200a2c1565b50506127108c101562005bb5576001600160a01b036200a31c828c62005bed565b511660005260038c811b016020528960406000205415156200a2bb565b509098969498979291939760005b89518110156200a3d7576127108c101562005bb5576001600160a01b036200a370828c62005bed565b511660005260038c811b0160205289604060002054156200a39e575b506200a3989062005b81565b6200a347565b81996001600160a01b036200a3bc6200a398946200a3cd9462005bed565b51166200200d826106005162005bed565b989050896200a38c565b50989593929650966127108a1015610140526127108a101562005bb55760048a60031b0154966200a40d62008597878a6201542e565b9860009a8b6103c0525b6101405162005bb5576103c0518a8110156200a4b8576200a4656001600160a01b038f926200a4539060006101405260048560031b0162005f0b565b90549060031b1c1661060051620170cc565b156200a485575b506200a47b6103c05162005b81565b6103c0526200a417565b9b8b6200200d826200a4b0949f620086406001600160a01b039160046103c0519160031b0162005f0b565b9a8c6200a46c565b509b9398509591969499909893996000915b8383106200a55957505050506101405162005bb5578151916001600160401b03831162003f1a5760206004916200a50785848660031b016200611d565b019160031b01600052602060002060005b8381106200a53b57505050506200a52f9062005b81565b9094919592956200a253565b60019060206001600160a01b0385511694019381840155016200a518565b620087236200a576916001600160a01b0362008715868662005bed565b916200a4ca565b8297949695975192818410156200409c5760169384036200a5ea57505050505060c060406200a5b0920151015162005ba7565b519260005b845181101562009e7157806200054f6001600160a01b036200a5dc6200a5e4948962005bed565b5116620071de565b6200a5b5565b8051828110156200409c576017036200a65357608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203233206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b8051828110156200409c576018036200a6c757505050505060c060406200a67e920151015162005ba7565b5162013892805460ff191660011790559260005b845181101562009e7157806200054f6001600160a01b036200a6b96200a6c1948962005bed565b51166200717b565b6200a692565b8097969751828110156200409c576019036200a85057505050505060008080604080940160a0808251015180516200a817575b505051906001600160a01b036200a71e6200733560c060e086015195015162005ba7565b511690602083519301915af1903d156200a80e573d916200a73f83620041b8565b926200a74e8351948562003fd9565b83523d6000602085013e5b156200a76e57505062007e8960209162005b81565b62005b7d92506200a7ef8151927f5468652063616c6c20746f2074686520636f6e7472616374206973206e6f742060208501527f7375636365737366756c2e2052657475726e20646174613a2000000000000000838501528381516200a7de816059946020868601910162004106565b810103603981018552018362003fd9565b5191829162461bcd60e51b83526020600484015260248301906200412b565b6060916200a759565b6200a8229062005ba7565b51516200a831575b806200a6fa565b81925062007335906200a8479251015162005ba7565b5190386200a82a565b8051828110156200409c57601a036200a95b57505050506200a87b60a0604080940151015162005ba7565b51906200a88c6003835114620153e2565b6200a8978262005ba7565b51926200a8b06200a8a88462005bcb565b519362005bdc565b51926200a9185750509162007e89916001602094146000146200a911576200a8f0906200a8e36201388d91825462007088565b9091556200192962017423565b6200054f6201388e6200a904815462007075565b909155620019296201745e565b5062005b81565b60649250519062461bcd60e51b82526020600483015260248201527f496e76616c6964207061796d656e7420747970650000000000000000000000006044820152fd5b80919293945051828110156200409c57601b036200ade4575050505050906200a99b6201388b54620070bf6200a9906201733b565b612710831062005b4e565b50506200a9a762017423565b506000805b61271081106200ad7f575b50506200a9c36200709a565b6200a9d26202712a5462005d44565b9060009384905b6127108210156200ad73578160031b9460ff600787015416156200ab28576000976002870154156200ab1657889798975b62005bb55760048701548810156200aafc576200aa2b886004890162005f0b565b90549060031b1c6001600160a01b0316988960005260038801602052604099868b60002054906200aa5c9162006fe1565b9b906200aa6862017423565b6200aa739162005b4e565b60009b60028b01546200aa869162006fe1565b91906200aa9262017423565b6200aa9d9162005b4e565b828d52620138876020528c20908154906200aab89162007088565b9091556200aac562017423565b6200aad09162005b4e565b6200aadc828962005bed565b526200aae89062005b81565b976200aaf49062005b81565b97986200aa0a565b929095506200ab0d91965062005b81565b9095946200a9d9565b929095506200ab0d9196975062005b81565b959392509350505b6200ab3b8262005d44565b91600091825b8281106200acde5750505062013888908154926200ab646200859785846201542e565b9360009081905b8082106200aca557505060005b8381106200ac1057505050508151916001600160401b03831162003f1a576020906200aba48462005f3d565b019060005260005b8281106200abd25750505062007e8960209160006201388d5560006201388e5562005b81565b60019060206001600160a01b03845116930192817ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df0155016200abac565b6000805b8381106200ac5d575b50156200ac36575b6200ac309062005b81565b6200ab78565b906200ac546200ac30916001600160a01b0362008715858762005bed565b9190506200ac25565b6001600160a01b03806200ac72858862005bed565b5116906200ac81838b62005bed565b5116146200ac9a576200ac949062005b81565b6200ac14565b50506001386200ac1d565b9091620087236200acd7916001600160a01b036200acc38662005d7c565b90549060031b1c166200200d828b62005bed565b906200ab6b565b6000805b8581106200ad2b575b50156200ad04575b6200acfe9062005b81565b6200ab41565b926200ad226200acfe916001600160a01b0362009a30878662005bed565b9390506200acf3565b6001600160a01b03806200ad40858762005bed565b5116906200ad4f838a62005bed565b5116146200ad68576200ad629062005b81565b6200ace2565b50506001386200aceb565b9394929150506200ab30565b8060031b9060ff600783015416156200addd576200adcb62007b336200054f946200adbf6200add79560026200adb58762006ee3565b9101549062006fe1565b92906200192962017423565b93906200192962017423565b6200a9ac565b506200a9b7565b8051828110156200409c57601c036200ae4d57608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203238206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b8051828110156200409c57601d036200ae73575b505050505062007e8960209162005b81565b8051828110156200409c57601e146200ae61578051828110156200409c57601f036200aec957505050506020916200aebf6200aeb8604062007e899401515162005ba7565b51620169b8565b913880806200ae61565b8051828110156200409c576020036200aeef575b505050505062007e896020916200aebf565b805190828210156200409c5760218092036200af0d575b506200aedd565b8051838110156200b55b576022036200af4e5750505050505062007e896020916201389260ff1981541690556200af43620060c4565b91388080806200af06565b8051838110156200b55b576023036200af75575b50505050505062007e896020916200af43565b8051838110156200b55b576024146200af62578051838110156200b55b576025146200af62579795949751918210156200b5475750036200b503575060408401906200afc660c08351015162005ba7565b51936200afdd60a062007c9f818651015162005ba7565b51936200aff2865185511462001929620174fa565b6200b005865186511462001929620174fa565b60005b86518110156200b062576200b01e818662005bed565b519061271082101562005bb55760036200b05c926001600160a01b038b5116600052811b016020526200054f6040600020546200822b838a62005bed565b6200b008565b50909493919460005b85518110156200b174576200b081818662005bed565b51906127108083101562005bb55760036001600160a01b0393848c5116600052811b016020526200b0bd60406000205462008299848962005bed565b906200b0ca848a62005bed565b51918383101562005bb55760036200b0f993878f5116600052811b016020526040600020556200192962017621565b6200b105828862005bed565b518181101562005bb557600390846200b11f858c62005bed565b5116600052811b016020526200b1406040600020546200733c848962005bed565b6200b14c848a62005bed565b519283101562005bb55760036200054f936200b16e9662008352878e62005bed565b6200b06b565b50926200b18b9195969492506200838a906201723d565b926001600160a01b03604051916200b1a38362003fa1565b600183526020368185013751166200b1bb8262005ba7565b526000905b82518210156200b4ea576200b1d6828462005bed565b51966200b1e4865162005d44565b936000956200b1f4845162005d44565b610420528698875b89518110156200b2a657896200b2208d6001600160a01b0362008426858562005bed565b15806200b268575b6200b240575b506200b23a9062005b81565b6200b1fc565b81996001600160a01b036200846d6200b23a946200b25e9462005bed565b989050896200b22e565b50506127108c101562005bb5576001600160a01b036200b289828c62005bed565b511660005260038c811b016020528960406000205415156200b228565b509098969498979291939760005b89518110156200b344576127108c101562005bb5576001600160a01b036200b2dd828c62005bed565b511660005260038c811b0160205289604060002054156200b30b575b506200b3059062005b81565b6200b2b4565b81996001600160a01b036200b3296200b305946200b33a9462005bed565b51166200200d826104205162005bed565b989050896200b2f9565b50989593929650966127108a1015610120526127108a101562005bb55760048a60031b0154966200b37a62008597878a6201542e565b9860009a8b610200525b6101205162005bb557610200518a8110156200b425576200b3d26001600160a01b038f926200b3c09060006101205260048560031b0162005f0b565b90549060031b1c1661042051620170cc565b156200b3f2575b506200b3e86102005162005b81565b610200526200b384565b9b8b6200200d826200b41d949f620086406001600160a01b03916004610200519160031b0162005f0b565b9a8c6200b3d9565b509b9398509591969499909893996000915b8383106200b4c657505050506101205162005bb5578151916001600160401b03831162003f1a5760206004916200b47485848660031b016200611d565b019160031b01600052602060002060005b8381106200b4a857505050506200b49c9062005b81565b9094919592956200b1c0565b60019060206001600160a01b0385511694019381840155016200b485565b620087236200b4e3916001600160a01b0362008715868662005bed565b916200b437565b50505091926020915062007e899091388080806200af62565b6064906040519062461bcd60e51b82526020600483015260248201527f496e76616c6964206f7065726174696f6e2074797065000000000000000000006044820152fd5b634e487b7160e01b60005260045260246000fd5b82634e487b7160e01b60005260045260246000fd5b606460405162461bcd60e51b815260206004820152601b60248201527f4f7065726174696f6e207479706520697320756e646566696e656400000000006044820152fd5b50915050565b600281036200b61b5760405162461bcd60e51b815260206004820152602a60248201527f5468652070726f6772616d2069732064656e6965642062792074686520706c7560448201526967696e2073797374656d60b01b6064820152608490fd5b6001146200b6265750565b906200b6366201388354620063b7565b805190600160401b821162003f1a57620271165482620271165580831062013df1575b50602001620271166000527f2a7aa4e7f2fefac7a07702701afb9c202f6f79fb2762c8e42b37a264307667fa6000915b83831062013dd0575050505060005b62013883548110156200b6d257806200054f6200b6b96200b6cc9362006cc0565b506200b6c58362006cfe565b9062014356565b6200b698565b506200b6e26201388254620063b7565b805190600160401b821162003f1a57620271155482620271155580831062013d33575b50602001620271156000527f0f9b10e190177c3c56fc6ce7689c8130c567df57aa02c08e7a090a59992adf926000915b83831062013d12575050505060005b62013882548110156200b77757806200054f6200b7656200b7719362006d3c565b506200b6c58362006d7a565b6200b744565b5060005b612710811015806200b94257600160ff6201389a8460031b0154161515146200b7b1575b506200b7ab9062005b81565b6200b77b565b916000835b62005bb557620138978360031b01548110156200b822576200b819929350600092816001600160a01b036200b7f58694620138978960031b0162005f0b565b90549060031b1c16600052620138968660031b016020526000604081205562005b81565b9093926200b7b6565b5091604051906200b8338262003fbd565b6000825262005bb5578051906001600160401b03821162003f1a576020906200b86583620138978660031b016200611d565b01620138978360031b01600052602060002060005b8381106200b9245750505050600381901b6201389a8101805460ff191690556000620138938201819055620138948201819055620138958201556201389801546200b7ab91906200b8cb9062005221565b601f908181116200b8f8575b50506000620138988260031b01556000620138998260031b0155906200b79f565b6200b91c91620138988460031b016000526020600020910160051c81019062005f24565b38806200b8d7565b60019060206001600160a01b0385511694019381840155016200b87a565b505060005b612710811062013c7d575060005b62013881548110156200b9b357806001600160a01b036200b97a6200b9ad9362005dee565b90549060031b1c166000526202711360205260006002604082208281556200b9a56001820162006448565b015562005b81565b6200b955565b506200b9c3620138815462005d44565b8051906001600160401b03821162003f1a57600160401b821162003f1a57602090620271145483620271145580841062013c44575b50016202711460005260005b82811062013c065750505060005b62013881548110156200ba93576001600160a01b036200ba328262005dee565b90549060031b1c1690620271145481101562005bb5576200ba8d9162027114600052817f8e71c125ecfe4aeed61c8cf4b09183dd0bf2a3230d826486f04e5f6f0de58e2c01906001600160a01b031982541617905562005b81565b6200ba12565b509060005b62013881548110156200bb7357806200bab56200bb0b9262005dee565b906001600160a01b03918291549060031b1c1660005262013880602052604080600020916200bae48462005dee565b90549060031b1c1660005262027113602052600020908082036200bb11575b505062005b81565b6200ba98565b600280916200bb5460ff6200bb3581845416879060ff801983541691151516179055565b825460081c16859061ff00825491151560081b169061ff001916179055565b6200bb66600182016001860162013fec565b015491015538806200bb03565b5060005b6202711d548110156200bbc857806001600160a01b036200bb9c6200bbc29362005e27565b90549060031b1c166000526202711c6020526200054f6040600020606481019062005f24565b6200bb77565b506200bbd86201388a5462005d44565b8051906001600160401b03821162003f1a57600160401b821162003f1a576020906202711d54836202711d5580841062013bcd575b50016202711d60005260005b82811062013b8f5750505060005b6201388a548110156200bc6957806200054f6001600160a01b036200bc506200bc639462005e60565b90549060031b1c1662001f308362005e27565b6200bc27565b5060005b6201388a548110156200bcf857806200bc8a6200bcdf9262005e60565b906001600160a01b03918291549060031b1c1660005262013889602052604080600020916200bcb98462005e60565b90549060031b1c166000526202711c602052600020908082036200bce557505062005b81565b6200bc6d565b6200bcf09162014411565b38806200bb03565b506201388b546202711e556201388c546202711f556201388d5462027120556201388e5462027121556201388f546001600160401b03811162003f1a57600160401b811162003f1a57620271225481620271225580821062013b56575b507f846ab89c81ea9339188216a1864da1a19ebe28d411cbec99efa70ca6d389710d8054906000915b83831062013b1657505050506201389054600160401b811162003f1a57620271235481620271235580821062013ac2575b507f7f73709277f72a9bc7b284375e83603a53394744e9fa86da811e86c2aa78e05e620271236000527f4ad859a97f543436e70c22b09d31fb4c7b9e987d7a008c98817c9b50a97b12246000915b83831062013aa4575050505062013891546001600160401b03811162003f1a57600160401b811162003f1a57620271245481620271245580821062013a6b575b506202712460009081527f8f332db73d3937798ea82422156d059730b0b3058606439b57b7ae623e94536680545b83831062013a2b575050505060ff620138925416151560ff8019620271255416911617620271255560005b62027119548110156200bee057806001600160a01b036200bebb6200beda9362005e99565b90549060031b1c16600052620271186020526000604081205562005b81565b6200be96565b506200bef0620138865462005d44565b8051906001600160401b03821162003f1a576020906200bf108362006014565b016202711960005260005b828110620139ed5750505060005b62013886548110156200bf6b57806200054f6001600160a01b036200bf526200bf659462005db5565b90549060031b1c1662001f308362005e99565b6200bf29565b5060005b62013886548110156200bfde57806200bf8c6200bfd89262005db5565b906001600160a01b03918291549060031b1c166000526201388560205260408060002054916200bfbc8462005db5565b90549060031b1c16600052620271186020526000205562005b81565b6200bf6f565b5060005b6202711b548110156200c02c57806001600160a01b036200c0076200c0269362005ed2565b90549060031b1c166000526202711a6020526000604081205562005b81565b6200bfe2565b506200c03c620138885462005d44565b8051906001600160401b03821162003f1a576020906200c05c836200606c565b016202711b60005260005b828110620139af5750505060005b62013888548110156200c0b757806200054f6001600160a01b036200c09e6200c0b19462005d7c565b90549060031b1c1662001f308362005ed2565b6200c075565b5060005b62013888548110156200c12a57806200c0d86200c1249262005d7c565b906001600160a01b03918291549060031b1c166000526201388760205260408060002054916200c1088462005d7c565b90549060031b1c166000526202711a6020526000205562005b81565b6200c0bb565b50906000905b6020830151805183101562010f5357826200c14b9162005bed565b51602081015160268110156200409c57156200b57057602081015160268110156200409c576001036200c72f57604001906200c18c60c08351015162005ba7565b51936200c1a360a062007c9f818651015162005ba7565b51916200c1b48651855114620160fd565b6200c1c386518451146201616f565b60005b86518110156200c324576200c1dc818662005bed565b5161271081101562005bb557600160ff6201389a6200c2049360031b015416151514620161e1565b6200c210818562005bed565b516200c21d828762005bed565b519061271082101562005bb557620138996200c23f9260031b01549062007088565b906200c24c838862005bed565b519161271083101562005bb557620138996200c26d9360031b015562016238565b6200c279818562005bed565b516200c286828762005bed565b519061271082101562005bb557620138966200c2c9926001600160a01b036200c2b0868d62005bed565b511660005260031b016020526040600020549062007088565b91906200c2d7828862005bed565b519061271082101562005bb5576200c31e93620138966200054f936001600160a01b036200c306878f62005bed565b511660005260031b01602052604060002055620162aa565b6200c1c6565b50926200c33b9192506200899b909594956201723d565b916040516200c34a8162003fbd565b6000815260003681376000945b80518610156200c715576200c36d868262005bed565b51610380526200c37e855162005d44565b966000946200c38e845162005d44565b6103005260009460005b88518110156200c46b578a896200c3c86001600160a01b036200c3bc858462005bed565b51166103805162017072565b15806200c422575b6200c3e9575b50506200c3e39062005b81565b6200c398565b986200c417916200200d826001600160a01b036200c40e879e976200c3e39862005bed565b51169262005bed565b9790508a896200c3d6565b50505061271061038051101562005bb5576001600160a01b036200c447828b62005bed565b5116600052620138966103805160031b016020528a8960406000205415156200c3d0565b50909895979498969291939660005b88518110156200c50a5761271061038051101562005bb5576001600160a01b03806200c4a7838c62005bed565b5116600052620138966103805160031b01602052604060002054156200c4da575b506200c4d49062005b81565b6200c47a565b819b6200c502916200c4f16200c4d4948d62005bed565b51166200200d826103005162005bed565b9a906200c4c8565b5098509695929190939661038051612710811015806102a05262005bb55760031b620138970154986200c54262008597898c6201542e565b6104a0526000610480526000610260525b6102a05162005bb557610260518a8110156200c61c576200c58a6200c5a89160006102a052620138976103805160031b0162005f0b565b91906001600160a01b03928391549060031b1c1661030051620170cc565b156200c5c8575b506200c5be6102605162005b81565b610260526200c553565b60006102a0526200c5e861026051620138976103805160031b0162005f0b565b90549060031b1c166200c602610480516104a05162005bed565b526200c6116104805162005b81565b61048052386200c5af565b50979294959093985095909560005b8281106200c6c9575050506102a05162005bb5576104a051516001600160401b03811162003f1a576200c66a81620138976103805160031b016200611d565b60206104a05101620138976103805160031b01600052602060002060005b8381106200c6ab57505050506200c69f9062005b81565b9492959091956200c357565b60019060206001600160a01b0385511694019381840155016200c688565b806001600160a01b036200c6e26200c70f938562005bed565b51166200c6f6610480516104a05162005bed565b526200c7056104805162005b81565b6104805262005b81565b6200c62b565b5050939092506200c727915062005b81565b90916200c130565b90602082949394015160268110156200409c576002036200c8ec576040809201908151938451916200c7866200c76a60a08098015162005ba7565b51966200c77b818751015162005bcb565b519551015162005bdc565b51948351875103620080fd578351855103620080945783518651036200802b575060005b86518110156200c8d9576200c7c0818862005bed565b5161271081101562005bb55760ff6201389a6200c7e49260031b015416156201631b565b6200c7f0818862005bed565b5161271081101562005bb55760031b6201389a01805460ff191660011790556200c81b818562005bed565b516200c828828962005bed565b519061271082101562005bb557620138986200c8489260031b01620067d9565b6200c854818662005bed565b516200c861828962005bed565b5161271081101562005bb55760031b6201389401556200c882818762005bed565b516200c88f828962005bed565b5161271081101562005bb55760031b6201389501556200c8b0818862005bed565b519061271082101562005bb5576000620138996200c8d39360031b015562005b81565b6200c7aa565b509592509350506200c727915062005b81565b909291602084015160268110156200409c576003036200ced45760408401906200c91b60c08351015162005ba7565b51906200c93260a062007c9f818651015162005ba7565b51936200c947835185511462001929620174fa565b6200c95a835186511462001929620174fa565b60005b83518110156200c9ba576200c973818662005bed565b519061271082101562005bb557620138966200c9b4926001600160a01b038b511660005260031b016020526200054f6040600020546200822b838a62005bed565b6200c95d565b509095919560005b87518110156200cb0f576200c9d8818662005bed565b5161271081101562005bb55762013896906001600160a01b0386511660005260031b016020526200ca1460406000205462008299838962005bed565b906200ca21838862005bed565b519161271083101562005bb557620138966200ca5c936001600160a01b0389511660005260031b016020526040600020556200192962017621565b6200ca68818662005bed565b5161271081101562005bb55762013896906001600160a01b036200ca8d848c62005bed565b511660005260031b016020526200caaf6040600020546200733c838962005bed565b91906200cabd828862005bed565b519061271082101562005bb5576200cb0993620138966200054f936001600160a01b036200caed8f889062005bed565b511660005260031b016020526040600020556200192962017697565b6200c9c2565b509194935091620089a26200cb24916201723d565b926001600160a01b03604051956200cb3c8762003fa1565b600187526020368189013751166200cb548662005ba7565b526000905b86518210156200cec2576200cb6f828862005bed565b516105a0526200cb80855162005d44565b966000946200cb90885162005d44565b6104e05260009460005b88518110156200cc64578a896200cbca6001600160a01b036200cbbe858462005bed565b51166105a05162017072565b15806200cc1b575b6200cbeb575b50506200cbe59062005b81565b6200cb9a565b986200cc10916200200d826001600160a01b036200c40e879e976200cbe59862005bed565b9790508a896200cbd8565b5050506127106105a051101562005bb5576001600160a01b036200cc40828b62005bed565b5116600052620138966105a05160031b016020528a8960406000205415156200cbd2565b509098949897969291939760005b88518110156200cd08576127106105a051101562005bb5576001600160a01b036200cc9e828b62005bed565b5116600052620138966105a05160031b01602052604060002054156200ccd0575b6200ccca9062005b81565b6200cc72565b996200ccff6200ccca916001600160a01b036200ccee8e8d62005bed565b51166200200d826104e05162005bed565b9a90506200ccbf565b5098509694939291956105a051612710811015806104605262005bb55760031b620138970154966200cd3f62008597878a6201542e565b996000996000610280525b6104605162005bb557610280518a8110156200cdf5576001600160a01b036200cd896200cd9b92600061046052620138976105a05160031b0162005f0b565b90549060031b1c166104e051620170cc565b156200cdba575b6200cdb06102805162005b81565b610280526200cd4a565b996200cdee906000610460528c6200200d826001600160a01b036200864061028051620138976105a05160031b0162005f0b565b996200cda2565b509a939794969299919850946000915b8383106200ce9e57505050506104605162005bb5578051906001600160401b03821162003f1a576020906200ce4683620138976105a05160031b016200611d565b01620138976105a05160031b01600052602060002060005b8381106200ce8057505050506200ce759062005b81565b90929591956200cb59565b60019060206001600160a01b0385511694019381840155016200ce5e565b620087236200cebb916001600160a01b0362009a30868662005bed565b916200ce05565b9295505092506200c727915062005b81565b9092602081015160268110156200409c576004036200d504576040016200cf0060c08251015162005ba7565b51936200cf1260c08351015162005bcb565b51906200cf2960a062007c9f818651015162005ba7565b51936200cf3e875184511462001929620174fa565b6200cf51875185511462001929620174fa565b6200cf64875186511462001929620174fa565b60005b87518110156200cfcf576200cf7d818662005bed565b519061271082101562005bb557620138966200cfc9926001600160a01b036200cfa7848d62005bed565b511660005260031b016020526200054f6040600020546200822b838a62005bed565b6200cf67565b509095919593929360005b83518110156200d134576200cff0818762005bed565b5161271081101562005bb55762013896906001600160a01b036200d015848862005bed565b511660005260031b016020526200d03760406000205462008299838862005bed565b906200d044838962005bed565b519161271083101562005bb557620138966200d08a936001600160a01b036200d06e878b62005bed565b511660005260031b016020526040600020556200192962017621565b6200d096818762005bed565b5161271081101562005bb55762013896906001600160a01b036200d0bb848c62005bed565b511660005260031b016020526200d0dd6040600020546200733c838862005bed565b9190506200d0ec818862005bed565b519161271083101562005bb557620138966200d12e936001600160a01b036200d116858e62005bed565b511660005260031b0160205260406000205562005b81565b6200cfda565b5091936200d150919350620089a26200899b919796976201723d565b6000945b80518610156200c715576200d16a868262005bed565b51610340526200d17b855162005d44565b966000946200d18b845162005d44565b6101a05260009460005b88518110156200d25f578a896200d1c56001600160a01b036200d1b9858462005bed565b51166103405162017072565b15806200d216575b6200d1e6575b50506200d1e09062005b81565b6200d195565b986200d20b916200200d826001600160a01b036200c40e879e976200d1e09862005bed565b9790508a896200d1d3565b50505061271061034051101562005bb5576001600160a01b036200d23b828b62005bed565b5116600052620138966103405160031b016020528a8960406000205415156200d1cd565b50909895979498969291939660005b88518110156200d2fe5761271061034051101562005bb5576001600160a01b03806200d29b838c62005bed565b5116600052620138966103405160031b01602052604060002054156200d2ce575b506200d2c89062005b81565b6200d26e565b819b6200d2f6916200d2e56200d2c8948d62005bed565b51166200200d826101a05162005bed565b9a906200d2bc565b5098509695929190939661034051612710811015806102c05262005bb55760031b620138970154986200d33662008597898c6201542e565b6105005260006103e052600060c0525b6102c05162005bb55760c0518a8110156200d40b576200d37c6200d39a9160006102c052620138976103405160031b0162005f0b565b91906001600160a01b03928391549060031b1c166101a051620170cc565b156200d3b8575b506200d3af60c05162005b81565b60c0526200d346565b60006102c0526200d3d760c051620138976103405160031b0162005f0b565b90549060031b1c166200d3f16103e0516105005162005bed565b526200d4006103e05162005b81565b6103e052386200d3a1565b50979294959093985095909560005b8281106200d4b8575050506102c05162005bb55761050051516001600160401b03811162003f1a576200d45981620138976103405160031b016200611d565b60206105005101620138976103405160031b01600052602060002060005b8381106200d49a57505050506200d48e9062005b81565b9492959091956200d154565b60019060206001600160a01b0385511694019381840155016200d477565b806001600160a01b036200d4d16200d4fe938562005bed565b51166200d4e56103e0516105005162005bed565b526200d4f46103e05162005b81565b6103e05262005b81565b6200d41a565b9290602084015160268110156200409c576005036200da7f5760408401906200d53760a062008a0b818551015162005ba7565b519282518451036200da155760005b83518110156200d5a3576200d55c818562005bed565b519061271082101562005bb557620138966200d59d926001600160a01b038a511660005260031b016020526200054f6040600020546200822b838962005bed565b6200d546565b509060005b83518110156200d64e576200d5be818562005bed565b5161271081101562005bb55762013896906001600160a01b0389511660005260031b016020526200d5fa60406000205462008299838862005bed565b91906200d608828762005bed565b519061271082101562005bb5576200d64893620138966200054f936001600160a01b038d511660005260031b016020526040600020556200192962017621565b6200d5a8565b5094939250906200d65f906201723d565b936001600160a01b03604051946200d6778662003fa1565b600186526020368188013751166200d68f8562005ba7565b52604051926200d69f8462003fbd565b6000845260003681376000905b86518210156200cec2576200d6c2828862005bed565b516102e0526200d6d3855162005d44565b966000946200d6e3885162005d44565b6101e05260009460005b88518110156200d7b7578a896200d71d6001600160a01b036200d711858462005bed565b51166102e05162017072565b15806200d76e575b6200d73e575b50506200d7389062005b81565b6200d6ed565b986200d763916200200d826001600160a01b036200c40e879e976200d7389862005bed565b9790508a896200d72b565b5050506127106102e051101562005bb5576001600160a01b036200d793828b62005bed565b5116600052620138966102e05160031b016020528a8960406000205415156200d725565b509098949897969291939760005b88518110156200d85b576127106102e051101562005bb5576001600160a01b036200d7f1828b62005bed565b5116600052620138966102e05160031b01602052604060002054156200d823575b6200d81d9062005b81565b6200d7c5565b996200d8526200d81d916001600160a01b036200d8418e8d62005bed565b51166200200d826101e05162005bed565b9a90506200d812565b5098509694939291956102e051612710811015806104405262005bb55760031b620138970154966200d89262008597878a6201542e565b9960009960006106a0525b6104405162005bb5576106a0518a8110156200d948576001600160a01b036200d8dc6200d8ee92600061044052620138976102e05160031b0162005f0b565b90549060031b1c166101e051620170cc565b156200d90d575b6200d9036106a05162005b81565b6106a0526200d89d565b996200d941906000610440528c6200200d826001600160a01b03620086406106a051620138976102e05160031b0162005f0b565b996200d8f5565b509a939794969299919850946000915b8383106200d9f157505050506104405162005bb5578051906001600160401b03821162003f1a576020906200d99983620138976102e05160031b016200611d565b01620138976102e05160031b01600052602060002060005b8381106200d9d357505050506200d9c89062005b81565b90929591956200d6ac565b60019060206001600160a01b0385511694019381840155016200d9b1565b620087236200da0e916001600160a01b0362009a30868662005bed565b916200d958565b608460405162461bcd60e51b815260206004820152603560248201527f546865206c656e677468206f6620746f6b656e436c61737320616e6420746f6b60448201527f656e416d6f756e74206973206e6f7420657175616c00000000000000000000006064820152fd5b92602081015160268110156200409c576006036200e09d576040016200daaa60c08251015162005ba7565b51936200dac160a062008a0b818551015162005ba7565b519285518351036200e0335785518451036200dfc95760005b86518110156200db42576200daf0818562005bed565b519061271082101562005bb557620138966200db3c926001600160a01b036200db1a848c62005bed565b511660005260031b016020526200054f6040600020546200822b838962005bed565b6200dada565b509060005b86518110156200dbe7576200db5d818562005bed565b5161271081101562005bb55762013896906001600160a01b036200db82848b62005bed565b511660005260031b016020526200dba460406000205462008299838862005bed565b91906200dbb2828762005bed565b519061271082101562005bb5576200dbe193620138966200054f936001600160a01b036200d06e878f62005bed565b6200db47565b50916200dbfe9193506200899b909594956201723d565b91604051926200dc0e8462003fbd565b6000845260003681376000945b80518610156200c715576200dc31868262005bed565b51610320526200dc42855162005d44565b966000946200dc52845162005d44565b6106c05260009460005b88518110156200dd26578a896200dc8c6001600160a01b036200dc80858462005bed565b51166103205162017072565b15806200dcdd575b6200dcad575b50506200dca79062005b81565b6200dc5c565b986200dcd2916200200d826001600160a01b036200c40e879e976200dca79862005bed565b9790508a896200dc9a565b50505061271061032051101562005bb5576001600160a01b036200dd02828b62005bed565b5116600052620138966103205160031b016020528a8960406000205415156200dc94565b50909895979498969291939660005b88518110156200ddc55761271061032051101562005bb5576001600160a01b03806200dd62838c62005bed565b5116600052620138966103205160031b01602052604060002054156200dd95575b506200dd8f9062005b81565b6200dd35565b819b6200ddbd916200ddac6200dd8f948d62005bed565b51166200200d826106c05162005bed565b9a906200dd83565b5098509695929190939661032051612710811015806107205262005bb55760031b620138970154986200ddfd62008597898c6201542e565b61064052600060e05260006103a0525b6107205162005bb5576103a0518a8110156200ded3576200de446200de6291600061072052620138976103205160031b0162005f0b565b91906001600160a01b03928391549060031b1c166106c051620170cc565b156200de82575b506200de786103a05162005b81565b6103a0526200de0d565b6000610720526200dea26103a051620138976103205160031b0162005f0b565b90549060031b1c166200debb60e0516106405162005bed565b526200dec960e05162005b81565b60e052386200de69565b50979294959093985095909560005b8281106200df80575050506107205162005bb55761064051516001600160401b03811162003f1a576200df2181620138976103205160031b016200611d565b60206106405101620138976103205160031b01600052602060002060005b8381106200df6257505050506200df569062005b81565b9492959091956200dc1b565b60019060206001600160a01b0385511694019381840155016200df3f565b806001600160a01b036200df996200dfc3938562005bed565b51166200dfac60e0516106405162005bed565b526200dfba60e05162005b81565b60e05262005b81565b6200dee2565b608460405162461bcd60e51b815260206004820152603060248201527f546865206c656e677468206f662061646472657373657320616e6420616d6f7560448201527f6e7473206973206e6f7420657175616c000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b815260206004820152603560248201527f546865206c656e677468206f662061646472657373657320616e6420746f6b6560448201527f6e436c6173736573206973206e6f7420657175616c00000000000000000000006064820152fd5b60208194929394015160268110156200409c576007036200e25457604001916200e0cc60c08451015162005ba7565b51916200e0de60a08551015162005ba7565b51935151916200e0f6845186511462001929620174fa565b60005b84518110156200e242576001600160a01b03806200e118838862005bed565b511660005262027113806020526200e13d60ff604060002054161562001929620175e6565b60026200e14b848862005bed565b516200e1c06200e15c868c62005bed565b519162008fdf8b604051966200e1728862003efe565b60018852886200e1998b60208b01946000865260408c0197885260608c01998a5262005bed565b511660005260205262008fc8604060002097511515889060ff801983541691151516179055565b519101556200e1d0828762005bed565b511690620271145491600160401b83101562003f1a576001830180620271145583101562005bb5576200e23c92620271146000527f8e71c125ecfe4aeed61c8cf4b09183dd0bf2a3230d826486f04e5f6f0de58e2c01906001600160a01b031982541617905562005b81565b6200e0f9565b5094915092506200c727915062005b81565b602081015160268110156200409c576008036200e3435760c060406200e27e920151015162005ba7565b519160005b83518110156200e334576200e32e906001600160a01b03806200e2a7838862005bed565b51166000526202711390816020526200e2d1600160ff604060002054161515146200192962017535565b806200e2de848962005bed565b5116600052816020526200e30260ff60406000205460081c161562001929620175ab565b6200e30e838862005bed565b5116600052602052604060002061010061ff001982541617905562005b81565b6200e283565b50926200c72791925062005b81565b602081015160268110156200409c576009036200e4235760c060406200e36d920151015162005ba7565b519160005b83518110156200e334576200e41d906001600160a01b03806200e396838862005bed565b51166000526202711390816020526200e3c0600160ff604060002054161515146200192962017535565b806200e3cd848962005bed565b5116600052816020526200e3f5600160ff60406000205460081c161515146200192962017570565b6200e401838862005bed565b5116600052602052604060002061ff0019815416905562005b81565b6200e372565b602081015160268110156200409c57600a036200e50c57604001906200e45f60a06200e45460c08551015162005ba7565b519351015162005ba7565b51926200e474835185511462001929620174fa565b60005b83518110156200e4fb576200e4f5906001600160a01b03806200e49b838862005bed565b511660005262027113806020526200e4c4600160ff604060002054161515146200192962017535565b6200e4d0838962005bed565b51916200e4de848962005bed565b511660005260205260026040600020015562005b81565b6200e477565b50939092506200c727915062005b81565b60208194939294015160268110156200409c57600b036200e5ed57604001926200e53b60c08551015162005ba7565b51935151916200e553855184511462001929620174fa565b60005b85518110156200e5dd576200e5d7906200054f6001600160a01b03806200e57e848b62005bed565b511660005262027113806020526200e5a7600160ff604060002054161515146200192962017535565b6200e5b3848962005bed565b51916200e5c1858c62005bed565b51166000526020526001604060002001620067d9565b6200e556565b509350916200c727915062005b81565b909192602082015160268110156200409c57600c036200e73c57606060408301510151926200e61c84620154d5565b60005b84518110156200e4fb5760e06200e63f8260606040880151015162005bed565b510151156200e6c5576200e6676200e6608260606040880151015162005bed565b5162006e4d565b62027115548060001981011162005b91576200e6896005916000190162006d7a565b5001805461ff0019166101001790556202711554906000198201821062005b91576005620094486200e6bf936000190162006d7a565b6200e61f565b6200e6e46200e6dd8260606040880151015162005bed565b5162006e29565b62027116548060001981011162005b91576200e7066005916000190162006cfe565b5001805461ff0019166101001790556202711654906000198201821062005b91576005620094486200e6bf936000190162006cfe565b929190602081015160268110156200409c57600d036200e885576040019260206200e76c60a08651015162005ba7565b5194510151916200e781855184511462015dd4565b60005b85518110156200e5dd57806200e79f6200e819928662005bed565b51156200e81f576200e7c36200e7b6828962005bed565b5162027115541162015e6c565b6200e7ef60ff60056200e7e26200e7db858c62005bed565b5162006d7a565b50015460081c1662015ec3565b6200e80760ff6005620095a66200e7db858c62005bed565b6005620095c26200e7db838a62005bed565b6200e784565b6200e83c6200e82f828962005bed565b5162027116541162015e6c565b6200e85b60ff60056200e7e26200e854858c62005bed565b5162006cfe565b6200e87360ff6005620095a66200e854858c62005bed565b6005620095c26200e854838a62005bed565b602081015160268110156200409c57600e036200e9bd576040019260206200e8b260a08651015162005ba7565b5194510151916200e8c7855184511462015dd4565b60005b85518110156200e5dd57806200e8e56200e958928662005bed565b51156200e95e576200e9096200e8fc828962005bed565b5162027115541162015fa7565b6200e92e60ff60056200e9216200e7db858c62005bed565b50015460081c1662016019565b6200e94660ff6005620097006200e7db858c62005bed565b6005620094486200e7db838a62005bed565b6200e8ca565b6200e97b6200e96e828962005bed565b5162027116541162015fa7565b6200e99360ff60056200e9216200e854858c62005bed565b6200e9ab60ff6005620097006200e854858c62005bed565b6005620094486200e854838a62005bed565b909192602082015160268110156200409c57600f036200eafe57606060408301510151926200e9ec84620154d5565b60005b84518110156200e4fb5760e06200ea0f8260606040880151015162005bed565b510151156200ea8e576200ea306200e6608260606040880151015162005bed565b62027115548060001981011162005b91576200ea526005916000190162006d7a565b5001805461ff0019166101001790556202711554906000198201821062005b91576005620095c26200ea88936000190162006d7a565b6200e9ef565b6200eaa66200e6dd8260606040880151015162005bed565b62027116548060001981011162005b91576200eac86005916000190162006cfe565b5001805461ff0019166101001790556202711654906000198201821062005b91576005620095c26200ea88936000190162006cfe565b929190602081015160268110156200409c576010036200ec475760400151926200eb3160a0608086015195015162005ba7565b51916200eb46855184511462001929620174fa565b60005b85518110156200e5dd57806200eb646200ebda928862005bed565b516200eb708162004eaa565b6200eb7c828762005bed565b51906200eb898162004eaa565b6200eba06200eb976201765c565b82151562005b4e565b6200ebab8162004eaa565b600181036200ebe057506200ebcf6200ebc36201765c565b61271083111562005b4e565b6202711e5562005b81565b6200eb49565b6200ebeb8162004eaa565b600281036200ec0057506202711f5562005b81565b6200ec0b8162004eaa565b600381036200ec205750620271205562005b81565b806200ec2e60049262004eaa565b146200ec3b575062005b81565b6202712155386200a911565b602081015160268110156200409c576011036200ef0457604001906200ec7860a06200e45460c08551015162005ba7565b51936200ec898351865114620153e2565b60005b83518110156200ed0a576200ed04906200ece46001600160a01b03806200ecb4848962005bed565b51166000526202711890816020526200ecd86040600020546200733c868d62005bed565b93906200192962017499565b6200ecf0848962005bed565b511660005260205260406000205562005b81565b6200ec8c565b509350906200ed199062017121565b906202711954936200ed31620085978451876201542e565b9060009260005b8781106200eec6575060005b85518110156200edf8576000805b8981106200eda9575b50156200ed74575b6200ed6e9062005b81565b6200ed44565b936200eda06200ed6e916001600160a01b036200ed92888a62005bed565b51166200200d828862005bed565b9490506200ed63565b6200edb48162005e99565b906001600160a01b03918291549060031b1c16906200edd4858b62005bed565b5116146200eded576200ede79062005b81565b6200ed52565b50506001386200ed5b565b5095509392506200ee098262005d44565b8051906001600160401b03821162003f1a576020906200ee298362006014565b016202711960005260005b8281106200ee885750505060005b8281106200ee58575050506200c7279062005b81565b806200054f6001600160a01b036200ee756200ee82948662005bed565b511662001f308362005e99565b6200ee42565b60019060206001600160a01b03845116930192817fe43a1016fd4ea9a9b882244b4d001d1f2d6b7fe146dc2643bb2c59db4a7bb0e10155016200ee34565b936200eef76200eefe916001600160a01b036200eee38862005e99565b90549060031b1c166200200d828862005bed565b9462005b81565b6200ed38565b602081949294015160268110156200409c576012036200f16f57604001906200ef3860a06200e45460c08551015162005ba7565b51936200ef498351865114620153e2565b60005b83518110156200ef9e576200ef98906200ece46001600160a01b03806200ef74848962005bed565b51166000526202711890816020526200ecd860406000205462008299868d62005bed565b6200ef4c565b50935091906200efae9062017121565b62027119546200efbe8162005d44565b906000926000915b8083106200f08c575050506200efdc8262005d44565b8051906001600160401b03821162003f1a576020906200effc8362006014565b016202711960005260005b8281106200f04e5750505060005b8281106200f02b575050506200c7279062005b81565b806200054f6001600160a01b036200ee756200f048948662005bed565b6200f015565b60019060206001600160a01b03845116930192817fe43a1016fd4ea9a9b882244b4d001d1f2d6b7fe146dc2643bb2c59db4a7bb0e10155016200f007565b91956000959193959760005b85518110156200f160576200f0ad8962005e99565b906001600160a01b03918291549060031b1c16906200f0cd838962005bed565b5116146200f0e6576200f0e09062005b81565b6200f098565b509750956001959391955b806200f12d575b156200f110576200f1099062005b81565b916200efc6565b936200eef76200f109916001600160a01b036200eee38862005e99565b506001600160a01b036200f1418262005e99565b90549060031b1c1660005262027118602052604060002054156200f0f8565b5097969096959391956200f0f1565b602081949394015160268110156200409c576013036200f2135760408091015101519160005b83518110156200e334576200f1ab818562005bed565b51906202711754600160401b81101562003f1a576001810180620271175581101562005bb5576200f20d9260076200054f9262027117600052027f08f37177f6a5732df494aeff73d589b534878a053b84dfe1e41c467868b7c9fd01620168c1565b6200f195565b60208194939294015160268110156200409c576014036200f75857604001906200f24260c08351015162005ba7565b51936200f25960a062007c9f818651015162005ba7565b51916200f26a8651855114620160fd565b6200f27986518451146201616f565b60005b86518110156200f375576200f292818562005bed565b516200f29f828762005bed565b519061271082101562005bb557620138996200f2c19260031b01549062007088565b906200f2ce838862005bed565b519161271083101562005bb557620138996200f2ef9360031b015562016238565b6200f2fb818562005bed565b516200f308828762005bed565b519061271082101562005bb557620138966200f332926001600160a01b036200c2b0868d62005bed565b91906200f340828862005bed565b519061271082101562005bb5576200f36f93620138966200054f936001600160a01b036200c306878f62005bed565b6200f27c565b50926200f38c9192506200899b909594956201723d565b916040516200f39b8162003fbd565b6000815260003681376000945b80518610156200c715576200f3be868262005bed565b51610360526200f3cf855162005d44565b966000946200f3df845162005d44565b6105805260009460005b88518110156200f4b3578a896200f4196001600160a01b036200f40d858462005bed565b51166103605162017072565b15806200f46a575b6200f43a575b50506200f4349062005b81565b6200f3e9565b986200f45f916200200d826001600160a01b036200c40e879e976200f4349862005bed565b9790508a896200f427565b50505061271061036051101562005bb5576001600160a01b036200f48f828b62005bed565b5116600052620138966103605160031b016020528a8960406000205415156200f421565b50909895979498969291939660005b88518110156200f5525761271061036051101562005bb5576001600160a01b03806200f4ef838c62005bed565b5116600052620138966103605160031b01602052604060002054156200f522575b506200f51c9062005b81565b6200f4c2565b819b6200f54a916200f5396200f51c948d62005bed565b51166200200d826105805162005bed565b9a906200f510565b5098509695929190939661036051612710811015806105205262005bb55760031b620138970154986200f58a62008597898c6201542e565b61022052600061056052600060a0525b6105205162005bb55760a0518a8110156200f65f576200f5d06200f5ee91600061052052620138976103605160031b0162005f0b565b91906001600160a01b03928391549060031b1c1661058051620170cc565b156200f60c575b506200f60360a05162005b81565b60a0526200f59a565b6000610520526200f62b60a051620138976103605160031b0162005f0b565b90549060031b1c166200f645610560516102205162005bed565b526200f6546105605162005b81565b61056052386200f5f5565b50979294959093985095909560005b8281106200f70c575050506105205162005bb55761022051516001600160401b03811162003f1a576200f6ad81620138976103605160031b016200611d565b60206102205101620138976103605160031b01600052602060002060005b8381106200f6ee57505050506200f6e29062005b81565b9492959091956200f3a8565b60019060206001600160a01b0385511694019381840155016200f6cb565b806001600160a01b036200f7256200f752938562005bed565b51166200f739610560516102205162005bed565b526200f7486105605162005b81565b6105605262005b81565b6200f66e565b92602084015160268110156200409c576015036200fd105760408401906200f78560c08351015162005ba7565b51906200f79c60a062007c9f818651015162005ba7565b51936200f7b1835185511462001929620174fa565b6200f7c4835186511462001929620174fa565b60005b83518110156200f824576200f7dd818662005bed565b519061271082101562005bb557620138966200f81e926001600160a01b038b511660005260031b016020526200054f6040600020546200822b838a62005bed565b6200f7c7565b509095919560005b87518110156200f95d576200f842818662005bed565b5161271081101562005bb55762013896906001600160a01b0386511660005260031b016020526200f87e60406000205462008299838962005bed565b906200f88b838862005bed565b519161271083101562005bb557620138966200f8c6936001600160a01b0389511660005260031b016020526040600020556200192962017621565b6200f8d2818662005bed565b5161271081101562005bb55762013896906001600160a01b036200f8f7848c62005bed565b511660005260031b016020526200f9196040600020546200733c838962005bed565b91906200f927828862005bed565b519061271082101562005bb5576200f95793620138966200054f936001600160a01b036200caed8f889062005bed565b6200f82c565b509194935091620089a26200f972916201723d565b926001600160a01b03604051956200f98a8762003fa1565b600187526020368189013751166200f9a28662005ba7565b526000905b86518210156200cec2576200f9bd828862005bed565b51610160526200f9ce855162005d44565b966000946200f9de885162005d44565b6101c05260009460005b88518110156200fab2578a896200fa186001600160a01b036200fa0c858462005bed565b51166101605162017072565b15806200fa69575b6200fa39575b50506200fa339062005b81565b6200f9e8565b986200fa5e916200200d826001600160a01b036200c40e879e976200fa339862005bed565b9790508a896200fa26565b50505061271061016051101562005bb5576001600160a01b036200fa8e828b62005bed565b5116600052620138966101605160031b016020528a8960406000205415156200fa20565b509098949897969291939760005b88518110156200fb565761271061016051101562005bb5576001600160a01b036200faec828b62005bed565b5116600052620138966101605160031b01602052604060002054156200fb1e575b6200fb189062005b81565b6200fac0565b996200fb4d6200fb18916001600160a01b036200fb3c8e8d62005bed565b51166200200d826101c05162005bed565b9a90506200fb0d565b50985096949392919561016051612710811015806106205262005bb55760031b620138970154966200fb8d62008597878a6201542e565b996000996000610700525b6106205162005bb557610700518a8110156200fc43576001600160a01b036200fbd76200fbe992600061062052620138976101605160031b0162005f0b565b90549060031b1c166101c051620170cc565b156200fc08575b6200fbfe6107005162005b81565b610700526200fb98565b996200fc3c906000610620528c6200200d826001600160a01b036200864061070051620138976101605160031b0162005f0b565b996200fbf0565b509a939794969299919850946000915b8383106200fcec57505050506106205162005bb5578051906001600160401b03821162003f1a576020906200fc9483620138976101605160031b016200611d565b01620138976101605160031b01600052602060002060005b8381106200fcce57505050506200fcc39062005b81565b90929591956200f9a7565b60019060206001600160a01b0385511694019381840155016200fcac565b620087236200fd09916001600160a01b0362009a30868662005bed565b916200fc53565b909192602081015160268110156200409c576016036200fdd25760c060406200fd3d920151015162005ba7565b519160005b83518110156200e334576001600160a01b036200fd60828662005bed565b511690620271225491600160401b83101562003f1a576001830180620271225583101562005bb5576200fdcc92620271226000527f1f4fe3ad533e3985b88710ce05a205152f02825e155777f3bcb8b3bbfcfb03a201906001600160a01b031982541617905562005b81565b6200fd42565b602081015160268110156200409c576017036200fe3f57608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203233206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b602081015160268110156200409c576018036200ff0f5760c060406200fe69920151015162005ba7565b5191600160ff1962027125541617620271255560005b83518110156200e334576001600160a01b036200fe9d828662005bed565b511690620271245491600160401b83101562003f1a576001830180620271245583101562005bb5576200ff0992620271246000527f18baa939e2e21be0e012ec26e9ec87e9e6faa065bd9f5835250457786300ece801906001600160a01b031982541617905562005b81565b6200fe7f565b60208194929394015160268110156200409c576019036200ff37575b506200c7279062005b81565b602081015160268110156200409c57601a03620100c85760a060406200ff61920151015162005ba7565b51906200ff726003835114620153e2565b6200ff7d8262005ba7565b516200ff8d6200a8a88462005bcb565b519262010084576200c727926001036201007d576200ffb56201001f91620271205462007088565b6202712055604051906200ffc98262003f69565b603282527f6469766964656e6461626c652062616c616e6365206f766572666c6f7720776860208301527f656e2070726f63657373696e6720636173680000000000000000000000000000604083015262005b4e565b6201007662010032620271215462007075565b620271215560405190620100468262003fa1565b601a82527f6469766964656e647320636f756e746572206f766572666c6f77000000000000602083015262005b4e565b906200ff2b565b5062010076565b606460405162461bcd60e51b815260206004820152601460248201527f496e76616c6964207061796d656e7420747970650000000000000000000000006044820152fd5b602081015160268110156200409c57601b03620106f0575091906202711e54620100f56200a9906201733b565b62027121546202711f541115620101166201010f620173c2565b8262005b4e565b62027120549062010128838362006fe1565b50506201013462017423565b506000805b61271082106201063c575b505090620101746201017a93926201016a6201015f6201733b565b612710861062005b4e565b62001929620173c2565b62006fe1565b90506201018662017423565b5060009060005b612710811062010564575b5090612710620101a9920462007159565b9050620101ba6202712a5462005d44565b906000946000905b61271082101562010557578160031b9460ff6201389a87015416156201031e5760009662013895870154156201030d57600098975b62005bb55762013897870154891015620102f3576201021c8962013897890162005f0b565b90549060031b1c6001600160a01b03169788600052620138968801602052604098868a60002054906201024f9162006fe1565b9a906201025b62017423565b620102669162005b4e565b60009a620138958b01546201027b9162006fe1565b91906201028762017423565b620102929162005b4e565b826000526202711a60205260002090815490620102af9162007088565b909155620102bc62017423565b620102c79162005b4e565b620102d3828962005bed565b52620102df9062005b81565b98620102eb9062005b81565b9897620101f7565b92909550620103059196975062005b81565b9094620101c2565b929095506201030591965062005b81565b95969392509350505b620103328262005d44565b9160009160005b828110620104c2575050506202711b54916201035a6200859784846201542e565b926000906000905b8082106201049d57505060005b8381106201040857505050508051906001600160401b03821162003f1a576020906201039b836200606c565b016202711b60005260005b828110620103ca575050506200c72790600062027120556000620271215562010076565b60019060206001600160a01b03845116930192817fc59860dc09a642b584039e685e1d1ef32a7f12bf29c382ee17f417fe2f31f399015501620103a6565b6000805b83811062010455575b50156201042e575b620104289062005b81565b6201036f565b906201044c62010428916001600160a01b0362009a30858762005bed565b9190506201041d565b6001600160a01b03806201046a858862005bed565b51169062010479838a62005bed565b51161462010492576201048c9062005b81565b6201040c565b505060013862010415565b909162008723620104bb916001600160a01b0362009dc28662005ed2565b9062010362565b6000805b8581106201050f575b5015620104e8575b620104e29062005b81565b62010339565b9262010506620104e2916001600160a01b0362009a30878662005bed565b939050620104d7565b6001600160a01b038062010524858762005bed565b51169062010533838a62005bed565b5116146201054c57620105469062005b81565b620104c6565b5050600138620104cf565b9394959291505062010327565b90918160039695961b60ff6201389a8201541615620106305762013895810154620138978201546000928391825b818410620105ce575050505062007b33620105c593620105bd6200054f9796946200713f9462006fe1565b929062006e71565b9493946201018d565b94929462005bb5576201062985620106216001600160a01b03620105fc6200054f9962013897880162005f0b565b90549060031b1c16956000966000526201389686016020526040600020549062007088565b979062007003565b9262010592565b50919094939462010198565b8160039897981b60ff6201389a8201541615620106e6576201389581015490600062013897820154916000926000925b818410620106a9575050505062007b336201069f936200adbf846201017462006f2d6200adcb966200054f9a9862006fe1565b9096959662010139565b93929362005bb557620106df84620106d76001600160a01b03620105fc6200054f9862013897880162005f0b565b969062007003565b926201066c565b5096959662010144565b602081015160268110156200409c57601c036201075d57608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203238206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b602081015160268110156200409c57601d0362010781575b506200c7279062010076565b602081015160268110156200409c57601e146201077557602081015160268110156200409c57601f0362010825576040620107bf9101515162005ba7565b51906202712354600160401b81101562003f1a576001810180620271235581101562005bb5576200c727926201081e91620271236000527f4ad859a97f543436e70c22b09d31fb4c7b9e987d7a008c98817c9b50a97b122401620067d9565b9062010775565b602081015160268110156200409c5760200362010849575b506200c727906201081e565b602081015160268110156200409c576021146201083d57602081015160268110156200409c57602203620108f0575060ff19620271255416620271255562027124546000620271245580620108a7575b506200c727905b906201083d565b620271246000527f18baa939e2e21be0e012ec26e9ec87e9e6faa065bd9f5835250457786300ece8908101905b818110620108e3575062010899565b60008155600101620108d4565b602081015160268110156200409c5760230362010914575b506200c72790620108a0565b602081015160268110156200409c576024146201090857602081015160268110156200409c576025146201090857929091602084015160268110156200409c5760150362010f0f5760408401906201097160c08351015162005ba7565b51906201098860a062007c9f818651015162005ba7565b51936201099d835185511462001929620174fa565b620109b0835186511462001929620174fa565b60005b835181101562010a1057620109c9818662005bed565b519061271082101562005bb5576201389662010a0a926001600160a01b038b511660005260031b016020526200054f6040600020546200822b838a62005bed565b620109b3565b509095919560005b875181101562010b495762010a2e818662005bed565b5161271081101562005bb55762013896906001600160a01b0386511660005260031b0160205262010a6a60406000205462008299838962005bed565b9062010a77838862005bed565b519161271083101562005bb5576201389662010ab2936001600160a01b0389511660005260031b016020526040600020556200192962017621565b62010abe818662005bed565b5161271081101562005bb55762013896906001600160a01b0362010ae3848c62005bed565b511660005260031b0160205262010b056040600020546200733c838962005bed565b919062010b13828862005bed565b519061271082101562005bb55762010b4393620138966200054f936001600160a01b036200caed8f889062005bed565b62010a18565b509194935091620089a262010b5e916201723d565b926001600160a01b036040519562010b768762003fa1565b6001875260203681890137511662010b8e8662005ba7565b526000905b865182101562010efc5762010ba9828862005bed565b516106605262010bba855162005d44565b9660009462010bca885162005d44565b6106e05260009460005b885181101562010c9e578a8962010c046001600160a01b0362010bf8858462005bed565b51166106605162017072565b158062010c55575b62010c25575b505062010c1f9062005b81565b62010bd4565b9862010c4a916200200d826001600160a01b036200c40e879e9762010c1f9862005bed565b9790508a8962010c12565b50505061271061066051101562005bb5576001600160a01b0362010c7a828b62005bed565b5116600052620138966106605160031b016020528a89604060002054151562010c0c565b509098949897969291939760005b885181101562010d425761271061066051101562005bb5576001600160a01b0362010cd8828b62005bed565b5116600052620138966106605160031b016020526040600020541562010d0a575b62010d049062005b81565b62010cac565b9962010d3962010d04916001600160a01b0362010d288e8d62005bed565b51166200200d826106e05162005bed565b9a905062010cf9565b50985096949392919561066051612710811015806104005262005bb55760031b6201389701549662010d7962008597878a6201542e565b9960009960006105c0525b6104005162005bb5576105c0518a81101562010e2f576001600160a01b0362010dc362010dd592600061040052620138976106605160031b0162005f0b565b90549060031b1c166106e051620170cc565b1562010df4575b62010dea6105c05162005b81565b6105c05262010d84565b9962010e28906000610400528c6200200d826001600160a01b03620086406105c051620138976106605160031b0162005f0b565b9962010ddc565b509a939794969299919850946000915b83831062010ed857505050506104005162005bb5578051906001600160401b03821162003f1a5760209062010e8083620138976106605160031b016200611d565b01620138976106605160031b01600052602060002060005b83811062010eba575050505062010eaf9062005b81565b909295919562010b93565b60019060206001600160a01b03855116940193818401550162010e98565b6200872362010ef5916001600160a01b0362009a30868662005bed565b9162010e3f565b9295505092506200c72791509062010908565b606460405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206f7065726174696f6e2074797065000000000000000000006044820152fd5b5091905062010f62816201486e565b9060068110156200409c576002810362010fce5760405162461bcd60e51b815260206004820152602a60248201527f5468652070726f6772616d2069732064656e6965642062792074686520706c7560448201526967696e2073797374656d60b01b6064820152608490fd5b600381036201109a5750303b1562003ee4579060405180927f74579b180000000000000000000000000000000000000000000000000000000082526044820160406004840152815180915260206064840192019060005b81811062011080575050506201104b8291600094600319848303016024850152620055c7565b038183305af180156201107457620110605750565b6001600160401b03811162003f1a57604052565b6040513d6000823e3d90fd5b825184528694506020938401939092019160010162011025565b6005915014620110a75750565b906000905b602083015180518310156200b5b45782620110c79162005bed565b51602081015160268110156200409c57156200b57057602081015160268110156200409c576001036201130657604001906201110860c08351015162005ba7565b51936201111f60a062007c9f818651015162005ba7565b5191620111308651855114620160fd565b6201113f86518451146201616f565b60005b8651811015620112945762011158818662005bed565b5161271081101562005bb557600160ff60076201117e9360031b015416151514620161e1565b6201118a818562005bed565b5162011197828762005bed565b519061271082101562005bb5576006620111b79260031b01549062007088565b90620111c4838862005bed565b519161271083101562005bb5576006620111e39360031b015562016238565b620111ef818562005bed565b51620111fc828762005bed565b519061271082101562005bb55760036201123c926001600160a01b0362011224868d62005bed565b5116600052811b016020526040600020549062007088565b91906201124a828862005bed565b519061271082101562005bb5576201128e9360036200054f936001600160a01b0362011277878f62005bed565b5116600052811b01602052604060002055620162aa565b62011142565b50949150916200838a620112a8916201723d565b9360405192620112b88462003fbd565b60008452600036813760005b8351811015620112e957806200054f62007e66620112e3938762005bed565b620112c4565b5094509260209250620112fd915062005b81565b919050620110ac565b909192602082015160268110156200409c576002036201149d57604080920190815193845191620113406200c76a60a08098015162005ba7565b51948351875103620080fd578351855103620080945783518651036200802b575060005b865181101562011487576201137a818862005bed565b5161271081101562005bb55760ff60076201139c9260031b015416156201631b565b620113a8818862005bed565b5161271081101562005bb55760031b600701805460ff19166001179055620113d1818562005bed565b51620113de828962005bed565b519061271082101562005bb5576005620113fc9260031b01620067d9565b62011408818662005bed565b5162011415828962005bed565b5161271081101562005bb55760031b6001015562011434818762005bed565b5162011441828962005bed565b5161271081101562005bb55760031b6002015562011460818862005bed565b519061271082101562005bb55760006006620114819360031b015562005b81565b62011364565b50959150935060209250620112fd915062005b81565b929190602081015160268110156200409c57600303620114ca57602091926200054f620112fd9262016367565b602081015160268110156200409c576004036201176f57620114f460c06040830151015162005ba7565b51936201150960c06040840151015162005bcb565b51906201153060a06040620115248282880151015162005ba7565b51950151015162005bcb565b519362011545875184511462001929620174fa565b62011558875185511462001929620174fa565b6201156b875186511462001929620174fa565b60005b8751811015620115d35762011584818662005bed565b519061271082101562005bb5576003620115cd926001600160a01b03620115ac848d62005bed565b5116600052811b016020526200054f6040600020546200822b838a62005bed565b6201156e565b509095919593929360005b83518110156201172c57620115f4818762005bed565b5161271081101562005bb5576003906001600160a01b0362011617848862005bed565b5116600052811b016020526201163860406000205462008299838862005bed565b9062011645838962005bed565b519161271083101562005bb557600362011688936001600160a01b036201166d878b62005bed565b5116600052811b016020526040600020556200192962017621565b62011694818762005bed565b5161271081101562005bb5576003906001600160a01b03620116b7848c62005bed565b5116600052811b01602052620116d86040600020546200733c838862005bed565b919050620116e7818862005bed565b519161271083101562005bb557600362011726936001600160a01b036201170f858e62005bed565b5116600052811b0160205260406000205562005b81565b620115de565b50936201174691929693506200899b620089a2916201723d565b9260005b8351811015620112e957806200054f62007e6662011769938762005bed565b6201174a565b92602084015160268110156200409c576005036201193e576201179a60a06040860151015162005ba7565b5190620117af60a06040870151015162005bcb565b519282518451036200da155760005b83518110156201181857620117d4818562005bed565b519061271082101562005bb557600362011812926001600160a01b038a5116600052811b016020526200054f6040600020546200822b838962005bed565b620117be565b509060005b8351811015620118bd5762011833818562005bed565b5161271081101562005bb5576003906001600160a01b03895116600052811b016020526201186c60406000205462008299838862005bed565b91906201187a828762005bed565b519061271082101562005bb557620118b79360036200054f936001600160a01b038d5116600052811b016020526040600020556200192962017621565b6201181d565b5094925090620118cd906201723d565b906001600160a01b0360405193620118e58562003fa1565b60018552602036818701375116620118fd8462005ba7565b52604051946201190d8662003fbd565b60008652600036813760005b8351811015620112e957806200054f62007e6662011938938762005bed565b62011919565b92602081015160268110156200409c5760060362011af4576040016201196960c08251015162005ba7565b51936201198060a062008a0b818551015162005ba7565b519285518351036200e0335785518451036200dfc95760005b8651811015620119fe57620119af818562005bed565b519061271082101562005bb5576003620119f8926001600160a01b03620119d7848c62005bed565b5116600052811b016020526200054f6040600020546200822b838962005bed565b62011999565b509060005b865181101562011a9e5762011a19818562005bed565b5161271081101562005bb5576003906001600160a01b0362011a3c848b62005bed565b5116600052811b0160205262011a5d60406000205462008299838862005bed565b919062011a6b828762005bed565b519061271082101562005bb55762011a989360036200054f936001600160a01b036201166d878f62005bed565b62011a03565b50949162011ab39193506200838a906201723d565b916040519462011ac38662003fbd565b60008652600036813760005b8351811015620112e957806200054f62007e6662011aee938762005bed565b62011acf565b602081015160268110156200409c5760070362011c07576040019262011b1f60c08551015162005ba7565b519162011b3160a08651015162005ba7565b519451519162011b49845187511462001929620174fa565b60005b8451811015620112e95762011c01906200054f6001600160a01b038062011b74848a62005bed565b51166000528660028b62011bf162011bb48762011bac8162013880978860205262008f6360ff604060002054161562001929620175e6565b519362005bed565b519162008fdf8d6040519662011bca8862003efe565b60018852886200e1998c60208b01946000865260408c0197885260608c01998a5262005bed565b5191015562008ffa838962005bed565b62011b4c565b602081949394015160268110156200409c5760080362011c9f5760c0604062011c34920151015162005ba7565b519160005b835181101562011c8d5762011c87906001600160a01b038062011c5d838862005bed565b51166000526201388090816020526200e2d1600160ff604060002054161515146200192962017535565b62011c39565b50926020919250620112fd9062005b81565b602081015160268110156200409c5760090362011d225760c0604062011cc9920151015162005ba7565b519160005b835181101562011c8d5762011d1c906001600160a01b038062011cf2838862005bed565b51166000526201388090816020526200e3c0600160ff604060002054161515146200192962017535565b62011cce565b602081015160268110156200409c57600a0362011dd1576040019062011d5360a06200e45460c08551015162005ba7565b519262011d68835185511462001929620174fa565b60005b835181101562011dbe5762011db8906001600160a01b038062011d8f838862005bed565b511660005262013880806020526200e4c4600160ff604060002054161515146200192962017535565b62011d6b565b5093620112fd9193506020925062005b81565b60208194939294015160268110156200409c57600b0362011e85576040019262011e0060c08551015162005ba7565b519351519162011e18855184511462001929620174fa565b60005b855181101562011e725762011e6c906200054f6001600160a01b038062011e43848b62005bed565b511660005262013880806020526200e5a7600160ff604060002054161515146200192962017535565b62011e1b565b5093509160209150620112fd9062005b81565b909192602082015160268110156200409c57600c0362011fc6576060604083015101519262011eb484620154d5565b60005b845181101562011dbe5760e062011ed78260606040880151015162005bed565b5101511562011f565762011ef8620093f38260606040880151015162005bed565b62013882548060001981011162005b915762011f1a6005916000190162006d3c565b5001805461ff0019166101001790556201388254906000198201821062005b915760056200944862011f50936000190162006d3c565b62011eb7565b62011f6e620094728260606040880151015162005bed565b62013882548060001981011162005b915762011f906005916000190162006cc0565b5001805461ff0019166101001790556201388254906000198201821062005b915760056200944862011f50936000190162006cc0565b929190602081015160268110156200409c57600d03620120da5760400192602062011ff660a08651015162005ba7565b5194510151916201200b855184511462015dd4565b60005b855181101562011e7257806201202962012082928662005bed565b51156201208857620120406200956b828962005bed565b6201205860ff60056200e7e26200958d858c62005bed565b6201207060ff6005620095a66200958d858c62005bed565b6005620095c26200958d838a62005bed565b6201200e565b62012098620095fa828962005bed565b620120b060ff60056200e7e26200961c858c62005bed565b620120c860ff6005620095a66200961c858c62005bed565b6005620095c26200961c838a62005bed565b602081949294015160268110156200409c57600e03620121a1576040019060206201210a60a08451015162005ba7565b5192510151936201211f835186511462015dd4565b60005b835181101562011e7257806201213d62012149928862005bed565b516201214f5762005b81565b62012122565b6201215f620096b8828762005bed565b6201217760ff60056200e9216200958d858a62005bed565b6201218f60ff6005620097006200958d858a62005bed565b6005620094486200958d838862005bed565b90602082949394015160268110156200409c57600f03620122e35760606040830151015192620121d184620154d5565b60005b845181101562011dbe5760e0620121f48260606040880151015162005bed565b51015115620122735762012215620093f38260606040880151015162005bed565b62013882548060001981011162005b9157620122376005916000190162006d3c565b5001805461ff0019166101001790556201388254906000198201821062005b91576005620095c26201226d936000190162006d3c565b620121d4565b6201228b620094728260606040880151015162005bed565b62013882548060001981011162005b9157620122ad6005916000190162006cc0565b5001805461ff0019166101001790556201388254906000198201821062005b91576005620095c26201226d936000190162006cc0565b90602081949394015160268110156200409c57601003620123545760400151906201231760a0608084015193015162005ba7565b51936201232c835186511462001929620174fa565b60005b835181101562011e7257806200054f620098ad6201234e938762005bed565b6201232f565b602081949294015160268110156200409c57601103620125da57604001906201238860a06200e45460c08551015162005ba7565b5193620123998351865114620153e2565b60005b835181101562012414576201240e906200054f6001600160a01b0380620123c4848962005bed565b51166000526201388580602052620123e76040600020546200733c868d62005bed565b919092620123f6868b62005bed565b51166000526020526040600020556200192962017499565b6201239c565b50935090620124239062017121565b906201388654936201243b620085978451876201542e565b9060009260005b878110620125b7575060005b8551811015620124f4576000805b898110620124a5575b50156201247e575b620124789062005b81565b6201244e565b936201249c62012478916001600160a01b036200ed92888a62005bed565b9490506201246d565b620124b08162005db5565b906001600160a01b03918291549060031b1c1690620124d0858b62005bed565b511614620124e957620124e39062005b81565b6201245c565b505060013862012465565b509550939250620125058262005d44565b8051906001600160401b03821162003f1a57602090620125258362005f95565b016201388660005260005b828110620125795750505060005b8281106201255657505050620112fd60209162005b81565b806200054f6001600160a01b0362001f2362012573948662005bed565b6201253e565b60019060206001600160a01b03845116930192817f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa401550162012530565b936200eef7620125d4916001600160a01b036200eee38862005db5565b62012442565b602081949294015160268110156200409c576012036201284657604001906201260e60a06200e45460c08551015162005ba7565b51936201261f8351865114620153e2565b60005b835181101562012673576201266d906200054f6001600160a01b03806201264a848962005bed565b51166000526201388580602052620123e760406000205462008299868d62005bed565b62012622565b5093509190620126839062017121565b6201388654620126938162005d44565b906000926000915b8083106201276357505050620126b18262005d44565b8051906001600160401b03821162003f1a57602090620126d18362005f95565b016201388660005260005b828110620127255750505060005b8281106201270257505050620112fd60209162005b81565b806200054f6001600160a01b0362001f236201271f948662005bed565b620126ea565b60019060206001600160a01b03845116930192817f4b58a51c867b7b693aaefb0acd6b55f4e7286e8436d34ab3cc63a1f2bfa35aa4015501620126dc565b91956000959193959760005b85518110156201283757620127848962005db5565b906001600160a01b03918291549060031b1c1690620127a4838962005bed565b511614620127bd57620127b79062005b81565b6201276f565b509750956001959391955b8062012804575b15620127e757620127e09062005b81565b916201269b565b936200eef7620127e0916001600160a01b036200eee38862005db5565b506001600160a01b03620128188262005db5565b90549060031b1c166000526201388560205260406000205415620127cf565b509796909695939195620127c8565b602081015160268110156200409c576013036201289f5760408091015101519260005b84518110156201288e57806200054f62009e6462012888938862005bed565b62012869565b50925090620112fd60209162005b81565b602081015160268110156200409c5760140362012a4a5760400190620128ca60c08351015162005ba7565b5193620128e160a062007c9f818651015162005ba7565b5191620128f28651855114620160fd565b6201290186518451146201616f565b60005b8651811015620129f5576201291a818562005bed565b5162012927828762005bed565b519061271082101562005bb5576006620129479260031b01549062007088565b9062012954838862005bed565b519161271083101562005bb5576006620129739360031b015562016238565b6201297f818562005bed565b516201298c828762005bed565b519061271082101562005bb5576003620129b4926001600160a01b0362011224868d62005bed565b9190620129c2828862005bed565b519061271082101562005bb557620129ef9360036200054f936001600160a01b0362011277878f62005bed565b62012904565b50949150916200838a62012a09916201723d565b936040519262012a198462003fbd565b60008452600036813760005b8351811015620112e957806200054f62007e6662012a44938762005bed565b62012a25565b9290602084015160268110156200409c5760150362012ffa57604084019062012a7860c08351015162005ba7565b519062012a8f60a062007c9f818651015162005ba7565b519362012aa4835185511462001929620174fa565b62012ab7835186511462001929620174fa565b60005b835181101562012b145762012ad0818662005bed565b519061271082101562005bb557600362012b0e926001600160a01b038b5116600052811b016020526200054f6040600020546200822b838a62005bed565b62012aba565b509095919560005b875181101562012c425762012b32818662005bed565b5161271081101562005bb5576003906001600160a01b03865116600052811b0160205262012b6b60406000205462008299838962005bed565b9062012b78838862005bed565b519161271083101562005bb557600362012bb0936001600160a01b03895116600052811b016020526040600020556200192962017621565b62012bbc818662005bed565b5161271081101562005bb5576003906001600160a01b0362012bdf848c62005bed565b5116600052811b0160205262012c006040600020546200733c838962005bed565b919062012c0e828862005bed565b519061271082101562005bb55762012c3c9360036200054f936001600160a01b03620083528f889062005bed565b62012b1c565b509194935091620089a262012c57916201723d565b926001600160a01b036040519562012c6f8762003fa1565b6001875260203681890137511662012c878662005ba7565b526000905b865182101562012fe55762012ca2828862005bed565b516101005262012cb3855162005d44565b9660009462012cc3885162005d44565b6101805260009460005b885181101562012d94578a8962012cfd6001600160a01b0362012cf1858462005bed565b51166101005162017008565b158062012d4e575b62012d1e575b505062012d189062005b81565b62012ccd565b9862012d43916200200d826001600160a01b036200c40e879e9762012d189862005bed565b9790508a8962012d0b565b50505061271061010051101562005bb5576001600160a01b0362012d73828b62005bed565b5116600052600361010051811b016020528a89604060002054151562012d05565b509098949897969291939760005b885181101562012e355761271061010051101562005bb5576001600160a01b0362012dce828b62005bed565b5116600052600361010051811b016020526040600020541562012dfd575b62012df79062005b81565b62012da2565b9962012e2c62012df7916001600160a01b0362012e1b8e8d62005bed565b51166200200d826101805162005bed565b9a905062012dec565b50985096949392919561010051612710811015806105e05262005bb55760031b600401549662012e6a62008597878a6201542e565b996000996000610540525b6105e05162005bb557610540518a81101562012f1c576001600160a01b0362012eb262012ec49260006105e05260046101005160031b0162005f0b565b90549060031b1c1661018051620170cc565b1562012ee3575b62012ed96105405162005b81565b6105405262012e75565b9962012f159060006105e0528c6200200d826001600160a01b03620086406105405160046101005160031b0162005f0b565b9962012ecb565b509a939794969299919850946000915b83831062012fc157505050506105e05162005bb5578051906001600160401b03821162003f1a5760209062012f6b8360046101005160031b016200611d565b0160046101005160031b01600052602060002060005b83811062012fa3575050505062012f989062005b81565b909295919562012c8c565b60019060206001600160a01b03855116940193818401550162012f81565b6200872362012fde916001600160a01b0362009a30868662005bed565b9162012f2c565b91945050620112fd9194506020925062005b81565b9092602081015160268110156200409c57601603620130585760c0604062013026920151015162005ba7565b519260005b84518110156201288e57806200054f6001600160a01b036200a5dc62013052948962005bed565b6201302b565b602081015160268110156200409c57601703620130c557608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203233206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b602081015160268110156200409c57601803620131325760c06040620130ef920151015162005ba7565b5192600160ff1962013892541617620138925560005b84518110156201288e57806200054f6001600160a01b036200a6b96201312c948962005bed565b62013105565b602081939293015160268110156200409c57601903620132bc5760008091604082910160a08082510151805162013283575b505051906001600160a01b03620131886200733560c060e086015195015162005ba7565b511690602083519301915af13d156201327a573d90620131a882620041b8565b91620131b8604051938462003fd9565b82523d6000602084013e5b15620131d75750620112fd60209162005b81565b62005b7d9062013259604051917f5468652063616c6c20746f2074686520636f6e7472616374206973206e6f742060208401527f7375636365737366756c2e2052657475726e20646174613a2000000000000000604084015282815162013248816059946020868601910162004106565b810103603981018452018262003fd9565b60405191829162461bcd60e51b83526020600484015260248301906200412b565b606090620131c3565b6201328e9062005ba7565b51516201329d575b8062013164565b8192506200733590620132b39251015162005ba7565b51903862013296565b602081015160268110156200409c57601a03620133765760a06040620132e6920151015162005ba7565b51620132f66003825114620153e2565b620133018162005ba7565b51916201331a620133128362005bcb565b519262005bdc565b51916201008457602092620112fd926001036200a911576201334562013354916201388d5462007088565b6201388d556200192962017423565b6200054f620133676201388e5462007075565b6201388e55620019296201745e565b602081015160268110156200409c57601b03620137ca57509190620133a76201388b54620070bf6200a9906201733b565b5050620133b362017423565b506000805b61271081106201377e575b5050620133cf6200709a565b620133de6202712a5462005d44565b906000946000905b61271082101562013771578160031b9460ff6007870154161562013536576000966002870154156201352557600098975b62005bb55760048701548910156201350b5762013438896004890162005f0b565b90549060031b1c6001600160a01b0316978860005260038801602052604098868a6000205490620134699162006fe1565b9a906201347562017423565b620134809162005b4e565b60009a60028b0154620134939162006fe1565b91906201349f62017423565b620134aa9162005b4e565b826000526201388760205260002090815490620134c79162007088565b909155620134d462017423565b620134df9162005b4e565b620134eb828962005bed565b52620134f79062005b81565b98620135039062005b81565b989762013417565b929095506201351d9196975062005b81565b9094620133e6565b929095506201351d91965062005b81565b95969392509350505b6201354a8262005d44565b9160009160005b828110620136dc57505050620138885491620135726200859784846201542e565b926000906000905b808210620136b757505060005b8381106201362257505050508051906001600160401b03821162003f1a57602090620135b38362005f3d565b016201388860005260005b828110620135e457505050620112fd60209160006201388d5560006201388e5562005b81565b60019060206001600160a01b03845116930192817ff9ab3ee50aab7a7cf5b7d30204dd21b5da7cc33690a7aec17b3653a822a635df015501620135be565b6000805b8381106201366f575b501562013648575b620136429062005b81565b62013587565b906201366662013642916001600160a01b0362009a30858762005bed565b91905062013637565b6001600160a01b038062013684858862005bed565b51169062013693838a62005bed565b511614620136ac57620136a69062005b81565b62013626565b50506001386201362f565b909162008723620136d5916001600160a01b0362009dc28662005d7c565b906201357a565b6000805b85811062013729575b501562013702575b620136fc9062005b81565b62013551565b9262013720620136fc916001600160a01b0362009a30878662005bed565b939050620136f1565b6001600160a01b03806201373e858762005bed565b5116906201374d838a62005bed565b5116146201376657620137609062005b81565b620136e0565b5050600138620136e9565b939495929150506201353f565b8060039594951b9060ff60078301541615620137c0576200adcb62007b336200054f946200adbf620137b79560026200adb58762006ee3565b939293620133b8565b50939293620133c3565b602081015160268110156200409c57601c036201383757608460405162461bcd60e51b815260206004820152602960248201527f5265736572766564206f70636f6465206964203238206973206e6f7420696d706044820152683632b6b2b73a32b21760b91b6064820152fd5b602081015160268110156200409c57601d036201385d575b50620112fd60209162005b81565b602081015160268110156200409c57601e146201384f57602081015160268110156200409c57601f03620138ae57602091620138a66200aeb86040620112fd9401515162005ba7565b91506201384f565b602081015160268110156200409c57602003620138d4575b50620112fd602091620138a6565b602081015160268110156200409c57602114620138c657602081015160268110156200409c576022036201392a5750620112fd60209160ff19620138925416620138925562013922620060c4565b9150620138c6565b602081015160268110156200409c5760230362013950575b50620112fd60209162013922565b602081015160268110156200409c576024146201394257602081015160268110156200409c576025146201394257602081015160268110156200409c5760150362010f0f57602091620139a7620112fd9262016367565b915062013942565b60019060206001600160a01b03845116930192817fc59860dc09a642b584039e685e1d1ef32a7f12bf29c382ee17f417fe2f31f3990155016200c067565b60019060206001600160a01b03845116930192817fe43a1016fd4ea9a9b882244b4d001d1f2d6b7fe146dc2643bb2c59db4a7bb0e10155016200bf1b565b60016001600160a01b03819216920192835492817f18baa939e2e21be0e012ec26e9ec87e9e6faa065bd9f5835250457786300ece801550191906200be6b565b62013a9d90827f18baa939e2e21be0e012ec26e9ec87e9e6faa065bd9f5835250457786300ece8918201910162005f24565b386200be3d565b6001808262013ab582948662013fec565b019201920191906200bdfd565b620271236000527f4ad859a97f543436e70c22b09d31fb4c7b9e987d7a008c98817c9b50a97b1224908282015b818301811062013b015750506200bdaf565b8062013b0f60019262006448565b0162013aef565b60016001600160a01b03819216920192835492817f1f4fe3ad533e3985b88710ce05a205152f02825e155777f3bcb8b3bbfcfb03a201550191906200bd7e565b62013b8890827f1f4fe3ad533e3985b88710ce05a205152f02825e155777f3bcb8b3bbfcfb03a2918201910162005f24565b386200bd55565b60019060206001600160a01b03845116930192817f7f4320370b90cfd882bd4442421f8b4dbea0ca3aefc8d29d4787126914d53c5a0155016200bc19565b62013bff90847f7f4320370b90cfd882bd4442421f8b4dbea0ca3aefc8d29d4787126914d53c5a918201910162005f24565b386200bc0d565b60019060206001600160a01b03845116930192817f8e71c125ecfe4aeed61c8cf4b09183dd0bf2a3230d826486f04e5f6f0de58e2c0155016200ba04565b62013c7690847f8e71c125ecfe4aeed61c8cf4b09183dd0bf2a3230d826486f04e5f6f0de58e2c918201910162005f24565b386200b9f8565b8062013c9f9160031b600160ff60078301541615151462013ca5575062005b81565b6200b947565b62013cb96004820162013897830162014185565b6201389a8101600160ff1982541617905580548162013893015560018101546201389482015560028101546201389582015562013cff6005820162013898830162013fec565b620138996006820154910155386200a911565b600660208262013d266001945186620068ac565b019201920191906200b735565b600681810204810362005b9157600683810204830362005b9157620271156000527f0f9b10e190177c3c56fc6ce7689c8130c567df57aa02c08e7a090a59992adf928360060281015b826006028201811062013d915750506200b705565b806000600692556000600182015562013dad60028201620065b3565b6000600382015562013dc26004820162006448565b600060058201550162013d7c565b600660208262013de46001945186620068ac565b019201920191906200b689565b8060060290600682040362005b91578260060260068104840362005b91576000906202711682527f2a7aa4e7f2fefac7a07702701afb9c202f6f79fb2762c8e42b37a264307667fa92830192015b82811062013e4f5750506200b659565b80826006925582600182015562013e6960028201620065b3565b82600382015562013e7d6004820162006448565b8260058201550162013e3f565b608460405162461bcd60e51b815260206004820152604060248201527f546865206265666f7265206f7065726174696f6e20706c7567696e207379737460448201527f656d2073686f756c64206e6f742072657475726e20766f7465206e65656465646064820152fd5b60a460405162461bcd60e51b815260206004820152604760248201527f546865206265666f7265206f7065726174696f6e20706c7567696e207379737460448201527f656d2073686f756c64206e6f742072657475726e206120766f74696e6720727560648201527f6c65206c697374000000000000000000000000000000000000000000000000006084820152fd5b81811462013fe8578154916001600160401b03831162003f1a5762013faa83836200611d565b60005260206000209060005260206000208154916000925b84841062013fd1575050505050565b600180919201938454928185015501929062013fc2565b5050565b9080821462013fe85762014001815462005221565b906001600160401b03821162003f1a5781906201402b8262014024865462005221565b866200678f565b600090601f83116001146201406457600092620140585750508160011b916000199060031b1c1916179055565b01549050388062006822565b81526020808220858352818320935090601f1985169083905b828210620140b95750509084600195949392106201409f57505050811b019055565b015460001960f88460031b161c191690553880806200686f565b84958192958501548155600180910196019401906201407d565b81811462013fe857815491620140ea8383620064d6565b6000526020600020906000526020600020906000905b8382106201410e5750505050565b806201411d6001928562013fec565b92810192918101910162014100565b81811462013fe85781549162014143838362006564565b6000526020600020906000526020600020906000905b838210620141675750505050565b80620141766001928562013f84565b92810192918101910162014159565b81811462013fe8578154916001600160401b03831162003f1a57620141ab83836200611d565b60005260206000209060005260206000208154916000925b848410620141d2575050505050565b60016001600160a01b0381921692019384549281850155019290620141c3565b81811462013fe85781549162014209838362006564565b6000526020600020906000526020600020906000905b8382106201422d5750505050565b806201423c6001928562014185565b9281019291810191016201421f565b81811462013fe8578154916201426283836200665a565b6000526020600020906000526020600020906000905b838210620142865750505050565b806001918403620142a3575b600780910193019101909162014278565b80548455620142e28280860190830160ff90620142c4828254168462006732565b620142d682825460081c16846200674c565b5460101c16906200676d565b620142f4600280830190860162013f84565b60038085019082018082036201430d575b505062014292565b6201431891620140d3565b6201432a60048083019086016201412c565b6201433c6005808301908601620141f2565b6201434e600680830190860162013fec565b388062014305565b919062006def5780820362014369575050565b60ff600580620053a29462014382848654168262006719565b600185015460018201556201439e60028601600283016201424b565b60038501546003820155620143ba600486016004830162013fec565b019201620143d782825416849060ff801983541691151516179055565b8054835461ff001916600891821c8416151590911b61ff00161783555460101c1662ff0000825491151560101b169062ff00001916179055565b9080821462013fe857908154906000915b60648310620144315750505050565b600180919401928354948184015501919262014422565b9062013882546020600093019081515190620144648262003ffb565b9162014474604051938462003fd9565b80835262014485601f199162003ffb565b013660208401376201449a8351518262006fe1565b90156201480457620144ac9062005d44565b90859284515115620147fb57620144c38262005d44565b965b855151811015620146445760008080805b8681106201455b57509050620144f881620144f2858762005bed565b62005435565b60068110156200409c576003146201451d575b50620145179062005b81565b620144c5565b6000905b8082106201453057506201450b565b909562009dd6620145549162014547898d62005bed565b516200200d828a62005bed565b9062014521565b62014574816201456d878d5162005bed565b5162014c43565b9390948083118062014630575b15620145e7575050918385620145dd575b60068110156200409c5760038e9114620145bd575b5050620145b49062005b81565b919091620144d6565b94620145d4916200200d82620145b4959862005bed565b93908c620145a7565b6000955062014592565b80949295919514806201461c575b15620145a75760068110156200409c5760038e9114620145bd575050620145b49062005b81565b5060068110156200409c57801515620145f5565b5060068610156200409c5785151562014581565b5093505090929350600093845b83518610156201479657620146716201466b878662005bed565b6200670b565b906006808310156200409c5760029283036201469c57505062014695909562005b81565b9462014651565b620146ac6201466b898862005bed565b92818410156200409c5760018094148062014782575b15620146d75750505062014695909562005b81565b620146ec6201466b8a899b9694959b62005bed565b92808410156200409c576004809414928362014756575b50826201472b575b50506201471f575b50620146959062005b81565b95506201469562014713565b909150881015620147415787141538806201470b565b602182634e487b7160e01b6000525260246000fd5b908093508a10156201476d57891415913862014703565b602184634e487b7160e01b6000525260246000fd5b50818310156200409c5780831415620146c2565b92509290935060068210156200409c5760038203620147f2575b620147bb8162005d44565b9360005b828110620147ce575050509190565b80620147df620147ec928462005bed565b516200200d828962005bed565b620147bf565b506000620147b0565b50909392505050565b608460405162461bcd60e51b815260206004820152602a60248201527f546865206c656e677468206f6620766f74696e672072756c65206c697374206960448201527f73206f766572666c6f77000000000000000000000000000000000000000000006064820152fd5b90620138835460206000930190815151906201488a8262003ffb565b916201489a604051938462003fd9565b808352620148ab601f199162003ffb565b01366020840137620148c08351518262006fe1565b90156201480457620148d29062005d44565b90859284515115620147fb57620148e98262005d44565b965b85515181101562014a575760008080805b8681106201496e575090506201491881620144f2858762005bed565b60068110156200409c576003146201493d575b50620149379062005b81565b620148eb565b6000905b8082106201495057506201492b565b909562009dd6620149679162014547898d62005bed565b9062014941565b620149878162014980878d5162005bed565b5162014cdf565b9390948083118062014a43575b15620149fa575050918385620149f0575b60068110156200409c5760038e9114620149d0575b5050620149c79062005b81565b919091620148fc565b94620149e7916200200d82620149c7959862005bed565b93908c620149ba565b60009550620149a5565b809492959195148062014a2f575b15620149ba5760068110156200409c5760038e9114620149d0575050620149c79062005b81565b5060068110156200409c5780151562014a08565b5060068610156200409c5785151562014994565b5093505090929350600093845b835186101562014b795762014a7e6201466b878662005bed565b906006808310156200409c57600292830362014aa957505062014aa2909562005b81565b9462014a64565b62014ab96201466b898862005bed565b92818410156200409c5760038094148062014b65575b1562014ae45750505062014aa2909562005b81565b62014af96201466b8a899b9694959b62005bed565b92808410156200409c576005809414928362014b4e575b508262014b38575b505062014b2c575b5062014aa29062005b81565b955062014aa262014b20565b9091508810156200409c57871415388062014b18565b908093508a10156200409c57891415913862014b10565b50818310156200409c578083141562014acf565b92509290935060068210156200409c576003820362014bc8575b62014b9e8162005d44565b9360005b82811062014bb1575050509190565b80620147df62014bc2928462005bed565b62014ba2565b50600062014b93565b1562014bd957565b608460405162461bcd60e51b815260206004820152602860248201527f506c7567696e466163746f72793a20706c7567696e20696e646578206f75742060448201527f6f662072616e67650000000000000000000000000000000000000000000000006064820152fd5b909160008093819362014c5c6201388254831062014bd1565b60ff600562014c6b8462006d3c565b50015460081c161562014cd357828262014c8792600162014ea1565b62014c93575b50929190565b809450600192935062014ca7915062006d3c565b50015490600362014cc860ff62014cbe8662006d3c565b5054169462006d3c565b500154913862014c8d565b50509150915080918190565b909160008093819362014cf86201388354831062014bd1565b60ff600562014d078462006cc0565b50015460081c161562014cd357828262014d22928262014ea1565b62014d2d5750929190565b809450600192935062014d41915062006cc0565b50015490600362014cc860ff62014d588662006cc0565b5054169462006cc0565b1562014d6a57565b608460405162461bcd60e51b815260206004820152603160248201527f436865636b696e6720636f6e646974696f6e206578703a20706c7567696e206960448201527f6e646578206f7574206f662072616e67650000000000000000000000000000006064820152fd5b1562014ddc57565b608460405162461bcd60e51b815260206004820152602f60248201527f436865636b696e6720636f6e646974696f6e206578703a206e6f646520696e6460448201527f6578206f7574206f662072616e676500000000000000000000000000000000006064820152fd5b6201388490815481101562005bb557600791600052027f84d95adeb12a1259eb9eb7c14e7511a374a468bb7f8ac3d8ec617dbcd1336deb0190600090565b805482101562005bb5576000526007602060002091020190600090565b909291908015620152105762014ebd6201388254831062014d62565b62014ed9600262014ece8462006d3c565b500154841062014dd4565b8015620151f25762014f09600162014f0085600262014ef88762006d3c565b500162014e84565b50015460ff1690565b62014f148162004eaa565b8062014f24575050505050600090565b62014f2f8162004eaa565b6003810362014f42575050505050600190565b62014f4d8162004eaa565b6004810362014f60575050505050600090565b62014f6b8162004eaa565b60019080820362014f8457505092620056279362015238565b90929362014f928262004eaa565b600280921462014fa8575b505050505050600090565b8215620151d55762014fd18462014fc5838562014ef88a62006d3c565b50015460081c60ff1690565b925b60009586865b62015163575b5062014feb8762005d44565b9760005b88811062015106575050505050620150078262004091565b8183036201506657505091906000915b818310620150255750505090565b9091928062015043575b6201503b909362005b81565b919062015017565b506201503b6201505e62015058858462005bed565b51151590565b90506201502f565b909150620150748262004091565b8103620150cd57509060009182915b818310620150915750505090565b9091928015620150b0575b620150a8909362005b81565b919062015083565b50620150a8620150c562015058858462005bed565b90506201509c565b60039150620150dc8162004091565b14620150ef575038808080808062014f9d565b6201510262015058620056279262005ba7565b1590565b808a62015142620151396201512f848b620151278c8262014ef88d62006cc0565b500162005f0b565b90549060031b1c90565b86868962014ea1565b620151566201515d946200054f9362005bed565b9015159052565b62014fef565b8462015175858262014ef88662006cc0565b500154811015620151cf576201519b6201512f828762015127888262014ef88962006cc0565b620151b4575b620151ad879162005b81565b9062014fd9565b96620151ad620151c5889262005b81565b98915050620151a1565b62014fdf565b620151eb8462014fc5838562014ef88a62006cc0565b9262014fd3565b6201520a600162014f0085600262014ef88762006cc0565b62014f09565b620152216201388354831062014d62565b62015232600262014ece8462006cc0565b62014ed9565b90929160036201528a9183600014620153125760ff60016201526187600262014ef88662006d3c565b50015460101c16945b84156201530157600262014ef8620152829362006d3c565b500162005565565b91603d8110156200409c57602c8103620152d1575050620152b46200733560208093015162005ba7565b5191015160268110156200409c57620152cd90620176d2565b1490565b90929060018103620152e65750505050600090565b600314620152f657505050600090565b620056279262015382565b600262014ef8620152829362006cc0565b60ff60016201532887600262014ef88662006cc0565b50015460101c16946201526a565b156201533e57565b606460405162461bcd60e51b815260206004820152602060248201527f4f70657261746f722061646472657373206973206e6f742070726f76696465646044820152fd5b919060406200733592016201539c60018251511462015336565b620153b76001620153ae835162005ba7565b51511462015336565b620153cd6001600160a01b039384925162005ba7565b51169215620153dc5751161490565b51161490565b15620153ea57565b606460405162461bcd60e51b815260206004820152601c60248201527f496e76616c6964206e756d626572206f6620706172616d6574657273000000006044820152fd5b9190820180921162005b9157565b620154478162004eaa565b620154556200eb976201765c565b620154608162004eaa565b600181036201547f5750620154786200ebc36201765c565b6201388b55565b6201548a8162004eaa565b600281036201549b57506201388c55565b620154a68162004eaa565b60038103620154b757506201388d55565b80620154c560049262004eaa565b14620154ce5750565b6201388e55565b9060005b825181101562015dcf5760e0620154f1828562005bed565b51015115620159c557620155116201550a828562005bed565b516200670b565b6006808210156200409c576004918203620156a3575060209060016003836201553b868962005bed565b510151060362015558575050620155529062005b81565b620154d9565b62005b7d828462015688606362015589620155828562015579868e62005bed565b51015162006190565b9362006190565b92847f20697320776974682072657475726e2074797065205945535f414e445f534b496040958651978894620155f862005c528388016026907f496e76616c6964206265666f72652d6f7020706c7567696e206c6576656c2e2081526502632bb32b6160d51b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b81526201562882518093601396878501910162004106565b01918201527f505f53414e44424f582c2073686f756c64206265206f6e206c6576656c205b3160338201527f2c20342c20372c2031302c202e2e2e5d00000000000000000000000000000000605382015203604381018552018362003fd9565b5193849362461bcd60e51b855284015260248301906200412b565b620156b36201550a848762005bed565b81811015620159b0576001036201581057506020906002600383620156d9868962005bed565b5101510603620156f0575050620155529062005b81565b62005b7d828462015688605d62015711620155828562015579868e62005bed565b92847f20697320776974682072657475726e20747970652053414e44424f585f4e454560409586519788946201578062005c528388016026907f496e76616c6964206265666f72652d6f7020706c7567696e206c6576656c2e2081526502632bb32b6160d51b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b8152620157b082518093601396878501910162004106565b01918201527f4445442c2073686f756c64206265206f6e206c6576656c205b322c20352c203860338201527f2c2031312c202e2e2e5d00000000000000000000000000000000000000000000605382015203603d81018552018362003fd9565b620158206201550a848762005bed565b908110156201474157600203620159625760209060038262015843858862005bed565b5101510662015859575050620155529062005b81565b62005b7d8284620156886201587f620158788462015579858d62005bed565b9262006190565b91620159536040938451958693620158d062005c528387016026907f496e76616c6964206265666f72652d6f7020706c7567696e206c6576656c2e2081526502632bb32b6160d51b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b815281519062015901826013948d868501910162004106565b0101603e907f20697320776974682072657475726e2074797065204e4f2c2073686f756c642081527f6265206f6e206c6576656c205b332c20362c20392c2031322c202e2e2e5d000060208201520190565b03601f19810184528362003fd9565b62005b7d9060405191829162461bcd60e51b8352820160609060208152601e60208201527f496e76616c69642072657475726e20747970653a20554e444546494e4544000060408201520190565b602183634e487b7160e01b6000525260246000fd5b620159d56201550a828562005bed565b600690818110156200409c5760050362015b29575060206001600382620159fd858862005bed565b510151060362015a135750620155529062005b81565b62005b7d8262015b0c605262015a3462015582866201557981998c62005bed565b926040937f20697320776974682072657475726e2074797065205945532c2073686f756c64855198899362015aa162005c528387016025907f496e76616c69642061667465722d6f7020706c7567696e206c6576656c2e204c815264032bb32b6160dd1b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b815282519062015ad2826013958c878501910162004106565b01918201527f206265206f6e206c6576656c205b312c20342c20372c2031302c202e2e2e5d00603382015203603281018752018562003fd9565b5192839262461bcd60e51b8452600484015260248301906200412b565b62015b396201550a838662005bed565b90808210156200409c57600391820362015c95575060026020918262015b60858862005bed565b510151060362015b765750620155529062005b81565b62005b7d8262015b0c605c62015b9762015582866201557981998c62005bed565b926040937f20697320776974682072657475726e207479706520564f54494e475f4e454544855198899362015c0462005c528387016025907f496e76616c69642061667465722d6f7020706c7567696e206c6576656c2e204c815264032bb32b6160dd1b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b815282519062015c35826013958c878501910162004106565b01918201527f45442c2073686f756c64206265206f6e206c6576656c205b322c20352c20382c60338201527f2031312c202e2e2e5d0000000000000000000000000000000000000000000000605382015203603c81018752018562003fd9565b62015ca56201550a848762005bed565b908110156200409c5760020362015d8a576020908162015cc6848762005bed565b5101510662015cdb5750620155529062005b81565b62005b7d8262015b0c62015cfa62015878856201557981988b62005bed565b9162015d7b604093845197889362015d4a62005c528387016025907f496e76616c69642061667465722d6f7020706c7567696e206c6576656c2e204c815264032bb32b6160dd1b60208201520190565b017201038363ab3b4b7103bb4ba341034b73232bc1606d1b815281519062015901826013948b868501910162004106565b03601f19810186528562003fd9565b60405162461bcd60e51b815260206004820152601e60248201527f496e76616c69642072657475726e20747970653a20554e444546494e454400006044820152606490fd5b509050565b1562015ddc57565b60a460405162461bcd60e51b815260206004820152604d60248201527f546865206c656e677468206f662074686520706c7567696e20696e646578657360448201527f20617272617920616e642074686520626f6f6c65616e206172726179206d757360648201527f74206265207468652073616d65000000000000000000000000000000000000006084820152fd5b1562015e7457565b608460405162461bcd60e51b815260206004820152602260248201527f496e76616c696420706c7567696e20696e64657820746f20626520656e61626c604482015261195960f21b6064820152fd5b1562015ecb57565b608460405162461bcd60e51b815260206004820152602b60248201527f54686520706c7567696e20746f20626520656e61626c6564206973206e6f742060448201527f696e697469616c697a65640000000000000000000000000000000000000000006064820152fd5b1562015f3d57565b608460405162461bcd60e51b815260206004820152602b60248201527f54686520706c7567696e20746f20626520656e61626c656420697320616c726560448201527f61647920656e61626c65640000000000000000000000000000000000000000006064820152fd5b1562015faf57565b608460405162461bcd60e51b815260206004820152602360248201527f496e76616c696420706c7567696e20696e64657820746f20626520646973616260448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152fd5b156201602157565b608460405162461bcd60e51b815260206004820152602c60248201527f54686520706c7567696e20746f2062652064697361626c6564206973206e6f7460448201527f20696e697469616c697a656400000000000000000000000000000000000000006064820152fd5b156201609357565b608460405162461bcd60e51b815260206004820152602d60248201527f54686520706c7567696e20746f2062652064697361626c656420697320616c7260448201527f656164792064697361626c6564000000000000000000000000000000000000006064820152fd5b156201610557565b608460405162461bcd60e51b815260206004820152603060248201527f546865206c656e677468206f662074617267657420616e6420746f6b656e436c60448201527f617373206973206e6f7420657175616c000000000000000000000000000000006064820152fd5b156201617757565b608460405162461bcd60e51b815260206004820152602c60248201527f546865206c656e677468206f662074617267657420616e6420616d6f756e742060448201527f6973206e6f7420657175616c00000000000000000000000000000000000000006064820152fd5b15620161e957565b608460405162461bcd60e51b815260206004820152602260248201527f54686520746f6b656e20636c617373206973206e6f7420696e697469616c697a604482015261195960f21b6064820152fd5b156201624057565b608460405162461bcd60e51b815260206004820152602960248201527f54686520746f74616c20737570706c79206f662074686520746f6b656e20697360448201527f206f766572666c6f7700000000000000000000000000000000000000000000006064820152fd5b15620162b257565b608460405162461bcd60e51b8152602060048201526024808201527f5468652062616c616e6365206f662074686520746f6b656e206973206f76657260448201527f666c6f77000000000000000000000000000000000000000000000000000000006064820152fd5b156201632357565b606460405162461bcd60e51b815260206004820152602060248201527f54686520746f6b656e20697320616c726561647920696e697469616c697a65646044820152fd5b60408101906201637c60c08351015162005ba7565b51916201639e60a062016393818451015162005ba7565b519251015162005bcb565b5193620163b3845183511462001929620174fa565b620163c6845186511462001929620174fa565b60005b84518110156201642457620163df818462005bed565b519061271082101562005bb5576201641e916001600160a01b03865116600052600390811b016020526200054f6040600020546200822b838a62005bed565b620163c9565b5092919360005b8351811015620165505762016441818462005bed565b5190612710918281101562005bb5576001600160a01b03908189511660005260039081602091811b0181526201648260406000205462008299868962005bed565b906201648f868a62005bed565b51918783101562005bb55784620164bc93878f5116600052811b0184526040600020556200192962017621565b620164c8848862005bed565b518581101562005bb557829084620164e1878c62005bed565b5116600052811b018152620165016040600020546200733c868962005bed565b91909262016510868a62005bed565b519687101562005bb5576201654a966200054f9562016530888d62005bed565b5116600052811b0190526040600020556200192962017697565b6201642b565b50506200838a62016561916201723d565b9060405193620165718562003fa1565b60018552602036818701376001600160a01b0390816107c0525116620165978562005ba7565b526000935b8151851015620168ba57620165b2858362005bed565b5194620165c0845162005d44565b91600093620165d0825162005d44565b6107e0528496855b87518110156201667957620165ff6107c051620165f6838b62005bed565b51168b62017008565b158062016641575b6201661e575b620166189062005b81565b620165d8565b956201663862016618916107c051620087158a8c62005bed565b9690506201660d565b506127108a101562005bb5576107c0516201665d828a62005bed565b511660005260038a811b01602052604060002054151562016607565b509793929096949195976000986127108610159560031b9860038a019a5b895181101562016713578762005bb5576107c051620166b7828c62005bed565b51166000528b60205260406000205415620166de575b620166d89062005b81565b62016697565b976201670a620166d8918b620166f98c6107c0519262005bed565b51166200200d826107e05162005bed565b989050620166cd565b50949591939650985096909596806107805262005bb55760040180610760525495620167446200859786896201542e565b61074052600097886107a0525b6107805162005bb5576107a05188811015620167ef576201678062016796916000610780526107605162005f0b565b6107c05191549060031b1c166107e051620170cc565b15620167b5575b620167ab6107a05162005b81565b6107a05262016751565b97620167e890620167cd6107a0516107605162005f0b565b6107c05191549060031b1c166200200d826107405162005bed565b976201679d565b5095939096509690969391936000915b8383106201688957505050506107805162005bb55761074051516001600160401b03811162003f1a576201683781610760516200611d565b6020610740510161076051600052602060002060006107c051905b848110620168725750505050506201686a9062005b81565b93926201659c565b600190602083865116950194818501550162016852565b62008723620168b3916107c051620168a2868662005bed565b51166200200d826107405162005bed565b91620167ff565b5050509050565b90805180516001600160401b03811162003f1a57620168e181856200611d565b6020809201846000528260002060005b8381106201696e575050505060c082600692620053a295940151600185015560408101516002850155606081015160038501556201694460808201511515600486019060ff801983541691151516179055565b6201695760a082015160058601620067d9565b0151151591019060ff801983541691151516179055565b82518282015591840191600101620168f1565b620138848054600160401b81101562003f1a57620169a59160018201905562014e46565b91909162006def57620053a291620168c1565b62013890908154600160401b81101562003f1a576001810180845581101562005bb557620053a2926000527f7f73709277f72a9bc7b284375e83603a53394744e9fa86da811e86c2aa78e05e01620067d9565b908062016a16575050565b620053a291600052601f6020600020910160051c81019062005f24565b90600160401b811162003f1a57815481835580821062016a5257505050565b620053a292600052601f6020600020918180850160051c840194168062016a81575b500160051c019062005f24565b600019908186019182549160200360031b1c1690553862016a74565b60009262016ab762016ab0859462014e46565b50620053bf565b9380935b85515185101562016bbd575061271084101562005bb55760039380851b946001600160a01b0385166000526020908601815262016b05604096600188600020549101549062006fe1565b9384911562016b7a579062016b1a9162007088565b96901562016b3757505062016b2f9062005b81565b939062016abb565b60649250519062461bcd60e51b82526004820152601460248201527f746f74616c20706f776572206f766572666c6f770000000000000000000000006044820152fd5b60648389519062461bcd60e51b82526004820152600e60248201527f706f776572206f766572666c6f770000000000000000000000000000000000006044820152fd5b93505092505090565b1562016bce57565b606460405162461bcd60e51b815260206004820152601360248201527f63757272656e74596573206f766572666c6f77000000000000000000000000006044820152fd5b600162016c1f8262014e46565b5001546202712e546000928184526202712b908160205262016c48816004604088200162005f0b565b90549060031b1c918386528060205262016c69826005604089200162005f0b565b90549060031b1c93865260205260ff600662016c9d62016c8f848360408b200162005f0b565b90549060031b1c9362014e46565b5001541662016cf2575062016ce29262016cd362016ccd938362016cc562016cda9562006fab565b969062016bc6565b6201542e565b9062006fe1565b929062016bc6565b111562016cec5790565b50600190565b62010174925062016ce29362016d0c62016cda9362006fab565b949062016bc6565b9092919262016d24825162005d44565b60009162016d33815162005d44565b8390845b865181101562016dce576001600160a01b0362016d5a81620165f6848b62005bed565b158062016d99575b62016d7a575b5062016d749062005b81565b62016d37565b819662016d919162009a3062016d74948b62005bed565b959062016d68565b506127108a101562005bb5578062016db2838a62005bed565b511660005260038a811b01602052604060002054151562016d62565b509295919694509260005b875181101562016e4f5761271086101562005bb5576001600160a01b038062016e03838b62005bed565b5116600052600387811b016020526040600020541562016e30575b5062016e2a9062005b81565b62016dd9565b819562016e47916200ed9262016e2a948c62005bed565b949062016e1e565b509250945092612710831015938462005bb55760049586600395861b019687549462016e806200859782886201542e565b9460009689889a5b62016ff357818b101562016f2957506000998b62016ec362016eab838362005f0b565b90546001600160a01b0392918e1b1c82168a620170cc565b1562016ee6575b50509062016edb8b94939262005b81565b9a9091929362016e88565b91998c95949392909162016efc908c9062005f0b565b9054908d1b1c1662016f0f828b62005bed565b5262016f1b9062005b81565b9890919293508b3862016eca565b9697949a98505091975092506000915b83831062016fcf575050505062016fba578051926001600160401b03841162016fa5575062016f6983836200611d565b602080910191600052806000209060005b84811062016f89575050505050565b83516001600160a01b0316838201559281019260010162016f7a565b604190634e487b7160e01b6000525260246000fd5b603283634e487b7160e01b6000525260246000fd5b6200872362016fec916001600160a01b0362008715868662005bed565b9162016f39565b603285634e487b7160e01b6000525260246000fd5b9060005b61271083101562005bb5576003600484821b018054831015620170685782620170359162005f0b565b916001600160a01b0392839254911b1c169083161462017060576201705a9062005b81565b6201700c565b505050600190565b5050505050600090565b9060005b61271083101562005bb55760036201389784821b018054831015620170685782620170a19162005f0b565b916001600160a01b0392839254911b1c16908316146201706057620170c69062005b81565b62017076565b9060005b82518110156201710b576001600160a01b0380620170ef838662005bed565b5116908316146201706057620171059062005b81565b620170d0565b505050600090565b801562005b91576000190190565b9081519060005b60001983810184811162005b9157821015620171ef576001820180831162005b91575b84811062017166575050620171609062005b81565b62017128565b6001600160a01b03806201717b858962005bed565b5116816201718a848a62005bed565b511614620171a5575b506201719f9062005b81565b6201714b565b828692960182811162005b91576201719f92620171e892620171cc620171e1938b62005bed565b5116620171da898b62005bed565b5262017113565b9562017113565b9062017193565b505090620171fd8162005d44565b9060005b81811062017210575090925050565b806001600160a01b036201722962017237938862005bed565b51166200200d828662005bed565b62017201565b80519160005b60001984810185811162005b9157821015620172f5576001820180831162005b91575b858110620172815750506201727b9062005b81565b62017243565b6201728d838662005bed565b516201729a828762005bed565b5114620172b3575b620172ad9062005b81565b62017266565b948181019080821162005b9157620172e6620172ed91620172d9620172ad948962005bed565b51620171da8a8a62005bed565b9662017113565b9050620172a2565b50509091620173048162005d44565b9060005b81811062017317575090925050565b806201732862017335928762005bed565b516200200d828662005bed565b62017308565b604051620173498162003efe565b604481527f496e76616c6964206469766964656e64207065726d797269616420706572207460208201527f72616e73616374696f6e2e2053686f756c64206265206c657373207468616e2060408201527f3130303000000000000000000000000000000000000000000000000000000000606082015290565b604051620173d08162003f69565b603281527f4e6f20656e6f756768206e756d626572206f66207472616e73616374696f6e7360208201527f20666f72206469766964656e6473207965740000000000000000000000000000604082015290565b604051620174318162003fa1565b601c81527f6469766964656e6473206f7065726174696f6e206f766572666c6f7700000000602082015290565b6040516201746c8162003fa1565b600d81527f556e6b6e6f776e204572726f7200000000000000000000000000000000000000602082015290565b604051620174a78162003f69565b602681527f4572726f7220696e20776974686472617761626c6520636173682063616c637560208201527f6c6174696f6e0000000000000000000000000000000000000000000000000000604082015290565b604051620175088162003fa1565b601281527f496e76616c696420506172616d65746572730000000000000000000000000000602082015290565b604051620175438162003fa1565b601581527f4d656d62657220646f6573206e6f742065786973740000000000000000000000602082015290565b6040516201757e8162003fa1565b601781527f4d656d626572206973206e6f742073757370656e646564000000000000000000602082015290565b604051620175b98162003fa1565b601b81527f4d656d62657220697320616c72656164792073757370656e6465640000000000602082015290565b604051620175f48162003fa1565b601581527f4d656d62657220616c7265616479206578697374730000000000000000000000602082015290565b6040516201762f8162003fa1565b601181527f4e6f20656e6f7567682062616c616e6365000000000000000000000000000000602082015290565b6040516201766a8162003fa1565b601881527f496e76616c696420706172616d6574657220746f207365740000000000000000602082015290565b604051620176a58162003fa1565b601581527f546f6b656e20616d6f756e74206f766572666c6f770000000000000000000000602082015290565b60268110156200409c578015620178c0576001811462016cec5760028114620178ba5760038114620178b45760048114620178ae5760058114620178a85760068114620178a257600781146201789c57600881146201789657600981146201789057600a81146201788a57600b81146201788457600c81146201787e57600d81146201787857600e81146201787257600f81146201786c57601081146201786657601181146201786057601281146201785a57601381146201785457601481146201784e57601581146201784857601881146201784257601781146201783c57601981146201783657601a81146201783057601b81146201782a57601c81146201782457601d81146201781e57601e81146201781857601f81146201781257602081146201780c576021146201780757600090565b602190565b50602090565b50601f90565b50601e90565b50601d90565b50601c90565b50601b90565b50601a90565b50601990565b50601790565b50601690565b50601590565b50601490565b50601390565b50601290565b50601190565b50601090565b50600f90565b50600e90565b50600d90565b50600c90565b50600b90565b50600a90565b50600990565b50600890565b50600790565b50600690565b50600590565b50600490565b50600390565b50600290565b50600090565b90815181101562005bb5570160200190565b60405190620178e78262003f69565b60288252604036602084013760005b601481106201790457505090565b60139080820391821162005b91578160031b917f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81160362005b915760ff80831162005b915762017963600180941b6001600160a01b0386166200616f565b60f081168282160391821162005b91577f0f00000000000000000000000000000000000000000000000000000000000000620179a39160f41b1662017a3f565b9082841b917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416840362005b915762017a13917fff000000000000000000000000000000000000000000000000000000000000009160001a62017a08858a620178c6565b5360f81b1662017a3f565b92810180911162005b915762017a3262017a399360001a9186620178c6565b5362005b81565b620178f6565b60f81c600a81101562017a805760300160ff811162005b915760f81b7fff000000000000000000000000000000000000000000000000000000000000001690565b60570160ff811162005b915760f81b7fff00000000000000000000000000000000000000000000000000000000000000169056fea2646970667358221220a88b2310de1c810e72a47968a10611bf5aba2909acc6aaec5b26a486d5c735f764736f6c63430008130033",
+ "bytecode": "0x60808060405234620000195762033b4190816200001f8239f35b600080fdfe610bc08060405260043610156200001557600080fd5b600090813560e01c908163036ee850146200299d575080630fda3e1e146200290557806310ade3ea14620028d65780631797631d146200284f5780631c75255a14620027e957806323b65c7814620027625780632514a6b4146200253c5780632eeb063b146200236c5780633fb18aec146200230257806356424cf414620022235780635c00d98714620022005780635d0b184914620002055780635f1231ea14620021165780635f5d5f00146200208f578063681ece9d146200204a5780636c0d4fa41462001eb75780637daa10ce1462001e9a5780638129fc1c1462001ad757806383e4cccf146200186e578063864f9f7a146200183057806386ad77e214620014e25780638c7a63ae1462001451578063942d59fa146200126e5780639f36145f14620011e8578063a064c4f114620011bd578063acf80bc4146200117f578063aec266871462001095578063aefca42a1462001074578063c41f9482146200102c578063c591aa981462000fde578063cab847f714620002a4578063d5a172f21462000278578063d6a93c511462000226578063f179f23b14620002055763f8ce8bdc14620001c757600080fd5b346200020257806003193601126200020257620001e3620052e8565b50610c80620001f162002bb8565b620002006040518092620029ed565bf35b80fd5b503462000202578060031936011262000202576020613f7854604051908152f35b503462000202578060031936011262000202575b6103e8811062000250575b602090604051908152f35b60ff60078260031b0154161562000272576200026c9062004cdf565b6200023a565b62000245565b50346200020257806003193601126200020257613f70546040516001600160a01b039091168152602090f35b5060031960203682011262000ca5576001600160401b036004351162000ca557606090600435360301126200020257604051620002e18162002b06565b620002f1600435600401620029d8565b8152600435602401356101608190526001600160401b03811162000ca957600435013660238201121562000ca957600462000333910135806101805262002c61565b9062000343604051928362002b94565b610180518252602082016101c052610180516101605160043501906024369160051b8301011162000ca15760240160e052825b6101805160051b610160516004350190602460e0519183010181101562000ebd57356101e08190526001600160401b03811162000ca95760609101360360231901126200020257620003cf604051806101205262002b06565b620003e960246101e05161016051600435010101620029d8565b610120515260446101e0516101605160043501010135602681101562000ca55760206101205101526101e0516101605160043501016064810135806101005260018060401b03811162000ca957610100910136036023190112620002025762000459604051806101405262002b22565b610100516101e051610160516004350101016001600160401b0360248201351162000ca55762000493906024369181810135010162004925565b6101405152610100516101e05161016051600435010101916001600160401b0360448401351162000ca5573660436044850135850101121562000ca557620004e5602460448501358501013562002c61565b90620004f5604051928362002b94565b6024604485013585010135825260208201906044850135610100516101e05161016051600435010101013660446024818901358901013560051b8301011162000db457604401915b60446024818801358801013560051b81880135610100516101e051610160516004350101010101018310156200058857602080916200057c85620049b0565b8152019201916200053d565b50610140516020019290925250610100516101e051610160519395600435909401010192506001600160401b0360648401351162000ca1573660436064850135850101121562000ca157602460648401358401013590620005e98262002c61565b90620005f9604051928362002b94565b828252602082016064860135610100516101e05161016051600435010101013660448660051b8301011162000bb157604401905b6064870135610100516101e051610160516004350101010160448660051b8201018310156200074f576001600160401b038335116200074b5760e083358201360360431901126200074b5760405191620006878362002acd565b6001600160401b038435830160440135116200074757620006b436604486358501818101350101620049be565b835283358201606481013560208501526084810135604085015260a48101356060850152620006e69060c401620049b0565b60808401526001600160401b038435830160e40135116200074757602092839262000736906101049062000727368935830160e48101350160440162002f77565b60a085015287350101620049b0565b60c08201528152019101906200062d565b8980fd5b8880fd5b50505092935090506040610140510152610100516101e05161016051600435010101608481013560c05260018060401b0360848201351162000ca1573660436084830135830101121562000ca157608481013501602401356080819052620007ca90620007bc9062002c61565b604051806101a05262002b94565b6101a051608051905260206101a051019160805160051b60c051610100516101e051610160516004350101010190604436918301011162000db45760440160a052929091905b60805160051b60c051610100516101e0516101605160043501010101604460a0519282010182101562000cad576001600160401b0382351162000ca95760e082359091013603604319011262000ca557604051926200086f8462002acd565b6044823560c051610100516101e0516101605160043501010101010135600681101562000ca15784526064823560c051610100516101e05161016051600435010101010101356020850152813560c051610100516101e0516101605160043501010101019360018060401b0360848601351162000ca1573660636084870135870101121562000ca1576200090d604460848701358701013562002c61565b956200091d604051978862002b94565b6044608487013587010135875260208701906084870135853560c051610100516101e05161016051600435010101010101366064604460848b01358b01013560051b8301011162000c9d57606401915b60c051610100516101e051610160516004350101010186350160848901359081019089016044013560051b810160640184101562000bb5576001600160401b0384351162000bb15760c0843582013603606319011262000bb15760405190620009d68262002ab1565b8435810160648101358352600560849091013510156200074b578435810160848101356020840152600460a49091013510156200074b578435810160a4810135604084015260c481013560608401526001600160401b0360e490910135116200074b5762000a51368635830160e481013501606401620049be565b60808301526001600160401b03853582016101040135116200074b5760808535820161010481013501360360631901126200074b576040519062000a958262002a7f565b6001600160401b0386358201610104810135016064013511620007475762000ad136606461010489358501908101350181810135010162004925565b82526001600160401b0386358201610104810135016084013511620007475762000b0f36873583016101048101350160848101350160640162004a24565b60208301526001600160401b03863582016101048101350160a4013511620007475762000b5036873583016101048101350160a48101350160640162004aaf565b60408301526001600160401b03863582016101048101350160c4013511620007475760209384939092909162000b9b9036908935016101048101350160c48101350160640162002f77565b606082015260a08201528152019201916200096d565b8780fd5b50509550509091929594604082015260a4833560c051610100516101e05161016051600435010101010101356060820152823560c051610100516101e0516101605160043501010101019260018060401b0360c48501351162000c9d5761010462000c819162000c326020966044369160c4810135010162002f77565b608085015262000c5d60e4823560c051610100516101e05161016051600435010101010101620049b0565b60a08501523560c051610100516101e05161016051600435010101010101620049b0565b60c082015281520191602060a0510160a0529291909162000810565b8680fd5b8380fd5b5080fd5b8280fd5b50506101a0516101405160600152610100516101e0516101605194956004359095010101929091506001600160401b0360a48401351162000ca55736604360a4850135850101121562000ca55762000d0f602460a48501358501013562002c61565b9062000d1f604051928362002b94565b602460a4850135850101358252602082019060a4850135610100516101e0516101605160043501010101366044602460a48901358901013560051b8301011162000db457604401915b610100516101e0516101605160043501010160a48701359081019087016024013560051b0160440183101562000db85760058335101562000db457823581526020928301920162000d68565b8480fd5b509350509290926080610140510152610100516101e0516101605160043501010160018060401b0360c48201351162000ca15762000e01906024369160c4810135010162004a24565b6101405160a00152610100516101e051610160516004350101016001600160401b0360e48201351162000ca15762000e44906024369160e4810135010162004aaf565b60c0610140510152610100516101e051610160516004350101016101048101359060018060401b03821162000db457602462000e84923692010162002f77565b60e0610140510152610140516040610120510152610120516101c0515260206101c051016101c052602060e0510160e052909162000376565b60208401858152849084600435604401356001600160401b03811162000ca55762000ef090600436918135010162002f77565b604084015282516001600160a01b03919062000f4990831662000f4062000f2162000f1b33620335e4565b62004ba8565b62000f3962000f33878a5116620335e4565b62004c0e565b9062004c65565b90331462004cac565b8251805182101562000fb6579062000faa62000fb0928462000f6d84339362004d46565b5151161462000fa362000f8462000f1b33620335e4565b62000f3962000f338862000f9a888c5162004d46565b515116620335e4565b9062004cac565b62004cdf565b62000f49565b62000fda62000fc5866200677e565b60405191829160208352602083019062002e26565b0390f35b503462000202576040366003190112620002025760209060ff906040906001600160a01b036200100d620029bc565b168152613f778452818120602435825284522054166040519015158152f35b503462000202576020366003190112620002025760c06200104f6004356200621c565b93604093919351958652602086015260408501526060840152608083015260a0820152f35b503462000202578060031936011262000202576020613f7254604051908152f35b50346200020257806003193601126200020257613f7590815491620010ba8362002c61565b91620010ca604051938462002b94565b8383526020938484018093835285832083915b838310620011475750505050604051928484019085855251809152604084019460408260051b8601019392955b828710620011185785850386f35b90919293828062001136600193603f198a8203018652885162002e26565b96019201960195929190926200110a565b600188819260409a99979a516200116c8162001164818962002cb6565b038262002b94565b81520192019201919096939596620010dd565b50346200020257602036600319011262000202576020906040906001600160a01b03620011ab620029bc565b168152611f4783522054604051908152f35b50346200020257602036600319011262000202576020620011e06004356200610a565b604051908152f35b5034620002025760203660031901126200020257604062001243916004358152613f76602052206200121a816200370e565b9060ff600782015491600960088201549101549060405195869560a0875260a087019062003273565b93602086015260408501526200125f606085018383166200350e565b60081c16151560808301520390f35b5034620002025760208060031936011262000ca557604051620012918162002ae9565b60405192620012a08462002b06565b80845260609384848201528460408201528252838383015283604083015283808301528360808301528060a08301528060c08301528060e083015280610100809301526004358152613f768352604090209160405192620013018462002ae9565b6200130c816200370e565b84526200131c600382016200351c565b8483019081529262001331600483016200351c565b604086019081529562001347600584016200351c565b868201908152926200135c600682016200351c565b956080880196875260078201549660a0890197885260088301549260c08a01938452600901549560e08a019460ff8816620013989087620052db565b868b019760081c60ff16151588526040519b8c9b8a8d52518c6101209b8c9101526101408d01620013c99162003273565b9451601f198d8703810160408f015295620013e49162002fcf565b905191858d830301908d0152620013fb9162002fcf565b905190838b82030160808c0152620014139162002fcf565b9051918982030160a08a01526200142a9162002fcf565b955160c08801525160e08701525190850162001446916200350e565b511515908301520390f35b5034620002025760203660031901126200020257600435906103e8821015620014ce575060031b6001810154600282015491620014c46005620014a560068401549362001164604051809481930162002cb6565b6040519485948552602085015260806040850152608084019062002e26565b9060608301520390f35b634e487b7160e01b81526032600452602490fd5b50346200020257806003193601126200020257611f42805490620015068262002c61565b9162001516604051938462002b94565b808352602083019184526020842084925b828410620016e4578585611f43805490620015428262002c61565b9362001552604051958662002b94565b82855260208501918152602081209080925b8484106200159a576200158b8662000fda89604051938493604085526040850190620030b7565b908382036020850152620030b7565b604051620015a88162002acd565b620015b860ff85541682620035e5565b60018401546020820152600284018054620015d38162002c61565b91620015e3604051938462002b94565b81835285526020808620869184015b8383106200165d57505050506001928260209260406006950152600387015460608201526040516200162d81620011648160048c0162002cb6565b608082015260ff6005880154818116151560a084015260081c16151560c082015281520193019301929162001564565b600190602060405191620016718362002ab1565b84548352838501549260ff8416620016898162002fc4565b8382015260ff600894851c16620016a08162002a18565b604082015260028601546060820152620016bd600387016200351c565b6080820152620016d060048701620036ac565b60a0820152815201920192019190620015f2565b604051620016f28162002acd565b6200170260ff84541682620035e5565b6001808401546020830152600284019081546200171f8162002c61565b926200172f604051948562002b94565b8184528a526020808b208b9185015b838310620017aa5750505050506001928260209260406006950152600386015460608201526040516200177a81620011648160048b0162002cb6565b608082015260ff6005870154818116151560a084015260081c16151560c082015281520192019301929062001527565b8490602060405191620017bd8362002ab1565b84548352838501549260ff8416620017d58162002fc4565b8382015260ff600894851c16620017ec8162002a18565b60408201526002860154606082015262001809600387016200351c565b60808201526200181c60048701620036ac565b60a08201528152019201920191906200173e565b50346200020257602036600319011262000202576020906040906001600160a01b036200185c620029bc565b168152611f4583522054604051908152f35b5034620002025760208060031936011262000ca5578160043591620018b14784111562000fa36200189f86620050f5565b620018aa47620050f5565b9062004d8e565b3382526200191c611f45808352620018f5604085205486111562000fa3620018d988620050f5565b338852848752620018ee6040892054620050f5565b9062004dfa565b3384528083526200190b856040862054620050ba565b929062000fa3620018d988620050f5565b3384528252806040842055156200195e575b508080809381811562001954575b3390f115620019485780f35b604051903d90823e3d90fd5b506108fc6200193c565b9050611f46805491620019718362004e62565b918593865b81811062001a645750506200198b8462004e62565b805192906001600160401b03841162001a50579080849392620019b18a98979662004ff7565b0191865280862090865b84811062001a31575050505050825b828110620019da5750506200192e565b9192509062001a279062000faa6001600160a01b03620019fb838662004d46565b511662001a088362004eb6565b90919082549060031b9160018060a01b03809116831b921b1916179055565b90849291620019ca565b83516001600160a01b03168184015589975092810192600101620019bb565b634e487b7160e01b88526041600452602488fd5b62001a6f8162004eb6565b90546001600160a01b03916003913391831b1c83160362001a9e575b505062001a989062004cdf565b62001976565b9662001ace91839862001ab562001a989562004eb6565b9054911b1c1662001ac7828962004d46565b5262004cdf565b95903862001a8b565b50346200020257806003193601126200020257613f7080546001600160a01b03191633179055613f73805460ff19166001908117909155604051909190819062001b218162002b3f565b5290611f428054600082558062001e31575b508252818060405162001b468162002b3f565b5262001e1d57611f438054600082558062001d9e575b508252612710613f745562001d9062001b7462005bee565b836040519162001b848362002b3f565b81835262001c866040519162001b9a8362002b3f565b8383526040519462001bac8662002b3f565b8486526040519362001bbe8562002b3f565b8585526040519462001bd08662002b3f565b8686526040519162001be28362002a7f565b8252602097888301526040820152606094858201526040519162001c068362002ab1565b8683526003888401528660408401528686840152608083015260a082015262001c2f8262004cef565b5262001c3b8162004cef565b506040519062001c4b8262002acd565b6004825287868301526040820152838382015260405162001c6c8162002b3f565b84815260808201528660a08201528660c082015262005cfa565b62001c9062005bee565b60405162001c9e8162002b3f565b83815260405162001caf8162002b3f565b84815260405162001cc08162002b3f565b85815260405162001cd18162002b3f565b8681526040519162001ce38362002b3f565b8783526040519362001cf58562002a7f565b8452888401526040830152848201526040519162001d138362002ab1565b8583526003878401528560408401528585840152608083015260a082015262001d3c8262004cef565b5262001d488162004cef565b50856040519462001d598662002acd565b60058652850152604084015282015260405162001d768162002b3f565b84815260808201528260a08201528360c082015262005d46565b611388611faf55611fb05580f35b92506006838102938185040362001e075760009382855260208520908101905b81811062001dce57505062001b5c565b8086849255868682015562001de66002820162005504565b86600382015562001dfa6004820162005399565b8660058201550162001dbe565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b82526041600452602482fd5b92506006838102938185040362001e075760009382855260208520908101905b81811062001e6157505062001b33565b8086849255868682015562001e796002820162005504565b86600382015562001e8d6004820162005399565b8660058201550162001e51565b503462000202578060031936011262000202576020604051338152f35b5034620002025780600319360112620002025762001ed462002bb8565b6040519162001ee38362002b22565b611faf548352611fb0549060209182850152611fb1546040850152611fb254606085015260405180611fb390848254918281520191845284842090845b8181106200202c575050508162001f3991038262002b94565b6080850152611fb4805462001f4e8162002c61565b9162001f5e604051938462002b94565b818352835283832083908584015b83831062001ffe575050505060a085015260405180928391611fb591808354928381520192855280852094905b82821062001fda5750505062001fb29250038262002b94565b60c083015260ff611fb65416151560e083015262000fda611fb7546040519384938462002ead565b85546001600160a01b03168452600195860195879550938101939091019062001f99565b60018781926040999899516200201a8162001164818962002cb6565b81520192019201919095949562001f6c565b82546001600160a01b03168452928601926001928301920162001f20565b5034620002025760203660031901126200020257600435906103e8821015620014ce5762000fda6200208260048460031b0162002c03565b6040519182918262002a39565b50346200020257806003193601126200020257604051611f4180548083529083526020808301937f68ffef30f3d6829c9938575e8bc340aa2a3398e927d767947dd5024d1581d59292915b828210620020f55762000fda85620020828189038262002b94565b83546001600160a01b031686529485019460019384019390910190620020da565b5034620002025760209081600319360112620002025760409062002139620029bc565b8160608451620021498162002a7f565b82815286810183905285810182905201526001600160a01b03168152611f40835220604051906200217a8262002a7f565b620021f581549160ff83161515845260ff8585019360081c1615158352600260405191620021b983620021b1816001850162002cb6565b038462002b94565b6040860192835201549260608501938452604051958695818752511515908601525115156040850152516080606085015260a084019062002e26565b905160808301520390f35b50346200020257602036600319011262000202576020620011e060043562005e1c565b50346200020257806003193601126200020257611faf546200227c6200224862033044565b916200225a6127109384831062004cac565b62002272611fb254611fb054111562000fa3620330b2565b611fb15462005eb0565b90506200228862033108565b50825b6103e88110620022b0575b6020620022a685858504620061de565b9050604051908152f35b909260ff60078360031b01541615620022fa5781620022e4620022f092620022dd62000faa969562005e1c565b906200608f565b949062000fa362033108565b929091926200228b565b929062002296565b50346200020257604036600319011262000202576001600160401b0360043581811162000ca9576200233990369060040162002f77565b916024359182116200020257602062002362846200235b366004870162002f77565b9062006518565b6040519015158152f35b503462000202578060031936011262000202576040516200238d8162002b3f565b604051613f0383825b606482106200252557505050620023ad8162002b5b565b815260405191620023be8362002b22565b613f67548352613f68549060209182850152613f69546040850152613f6a54606085015260405180613f6b90848254918281520191845284842090845b8181106200250757505050816200241491038262002b94565b6080850152613f6c8054620024298162002c61565b9162002439604051938462002b94565b818352835283832083908584015b838310620024d9575050505060a085015260405180928391613f6d91808354928381520192855280852094905b828210620024b5575050506200248d9250038262002b94565b60c083015260ff613f6e5416151560e083015262000fda613f6f546040519384938462002ead565b85546001600160a01b03168452600195860195879550938101939091019062002474565b6001878192604099989951620024f58162001164818962002cb6565b81520192019201919095949562002447565b82546001600160a01b031684529286019260019283019201620023fb565b600160208192855481520193019101909162002396565b5034620002025760208060031936011262000ca5576004356200256b4782111562000fa36200189f84620050f5565b33835282808080611f4794858752620025b0604083205482111562000fa36200259484620050f5565b338652898b52620025a96040872054620050f5565b906200526f565b338252858752620025f0620025ca826040852054620050ba565b919062000fa3620025db85620050f5565b3387528a8c52620025a96040882054620050f5565b338352868852604083205581811562002758575b3390f1156200274d57338352815260408220541562002621575080f35b611f48805491620026328362004e62565b918493855b818110620026f35750506200264c8462004e62565b805192906001600160401b038411620026df5781906200266c8562004fbc565b0191865280862090865b848110620026c3575050505050825b828110620026935750505080f35b620026bd9062000faa6001600160a01b03620026b0838662004d46565b511662001a088362004e9a565b62002685565b83516001600160a01b0316838201559281019260010162002676565b634e487b7160e01b87526041600452602487fd5b620026fe8162004e9a565b90546001600160a01b03916003913391831b1c8316036200272d575b5050620027279062004cdf565b62002637565b966200274491839862001ab5620027279562004e9a565b9590386200271a565b6040513d84823e3d90fd5b506108fc62002604565b50346200020257806003193601126200020257604051611f4680548083529083526020808301937f721f0813146d89d6f0f0dbb1451dd10acd9dadea7c30d73459c3079bc665b9a892915b828210620027c85762000fda85620020828189038262002b94565b83546001600160a01b031686529485019460019384019390910190620027ad565b50346200020257604036600319011262000202576004356024356001600160a01b0381169081900362000ca9576103e88210156200283b579160036040926020948352811b0183522054604051908152f35b634e487b7160e01b83526032600452602483fd5b50346200020257806003193601126200020257604051611f4880548083529083526020808301937f54b856f7ae688db523226c6d190d6c3f1578f46968ba7de0cc9e487420dbf24c92915b828210620028b55762000fda85620020828189038262002b94565b83546001600160a01b0316865294850194600193840193909101906200289a565b50346200020257806003193601126200020257602060ff613f73541660405190620029018162002a18565b8152f35b5034620002025760209081600319360112620002025762002925620029bc565b6200292f620052e8565b506001600160a01b03168152611f498252604080822090519190620029548362002b3f565b60405193849192915b606483106200298757610c808587620029768162002b5b565b8152620002006040518092620029ed565b600182819286548152019401920191926200295d565b90503462000ca5578160031936011262000ca557602090613f71548152f35b600435906001600160a01b0382168203620029d357565b600080fd5b35906001600160a01b0382168203620029d357565b516000915b6064831062002a0057505050565b600190825181526020809101920192019190620029f2565b6004111562002a2357565b634e487b7160e01b600052602160045260246000fd5b6020908160408183019282815285518094520193019160005b82811062002a61575050505090565b83516001600160a01b03168552938101939281019260010162002a52565b608081019081106001600160401b0382111762002a9b57604052565b634e487b7160e01b600052604160045260246000fd5b60c081019081106001600160401b0382111762002a9b57604052565b60e081019081106001600160401b0382111762002a9b57604052565b61012081019081106001600160401b0382111762002a9b57604052565b606081019081106001600160401b0382111762002a9b57604052565b61010081019081106001600160401b0382111762002a9b57604052565b602081019081106001600160401b0382111762002a9b57604052565b610c8081019081106001600160401b0382111762002a9b57604052565b604081019081106001600160401b0382111762002a9b57604052565b601f909101601f19168101906001600160401b0382119082101762002a9b57604052565b6040519062002bc78262002b3f565b60405182611f4b6000835b6064821062002bec5750505062002be98262002b5b565b52565b600160208192855481520193019101909162002bd2565b9060405191828154918282526020928383019160005283600020936000905b82821062002c3d5750505062002c3b9250038362002b94565b565b85546001600160a01b03168452600195860195889550938101939091019062002c22565b6001600160401b03811162002a9b5760051b60200190565b90600182811c9216801562002cab575b602083101462002c9557565b634e487b7160e01b600052602260045260246000fd5b91607f169162002c89565b906000929180549162002cc98362002c79565b91828252600193848116908160001462002d30575060011462002ced575b50505050565b90919394506000526020928360002092846000945b83861062002d1b57505050500101903880808062002ce7565b80548587018301529401938590820162002d02565b9294505050602093945060ff191683830152151560051b0101903880808062002ce7565b90815462002d628162002c61565b9260409362002d748551918262002b94565b828152809460208092019260005281600020906000935b85851062002d9b57505050505050565b6001848192845162002db38162001164818a62002cb6565b81520193019401939162002d8b565b90815180825260208080930193019160005b82811062002de3575050505090565b83516001600160a01b03168552938101939281019260010162002dd4565b60005b83811062002e155750506000910152565b818101518382015260200162002e04565b9060209162002e418151809281855285808601910162002e01565b601f01601f1916010190565b908082519081815260208091019281808460051b8301019501936000915b84831062002e7c5750505050505090565b909192939495848062002e9c600193601f198682030187528a5162002e26565b980193019301919493929062002e6b565b93929162002ebf85610ca093620029ed565b610cc080610c808701528151908601526020810151610ce08601526040810151610d008601526060810151610d2086015260e062002f4b62002f146080840151610100610d408a0152610dc089019062002dc2565b62002f3460a085015191610cbf1992838b830301610d608c015262002e4d565b9060c08501519089830301610d808a015262002dc2565b9101511515610da0860152930152565b6001600160401b03811162002a9b57601f01601f191660200190565b81601f82011215620029d35780359062002f918262002f5b565b9262002fa1604051948562002b94565b82845260208383010111620029d357816000926020809301838601378301015290565b6005111562002a2357565b90815180825260208080930193019160005b82811062002ff0575050505090565b83518552938101939281019260010162002fe1565b90815180825260208092019182818360051b82019501936000915b848310620030315750505050505090565b90919293949584806200304d83856001950387528a5162002fcf565b980193019301919493929062003020565b90815180825260208092019182818360051b82019501936000915b8483106200308a5750505050505090565b9091929394958480620030a683856001950387528a5162002dc2565b980193019301919493929062003079565b90815180825260208092019081926005928183851b82019601946000915b848310620030e7575050505050505090565b90919293949596818103835287519060e0808201835190600682101562002a235783929189945283850151848401528a60409182870151938386015283518091528561010082818801941b87010194019260005b8281106200319a5750505050509282916200317060019560608085015190840152608080850151908483039085015262002e26565b9160a08082015115159083015260c0809101511515910152990193019301919594939290620030d5565b91939596806200325f600193959760ff198b82030189528951908151815283820151620031c78162002fc4565b8482015287820151620031da8162002a18565b888201526060908183015182820152816200324f6200323e6200322d6080620032108189015160c080848a015288019062002fcf565b9560a0809901519881880391015287519080875286019062002e4d565b888701518582038a87015262003005565b8b8601518482038d8601526200305e565b9301519181840391015262002e26565b970195019101918b9695949391926200313b565b90606081019160018060a01b03815116825260208101519260606020840152835180915260808301602060808360051b86010195019160005b818110620032d55750505050906040620032d29392015190604081840391015262002e26565b90565b858703607f19018352835180516001600160a01b031688526020810151949793949293919290602682101562002a2357604091602084015201519060606040820152620033318251610100606084015261016083019062002e4d565b602083810151838303605f190160808501528051808452928201929101906000905b808210620034f3575050506040830151605f198383030160a0840152805180835260208301906020808260051b86010193019360005b8281106200346e57505050506060840151838203605f190160c0850152620033b29250620030b7565b608083015190605f198382030160e0840152602080835192838152019201906000905b8082106200344a575050506200343d8360209360e0620034266200340e879660a060019a0151605f198683030161010087015262003005565b60c0850151848203605f19016101208601526200305e565b92015190610140605f198285030191015262002e26565b98019401929101620032ac565b9091926020806001928651620034608162002fc4565b8152019401920190620033d5565b90919293602080600192601f19868203018852885190620034d76200349c835160e080855284019062002fcf565b8484015185840152604084015160408401526060840151606084015260808401511515608084015260a084015183820360a085015262002e26565b60c0928301511515919092015297019695019392910162003389565b90919260208060019286511515815201940192019062003353565b90600382101562002a235752565b9060405191828154918282526020928383019160005283600020936000905b828210620035545750505062002c3b9250038362002b94565b8554845260019586019588955093810193909101906200353b565b906040516200357e8162002acd565b60c060ff6006839562003591816200351c565b85526001810154602086015260028101546040860152600381015460608601528260048201541615156080860152604051620035d68162001164816005860162002cb6565b60a08601520154161515910152565b600682101562002a235752565b908154620036008162002c61565b9262003610604051948562002b94565b818452600090815260208082208186015b84841062003630575050505050565b600183819262003640856200351c565b81520192019301929062003621565b9081546200365d8162002c61565b926200366d604051948562002b94565b818452600090815260208082208186015b8484106200368d575050505050565b60018381926200369d8562002c03565b8152019201930192906200367e565b9060036060604051620036bf8162002a7f565b6200370a8195620036d08162002d54565b8352620036e060018201620035f2565b6020840152620036f3600282016200364f565b6040840152620021b1604051809681930162002cb6565b0152565b906040516200371d8162002b06565b82546001600160a01b03168152600183018054919384929091620037418262002c61565b9162003751604051938462002b94565b80835260208301916000526020600020916000905b828210620037935750505050916200370a6040926002946020840152620021b18451809681930162002cb6565b604051620037a18162002b06565b84546001600160a01b038116825260a01c60ff16602681101562002a23576020820152604051620037d28162002b22565b620037e06001870162002d54565b815260028601604051808260208294549384815201906000526020600020926000905b80601f83011062004753576200393c9454918181106200473c575b81811062004722575b81811062004708575b818110620046ee575b818110620046d5575b818110620046bb575b818110620046a1575b81811062004687575b8181106200466d575b81811062004653575b81811062004639575b8181106200461f575b81811062004605575b818110620045eb575b818110620045d1575b818110620045b7575b8181106200459d575b81811062004583575b81811062004569575b8181106200454f575b81811062004535575b8181106200451b575b81811062004501575b818110620044e7575b818110620044cd575b818110620044b3575b81811062004499575b8181106200447f575b81811062004465575b8181106200444b575b81811062004431575b1062004420575b50038262002b94565b6020820152600386018054620039528162002c61565b9162003962604051938462002b94565b81835260208301906000526020600020906000905b838210620043ff57505050506040820152600486018054620039998162002c61565b91620039a9604051938462002b94565b81835260208301906000526020600020906000905b838210620042af57505050506060820152600586016040519081602082549182815201916000526020600020906000915b81601f84011062003fa65784600997946020979460019a979462003b3594549181811062003f88575b81811062003f67575b81811062003f46575b81811062003f25575b81811062003f05575b81811062003ee4575b81811062003ec3575b81811062003ea2575b81811062003e81575b81811062003e60575b81811062003e3f575b81811062003e1e575b81811062003dfd575b81811062003ddc575b81811062003dbb575b81811062003d9a575b81811062003d79575b81811062003d58575b81811062003d37575b81811062003d16575b81811062003cf5575b81811062003cd4575b81811062003cb3575b81811062003c92575b81811062003c71575b81811062003c50575b81811062003c2f575b81811062003c0e575b81811062003bed575b81811062003bcc575b81811062003bab575b1062003b905750038262002b94565b608082015262003b4860068a01620035f2565b60a082015262003b5b60078a016200364f565b60c082015260405162003b7781620011648160088e0162002cb6565b60e0820152604082015281520194019101909262003766565b90889160f81c62003ba18162002fc4565b8152013862003933565b928a8d9160ff8560f01c1662003bc18162002fc4565b815201930162003b26565b928a8d9160ff8560e81c1662003be28162002fc4565b815201930162003b1d565b928a8d9160ff8560e01c1662003c038162002fc4565b815201930162003b14565b928a8d9160ff8560d81c1662003c248162002fc4565b815201930162003b0b565b928a8d9160ff8560d01c1662003c458162002fc4565b815201930162003b02565b928a8d9160ff8560c81c1662003c668162002fc4565b815201930162003af9565b928a8d9160ff8560c01c1662003c878162002fc4565b815201930162003af0565b928a8d9160ff8560b81c1662003ca88162002fc4565b815201930162003ae7565b928a8d9160ff8560b01c1662003cc98162002fc4565b815201930162003ade565b928a8d9160ff8560a81c1662003cea8162002fc4565b815201930162003ad5565b928a8d9160ff8560a01c1662003d0b8162002fc4565b815201930162003acc565b928a8d9160ff8560981c1662003d2c8162002fc4565b815201930162003ac3565b928a8d9160ff8560901c1662003d4d8162002fc4565b815201930162003aba565b928a8d9160ff8560881c1662003d6e8162002fc4565b815201930162003ab1565b928a8d9160ff8560801c1662003d8f8162002fc4565b815201930162003aa8565b928a8d9160ff8560781c1662003db08162002fc4565b815201930162003a9f565b928a8d9160ff8560701c1662003dd18162002fc4565b815201930162003a96565b928a8d9160ff8560681c1662003df28162002fc4565b815201930162003a8d565b928a8d9160ff8560601c1662003e138162002fc4565b815201930162003a84565b928a8d9160ff8560581c1662003e348162002fc4565b815201930162003a7b565b928a8d9160ff8560501c1662003e558162002fc4565b815201930162003a72565b928a8d9160ff8560481c1662003e768162002fc4565b815201930162003a69565b928a8d9160ff8560401c1662003e978162002fc4565b815201930162003a60565b928a8d9160ff8560381c1662003eb88162002fc4565b815201930162003a57565b928a8d9160ff8560301c1662003ed98162002fc4565b815201930162003a4e565b928a8d9160ff8560281c1662003efa8162002fc4565b815201930162003a45565b928a8d9160ff85831c1662003f1a8162002fc4565b815201930162003a3c565b928a8d9160ff8560181c1662003f3b8162002fc4565b815201930162003a33565b928a8d9160ff8560101c1662003f5c8162002fc4565b815201930162003a2a565b928a8d9160ff8560081c1662003f7d8162002fc4565b815201930162003a21565b928a8d9160ff851662003f9b8162002fc4565b815201930162003a18565b926001610400602092865460ff811662003fc08162002fc4565b825260ff8160081c1662003fd48162002fc4565b8583015260ff8160101c1662003fea8162002fc4565b604083015260ff8160181c16620040018162002fc4565b606083015260ff81861c16620040178162002fc4565b608083015260ff8160281c166200402e8162002fc4565b60a083015260ff8160301c16620040458162002fc4565b60c08301526200405b60ff8260381c1662002fc4565b60ff8160381c1660e083015260ff8160401c16620040798162002fc4565b61010083015260ff8160481c16620040918162002fc4565b61012083015260ff8160501c16620040a98162002fc4565b61014083015260ff8160581c16620040c18162002fc4565b61016083015260ff8160601c16620040d98162002fc4565b61018083015260ff8160681c16620040f18162002fc4565b6101a083015260ff8160701c16620041098162002fc4565b6101c083015260ff8160781c16620041218162002fc4565b6101e083015260ff8160801c16620041398162002fc4565b61020083015260ff8160881c16620041518162002fc4565b61022083015260ff8160901c16620041698162002fc4565b61024083015260ff8160981c16620041818162002fc4565b61026083015260ff8160a01c16620041998162002fc4565b61028083015260ff8160a81c16620041b18162002fc4565b6102a083015260ff8160b01c16620041c98162002fc4565b6102c083015260ff8160b81c16620041e18162002fc4565b6102e083015260ff8160c01c16620041f98162002fc4565b61030083015260ff8160c81c16620042118162002fc4565b61032083015260ff8160d01c16620042298162002fc4565b61034083015260ff8160d81c16620042418162002fc4565b61036083015260ff8160e01c16620042598162002fc4565b61038083015260ff8160e81c16620042718162002fc4565b6103a083015260ff8160f01c16620042898162002fc4565b6103c083015260f81c6200429d8162002fc4565b6103e0820152019401920191620039ef565b604051620042bd8162002acd565b620042cd60ff85541682620035e5565b60018401546020820152600284018054620042e88162002c61565b91620042f8604051938462002b94565b81835260208301906000526020600020906000905b8382106200437857505050506001928260209260406006950152600387015460608201526040516200434881620011648160048c0162002cb6565b608082015260ff6005880154818116151560a084015260081c16151560c0820152815201930191019091620039be565b6001906020604051916200438c8362002ab1565b85548352838601549260ff8416620043a48162002fc4565b8382015260ff600894851c16620043bb8162002a18565b604082015260028701546060820152620043d8600388016200351c565b6080820152620043eb60048801620036ac565b60a08201528152019301910190916200430d565b6007602060019262004411866200356f565b81520193019101909162003977565b60f81c151581526020013862003933565b92602060019160ff8560f01c16151581520193016200392c565b92602060019160ff8560e81c161515815201930162003923565b92602060019160ff8560e01c16151581520193016200391a565b92602060019160ff8560d81c161515815201930162003911565b92602060019160ff8560d01c161515815201930162003908565b92602060019160ff8560c81c1615158152019301620038ff565b92602060019160ff8560c01c1615158152019301620038f6565b92602060019160ff8560b81c1615158152019301620038ed565b92602060019160ff8560b01c1615158152019301620038e4565b92602060019160ff8560a81c1615158152019301620038db565b92602060019160ff8560a01c1615158152019301620038d2565b92602060019160ff8560981c1615158152019301620038c9565b92602060019160ff8560901c1615158152019301620038c0565b92602060019160ff8560881c1615158152019301620038b7565b92602060019160ff8560801c1615158152019301620038ae565b92602060019160ff8560781c1615158152019301620038a5565b92602060019160ff8560701c16151581520193016200389c565b92602060019160ff8560681c161515815201930162003893565b92602060019160ff8560601c16151581520193016200388a565b92602060019160ff8560581c161515815201930162003881565b92602060019160ff8560501c161515815201930162003878565b92602060019160ff8560481c16151581520193016200386f565b92602060019160ff8560401c161515815201930162003866565b92602060019160ff8560381c16151581520193016200385d565b92602060019160ff8560301c161515815201930162003854565b92602060019160ff8560281c16151581520193016200384b565b92602060019160ff85831c161515815201930162003842565b92602060019160ff8560181c161515815201930162003839565b92602060019160ff8560101c161515815201930162003830565b92602060019160ff8560081c161515815201930162003827565b92602060019160ff8516151581520193016200381e565b916020919350610400600191865460ff81161515825260ff8160081c1615158583015260ff8160101c161515604083015260ff816060828260181c161515818601528282608082828c1c16151581890152828260281c16151560a0890152828260c095828260301c161515878c0152828260381c16151560e08c0152828260401c1615156101008c0152828260481c1615156101208c0152828260501c1615156101408c0152828260581c1615156101608c01521c161515610180890152828260681c1615156101a0890152828260701c1615156101c0890152828260781c1615156101e08901521c161515610200860152828260881c161515610220860152828260901c161515610240860152828260981c161515610260860152828260a01c161515610280860152828260a81c1615156102a0860152828260b01c1615156102c0860152828260b81c1615156102e08601521c16151561030083015260ff8160c81c16151561032083015260ff8160d01c16151561034083015260ff8160d81c16151561036083015260ff8160e01c16151561038083015260ff8160e81c1615156103a083015260ff8160f01c1615156103c083015260f81c15156103e082015201940192018492939162003803565b9080601f83011215620029d357813590620049408262002c61565b9262004950604051948562002b94565b828452602092838086019160051b83010192808411620029d357848301915b848310620049805750505050505090565b82356001600160401b038111620029d3578691620049a48484809489010162002f77565b8152019201916200496f565b35908115158203620029d357565b81601f82011215620029d357803591620049d88362002c61565b92620049e8604051948562002b94565b808452602092838086019260051b820101928311620029d3578301905b82821062004a14575050505090565b8135815290830190830162004a05565b9080601f83011215620029d35781359062004a3f8262002c61565b9262004a4f604051948562002b94565b828452602092838086019160051b83010192808411620029d357848301915b84831062004a7f5750505050505090565b82356001600160401b038111620029d357869162004aa384848094890101620049be565b81520192019162004a6e565b9080601f83011215620029d35781359162004aca8362002c61565b9260409262004adc8451958662002b94565b8185526020938486019185600594851b86010194818611620029d357868101935b86851062004b1057505050505050505090565b84356001600160401b038111620029d357820183603f82011215620029d357888101359062004b3f8262002c61565b9162004b4e8751938462002b94565b808352868b8401918a1b83010191868311620029d35791878c94929593015b81811062004b8657505082935081520194019362004afd565b91938091939562004b9784620029d8565b8152019101918b9391949262004b6d565b9062002c3b604560405180947f496e76616c69642070726f6772616d20616464726573732e204d73672e73656e60208301526403232b91d160dd1b604083015262004bfd815180926020868601910162002e01565b810103602581018552018362002b94565b9062002c3b6040805180947f2c20616e642070726f6772616d206f70657261746f7220616464726573733a20602083015262004c54815180926020868601910162002e01565b810103602081018552018362002b94565b602062002c3b91939293604051948162004c89879351809286808701910162002e01565b820162004c9f8251809386808501910162002e01565b0103808552018362002b94565b1562004cb55750565b60405162461bcd60e51b81526020600482015290819062004cdb90602483019062002e26565b0390fd5b600019811462001e075760010190565b80511562004cfd5760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101562004cfd5760400190565b80516002101562004cfd5760600190565b80516003101562004cfd5760800190565b805182101562004cfd5760209160051b010190565b7f496e76616c696420776974686472617720616d6f756e742e20416d6f756e743a8152600160fd1b602082015260210190565b600f62002c3b916020949360405195869262004dbe62004db083860162004d5b565b918281519485920162002e01565b016e0161030b732103130b630b731b29d1608d1b815262004de9825180936020878501910162002e01565b010360101981018552018362002b94565b601962002c3b916020949360405195869262004e1c62004db083860162004d5b565b01780161030b732103bb4ba34323930bbb0b136329031b0b9b41d1603d1b815262004e51825180936020878501910162002e01565b010360061981018552018362002b94565b9062004e6e8262002c61565b62004e7d604051918262002b94565b828152809262004e90601f199162002c61565b0190602036910137565b611f48805482101562004cfd5760005260206000200190600090565b611f46805482101562004cfd5760005260206000200190600090565b611f41805482101562004cfd5760005260206000200190600090565b613f02805482101562004cfd5760005260206000200190600090565b611f4a805482101562004cfd5760005260206000200190600090565b613efe805482101562004cfd5760005260206000200190600090565b613f00805482101562004cfd5760005260206000200190600090565b805482101562004cfd5760005260206000200190600090565b8181029291811591840414171562001e0757565b919082549060031b91821b91600019901b1916179055565b81811062004faf575050565b6000815560010162004fa3565b600160401b811162002a9b57611f489081549080835581811062004fdf57505050565b62002c3b926000526020600020918201910162004fa3565b600160401b811162002a9b57611f469081549080835581811062004fdf57505050565b805460008255806200502a575050565b62002c3b9160005260206000209081019062004fa3565b600160401b811162002a9b57613efe9081549080835581811062004fdf57505050565b600160401b811162002a9b57613f009081549080835581811062004fdf57505050565b611fb5805460008255806200502a575050565b90600160401b811162002a9b5781549080835581811062004fdf57505050565b9190828111620050cb576001920390565b50600091508190565b8115620050df570490565b634e487b7160e01b600052601260045260246000fd5b6000908072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8082101562005260575b506904ee2d6d415b85acef8160201b8083101562005250575b50662386f26fc100008083101562005240575b506305f5e1008083101562005230575b506127108083101562005220575b5060648210156200520f575b600a8092101562005204575b60019081602181860195620051918762002f5b565b96620051a1604051988962002b94565b808852620051b2601f199162002f5b565b01366020890137860101905b620051cb575b5050505090565b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304918215620051fe57919082620051be565b620051c4565b91600101916200517c565b919060646002910491019162005170565b6004919392049101913862005164565b6008919392049101913862005156565b6010919392049101913862005146565b6020919392049101913862005133565b6040935081049150386200511a565b601e62002c3b91602094936040519586926200529162004db083860162004d5b565b017f2c20616e6420776974686472617761626c65206469766964656e64733a2000008152620052ca825180936020878501910162002e01565b010360011981018552018362002b94565b600382101562002a235752565b60405190620052f78262002b3f565b60405182620053068262002b5b565b610c8036833752565b906200531b8262002c61565b6040906200532c8251918262002b94565b83815280936200533f601f199162002c61565b019160005b838110620053525750505050565b6020908251620053628162002acd565b6000815282600081830152606080868401526000818401526080830152600060a0830152600060c083015282860101520162005344565b620053a5815462002c79565b9081620053b0575050565b81601f60009311600114620053c3575055565b908083918252620053e4601f60208420940160051c84016001850162004fa3565b5555565b8054906000815581620053f9575050565b6000526020600020908101905b81811062005412575050565b806200542060019262005399565b0162005406565b90600160401b811162002a9b578154918181558282106200544757505050565b600052602060002091820191015b81811062005461575050565b806200546f60019262005399565b0162005455565b805490600081558162005487575050565b6000526020600020908101905b818110620054a0575050565b80620054ae6001926200501a565b0162005494565b90600160401b811162002a9b57815491818155828210620054d557505050565b600052602060002091820191015b818110620054ef575050565b80620054fd6001926200501a565b01620054e3565b8054600091828155816200551757505050565b6001600160fd1b0382168203620055a45782526020822091600391821b8301925b838110620055465750505050565b808260089255826001820155826002820155620055658482016200501a565b6200557360048201620053e8565b620055816005820162005476565b6200558f6006820162005476565b6200559d6007820162005399565b0162005538565b634e487b7160e01b83526011600452602483fd5b600160401b821162002a9b57805490828155818310620055d757505050565b6001600160fd1b03828116830362001e07578316830362001e0757600090815260208120600392831b810193831b015b838110620056155750505050565b808260089255826001820155826002820155620056348482016200501a565b6200564260048201620053e8565b620056506005820162005476565b6200565e6006820162005476565b6200566c6007820162005399565b0162005607565b51600681101562002a235790565b90600681101562002a235760ff80198354169116179055565b90620056a68162002fc4565b60ff80198354169116179055565b90620056c08162002a18565b61ff0082549160081b169061ff001916179055565b9190601f8111620056e557505050565b62002c3b926000526020600020906020601f840160051c8301931062005714575b601f0160051c019062004fa3565b909150819062005706565b81519192916001600160401b03811162002a9b576200574b8162005744845462002c79565b84620056d5565b602080601f83116001146200578a5750819293946000926200577e575b50508160011b916000199060031b1c1916179055565b01519050388062005768565b90601f198316958460005282600020926000905b888210620057d957505083600195969710620057bf575b505050811b019055565b015160001960f88460031b161c19169055388080620057b5565b806001859682949686015181550195019301906200579e565b9060ff801983541691151516179055565b9061ff00825491151560081b169061ff001916179055565b8151600681101562002a235762005833908262005681565b602082015160018201556002810160408301516020815191620058578385620055b8565b01916000526020600020916000905b828210620058b857505050509060c0600562002c3b9360608401516003820155620058996080850151600483016200571f565b0191620058ad60a0820151151584620057f2565b015115159062005803565b805180518555620058f860018601620058e16020840151620058da8162002fc4565b826200569a565b604083015190620058f28262002a18565b620056b4565b60608101516002860155608081015180519060038701906001600160401b03831162002a9b576020906200592d84846200509a565b0190600052602060002060005b83811062005bd9575050505060a001518051805190600487019060209062005963848462005427565b01906000526020600020906000905b83821062005bb957505050506005850160208201516020815191620059988385620054b5565b019160005260206000206000925b82841062005b5557505050506006850160408201516020815191620059cc8385620054b5565b019160005260206000206000925b82841062005ae85750505050606001518051906001600160401b03821162002a9b5762005a1a8262005a10600789015462002c79565b60078901620056d5565b602090601f831160011462005a6d57928260089360209360019660009262005a61575b5050600019600383901b1c191690851b1760078801555b0194019101909262005866565b01519050388062005a3d565b906007870160005260206000209160005b601f198516811062005acf575083602093600196938793600897601f1981161062005ab5575b505050811b01600788015562005a54565b015160001960f88460031b161c1916905538808062005aa4565b9192602060018192868501518155019401920162005a7e565b80518051906001600160401b03821162002a9b5760209062005b0b83866200509a565b0183600052602060002060005b83811062005b37575050505060016020819201920193019290620059da565b82516001600160a01b03168183015560209092019160010162005b18565b80518051906001600160401b03821162002a9b5760209062005b7883866200509a565b0183600052602060002060005b83811062005ba4575050505060016020819201920193019290620059a6565b60019060208451940193818401550162005b85565b600160208262005bcc839451876200571f565b0193019101909162005972565b6001906020845194019381840155016200593a565b60409081519162005bff8362002b78565b60018352829160005b60208082101562005c725783516020929162005c248262002ab1565b60008252600081830152600086830152606060008184015280608084015286519062005c508262002a7f565b808252808383015280888301528082015260a083015282880101520162005c08565b505091925050565b611f43805482101562004cfd576000526006602060002091020190600090565b613efb805482101562004cfd576000526006602060002091020190600090565b611f42805482101562004cfd576000526006602060002091020190600090565b613efa805482101562004cfd576000526006602060002091020190600090565b611f428054600160401b81101562002a9b5762005d1d9160018201905562005cba565b91909162005d305762002c3b916200581b565b634e487b7160e01b600052600060045260246000fd5b611f438054600160401b81101562002a9b5762005d1d9160018201905562005c7a565b613efb8054600160401b81101562002a9b5762005d1d9160018201905562005c9a565b613efa8054600160401b81101562002a9b5762005d1d9160018201905562005cda565b1562005db757565b60405162461bcd60e51b815260206004820152603760248201527f73756d4469766964656e64576569676874466f72546f6b656e436c6173733a206044820152766469766964656e64576569676874206f766572666c6f7760481b6064820152608490fd5b6103e881101562004cfd5762005e4a8162005e436002620032d29460031b01549162005f36565b9062005eb0565b919062005daf565b6103e881101562004cfd5762005e4a8162005e43611fba620032d29460031b01549162005fe5565b90811562005ea757606462005e938184029384620050d4565b0362005e9f5760019190565b600091508190565b60019150600090565b9190821562005ec85762005e938184029384620050d4565b5060019150600090565b1562005eda57565b60405162461bcd60e51b815260206004820152602e60248201527f746f74616c546f6b656e73506572546f6b656e436c6173733a20746f74616c5460448201526d6f6b656e73206f766572666c6f7760901b6064820152608490fd5b6103e8811015908162004cfd57600390811b906004928383019182549260009582879601935b85871062005f6e575050505050505090565b97969091929394959762005fd05762005fc48862005fbc62005f9662000faa9a9b8762004f5e565b905490881b1c6001600160a01b031660009081526020899052604081205490946200608f565b999062005ed2565b95949392919062005f5c565b603282634e487b7160e01b6000525260246000fd5b6103e8811015908162004cfd5790600391821b90611fbc820190815490600094611fbb869501915b8386106200601e5750505050505090565b9590919293949562004cfd576200607186620060696200604362000faa998962004f5e565b905490861b1c6001600160a01b031660009081526020879052604081205490946200608f565b989062005ed2565b94939291906200600d565b906001820191821062005e9f5760019190565b9190820191821062005e9f5760019190565b15620060a957565b60405162461bcd60e51b815260206004820152603360248201527f73756d566f74696e67576569676874466f72546f6b656e436c6173733a20766f60448201527274696e67576569676874206f766572666c6f7760681b6064820152608490fd5b6103e881101562004cfd57620061318162005e436001620032d29460031b01549162005f36565b9190620060a1565b6103e881101562004cfd57620061318162005e43611fb9620032d29460031b01549162005fe5565b611faf54620061736200224862033044565b9190506200618062033108565b5060009081925b6103e88410620061a4575b6200619f935004620061de565b905090565b9160ff60078560031b01541615620061d75783620022e4620061d092620022dd62000faa969762005e1c565b9262006187565b9162006192565b908015620061f657620061f191620050d4565b600191565b5050600090600090565b9190820180921162001e0757565b9190820391821162001e0757565b906107b2906301e1853e80840483810180821162001e07576001820181811162001e0757604583019082821162001e075760646200625f92049060021c6200620e565b9561017183019682881162001e075762006280906101908099049062006200565b9084840294848604148415171562001e075762015180948583029280840487149015171562001e0757620062c092620062b99162006200565b906200620e565b91600495869108159586620064df575b506040516101a081016001600160401b03811182821017620064ca57604052600c9687825261018080366020850137601f91826200630e8562004cef565b5215620064c05760ff601d5b16620063268462004d13565b5281620063338462004d24565b52601e620063418462004d35565b528251881015620064ab578160a0840152825160051015620064ab57601e60c0840152825160061015620064ab578160e0840152825160071015620064ab5781610100840152825160081015620064ab57601e610120840152825160091015620064ab57816101408401528251600a1015620064ab57601e6101608401528251600b1015620064ab57820152600096905b81881062006426575b50508282049460018601809611620064115760018701809711620064115750949392603c80610e10809585060494840604920690565b601190634e487b7160e01b6000525260246000fd5b90969262006435848362004d46565b51858102908082048714901517156200648e578110620064a3576200645b848362004d46565b5190858202918083048714901517156200648e5762006486916200647f916200620e565b9362004cdf565b9690620063d2565b601188634e487b7160e01b6000525260246000fd5b9296620063db565b603288634e487b7160e01b6000525260246000fd5b60ff601c6200631a565b604187634e487b7160e01b6000525260246000fd5b909550606486061590811591620064fa575b509438620062d0565b905085061538620064f1565b90815181101562004cfd570160200190565b908151815111620065cf576000905b6200653683518251906200620e565b8211620065c75760019260005b8251811015620065bc576001600160f81b0319806200656e62006567848862006200565b8562006506565b5116906200657d838662006506565b5116036200659657620065909062004cdf565b62006543565b5092509060005b620065b457620065ad9062004cdf565b9062006527565b505050600190565b50929190916200659d565b505050600090565b5050600090565b611f4680549190600160401b83101562002a9b578262001a0891600162002c3b9501905562004eb6565b611f4a80549190600160401b83101562002a9b578262001a0891600162002c3b9501905562004f0a565b611fb5805490600160401b82101562002a9b576001820180825582101562004cfd576000908152602090200180546001600160a01b0319166001600160a01b03909216919091179055565b611fb3805490600160401b82101562002a9b576001820180825582101562004cfd576000908152602090200180546001600160a01b0319166001600160a01b03909216919091179055565b611f4180549190600160401b83101562002a9b578262001a0891600162002c3b9501905562004ed2565b60405190620066f98262002b78565b60188252772a343290383937b3b930b69034b99032bc32b1baba32b21760411b6020830152565b604051906200672f8262002b06565b603a82527930b33a32b9103b37ba34b7339030b7321030b8383937bb30b61760311b6040837f5468652070656e64696e672070726f6772616d2069732065786563757465642060208201520152565b90600091825b60208083019081518051871015620069155781620067a788620067af9362004d46565b510162007387565b6026928382101562002a2357601a9182036200686d5787620067d2915162004d46565b5192828401519081101562002a2357036200682b5750936200681c6200682492620068146200680d60a0604062000faa9a0151015162004cef565b5162004cef565b51906200608f565b959062007395565b9262006784565b6064906040519062461bcd60e51b82526004820152601b60248201527a2a34329037b831b7b2329034b9903737ba102820acafa1a0a9a41760291b6044820152fd5b929190506200688681620067a789869a979a5162004d46565b8281101562002a2357601403620068bf575050906200681c62000faa95620022dd620068b88462006824965162004d46565b51620073e2565b620068d190620067a785855162004d46565b9081101562002a2357601514620068ef575b50620068249062004cdf565b906200681c6200690e95620022dd620068b88462006824965162004d46565b90620068e3565b5050509092508034106000146200698b5760405162461bcd60e51b815260206004820152603760248201527f546865207061796d656e74206973206e6f7420656e6f7567682e205468652074604482015276037ba30b6103830bcb6b2b73a1039b437bab6321031329604d1b6064820152608490fd5b8034116200720c575b50613f739182549260ff841693620069ac8562002a18565b600194808603620069e657505050620069dc919250620069d6620069d08262007479565b62007550565b620075da565b620032d2620066ea565b620069f18162002a18565b600281148080620071ff575b1562006e285750505062006a11826200748e565b1562006de95762006a22826200748e565b1562006dad5762006a5b90602080930190600260ff8560018060a01b0362006a4b865162004cef565b5151169460409687915162004cef565b510151015192541662006a6e8162002a18565b0362006d6d5781600052613f778085528360002092613f7880549485600052875260ff86600020541662006d2f5783519480600052613f7693848952600396878960002001540362006cc95783600052885286600020906000528752856000208960ff19825416179055886000905b62006b27575b505050505050742a3432903b37ba329034b99032bc32b1baba32b21760591b9192935062006b1062032533565b519162006b1d8362002b78565b6015835282015290565b845181101562006cc35786825480600052858a5262006b4c8389846000200162004f5e565b905490891b1c908a84888b62006b63838d62004d46565b511562006c2157505050505062006bc662006ba685549283600052888d52620022dd62006b9887600480986000200162004f5e565b9054908d1b1c91896203241d565b9092600052878c5262006bbf85858d6000200162004f5e565b9062004f8b565b1562006bdf575062006bd89062004cdf565b8962006add565b875162461bcd60e51b8152908101899052601c60248201527b766f74696e6720666f7220706f776572596573206f766572666c6f7760201b6044820152606490fd5b9062006c5e62006c7096620022dd87999462006bbf979860005284895262006c5187600580986000200162004f5e565b9054911b1c918d6203241d565b959097600052528c6000200162004f5e565b1562006c815762006bd89062004cdf565b865162461bcd60e51b815260048101899052601b60248201527a766f74696e6720666f7220706f7765724e6f206f766572666c6f7760281b6044820152606490fd5b62006ae3565b875162461bcd60e51b8152600481018a9052603960248201527f746865206e756d626572206f6620766f74657320646f6573206e6f74206d6174604482015278636820746865206e756d626572206f6620706f6c696369657360381b6064820152608490fd5b855162461bcd60e51b81526004810188905260176024820152761d9bdd195c881a185cc8185b1c9958591e481d9bdd1959604a1b6044820152606490fd5b825162461bcd60e51b8152600481018590526019602482015278766f74696e67206973206e6f7420696e2070726f677265737360381b6044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e76616c696420766f74652070726f6772616d60601b6044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2103b37ba34b73390383937b3b930b69760491b6044820152606490fd5b62006e3882979495969762002a18565b60038214918280620071f2575b1562006ec75750505050505062006e5c81620074f5565b1562006e775762006e6d906202f2b7565b620032d262006720565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c696420657865637574696e672070656e64696e672070726f677261604482015261369760f11b6064820152608490fd5b62006ed28162002a18565b8180620071e4575b80620071d7575b156200710157505050509060ff9062006ef962032745565b54169062006f078262002a18565b810362006fc5575062006f1a8162007479565b1562006f345780620069d6620069d0620069dc9362007479565b60405162461bcd60e51b815260206004820152605f60248201527f54686520766f74696e672069732072656a656374656420616e64206e6f77204460448201527f41524320697320696e2069646c652073746174652e2054686520696e7075742060648201527f70726f6772616d206973206e6f7420612076616c69642070726f6772616d2e00608482015260a490fd5b8062006fd360039262002a18565b146200700c57505b60405162006fe98162002b78565b6013815272283937b3b930b6903a32b936b4b730ba32b21760691b602082015290565b6200701781620074f5565b15620070285762006e6d906202f2b7565b60405162461bcd60e51b815260206004820152609960248201527f54686520766f74696e672069732070617373656420616e64206e6f772044415260448201527f4320697320696e20657865637574696e672070656e64696e672073746174652e60648201527f2054686520696e7075742070726f6772616d206973206e6f7420612076616c6960848201527f6420455845435554455f50454e44494e475f50524f4752414d20746f2065786560a48201527831baba32903a3432903832b73234b73390383937b3b930b69760391b60c482015260e490fd5b6200710c8162002a18565b8215620071c2575b505080620071b4575b6200712c575050505062006fdb565b60ff19161790556200713e8162007479565b15620071585780620069d6620069d0620069dc9362007479565b60405162461bcd60e51b815260206004820152602e60248201527f5b4572726f72203030335d5468652070726f6772616d206973206e6f7420612060448201526d3b30b634b210383937b3b930b69760911b6064820152608490fd5b50613f72544210156200711d565b620071cf91925062002a18565b388062007114565b50613f7254421062006ee1565b50613f715442101562006eda565b50613f7254421062006e45565b50613f71544210620069fd565b60018060a01b039081845116600052611f4590816020526040600020541562007302575b6200723c9034620050ba565b9015620072be576200725f9083865116600052826020526040600020546200608f565b9290156200727d578451166000526020526040600020553862006994565b60405162461bcd60e51b81526020600482015260196024820152782a3432903732bb903130b630b731b29037bb32b9333637bb9760391b6044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527b2a3432903830bcb6b2b73a103932ba3ab9371037bb32b9333637bb9760211b6044820152606490fd5b611f4654939291906000805b86811062007344575b506200723c92939495501562007330575b905062007230565b6200733e84875116620065d6565b62007328565b84620073508262004eb6565b919054818b51169260031b1c161462007374576200736e9062004cdf565b6200730e565b5093945084935060016200723c62007317565b51602681101562002a235790565b156200739d57565b60405162461bcd60e51b815260206004820152601f60248201527f54686520746f74616c207061796d656e7420697320746f6f206c617267652e006044820152606490fd5b906000805b6040840160a0620073fc818351015162004d13565b51518410156200747157926200681c62007461604094620074598562007451866200743f8b620074468362000faa9f9e6200743f90620074679e51015162004d13565b5162004d46565b519451015162004d24565b519062005eb0565b929062007395565b6200608f565b91929050620073e7565b509093505050565b6020015151156200748957600190565b600090565b602001516001815103620074b257620074ab620032d29162004cef565b51620074b8565b50600090565b6020810151602681101562002a2357602003620074b2576040015160a081015151620074b25760c081015151620074b25751516200748957600190565b602001516001815103620074b25762007512620032d29162004cef565b516020810151602681101562002a2357602103620074b2576040015160a081015151620074b25760c081015151620074b25751516200748957600190565b156200755857565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c69642070726f6772616d60881b6044820152606490fd5b60809060208152602a60208201527f5468652070726f6772616d2069732064656e6965642062792074686520706c7560408201526967696e2073797374656d60b01b60608201520190565b620075e58162015182565b5162014c9357600681101562002a23576003811462014c3a5780620076425760405162461bcd60e51b8152602060048201526016602482015275151a19481c1c9bd9dc985b481a5cc81a5b9d985b1a5960521b6044820152606490fd5b600481036200b0db5750600080611f4a54905b8181106200b094575b5050156200b078575b60005b60209081830151918251821015620076cf57620076c181611f49620076a7620076a162000faa95620067a788620076c99a62004d46565b62033353565b9160018060a01b03885116600052526040600020620242c3565b429162004f8b565b6200766a565b50505060005b60208083015180518310156200771d57620076fa91620067a784620076a19362004d46565b90606482101562004cfd5762007717914290611f4b015562004cdf565b620076d5565b505050906000905b602083015180518310156200b0725782620077409162004d46565b516020810180516026908181101562002a2357156200b02f5781518181101562002a23576001036200798e5750506040809101906200778460c08351015162004cef565b5192620077a660a06200779b818651015162004cef565b519451015162004d13565b5195620077b785518551146202df8a565b620077c685518851146202dff0565b60005b85518110156200790c57620077df818662004d46565b516103e8908181101562004cfd57600160ff6007620078079360031b0154161515146202e052565b62007813828a62004d46565b5162007820838862004d46565b51908282101562004cfd5760066200783e9260031b0154906200608f565b906200784b848962004d46565b51918383101562004cfd576006620078689360031b01556202e0aa565b62007874828a62004d46565b519062007882838862004d46565b518181101562004cfd576001600160a01b039392620078c29160039086620078ab878e62004d46565b5116600052811b016020528760002054906200608f565b620078ce848a62004d46565b519283101562004cfd57600362000faa936200790696620078f0878e62004d46565b5116600052811b0160205287600020556202e109565b620077c9565b5093926200792991929650620079229062032f53565b9262032e37565b945192620079378462002b3f565b60008452600036813760005b835181101562007971578062000faa620079626200796b938762004d46565b51878a62032a46565b62007943565b509450926020925062007985915062004cdf565b91905062007725565b81518181101562002a235760020362007c255750506040809101805192835195620079d3620079c260a08097015162004cef565b519562007446818651015162004d13565b5193875186510362007bd257875184510362007b7e57875185510362007b27575060005b855181101562007b115762007a0d818762004d46565b51906103e8918281101562004cfd5762007a3360ff6007809360031b015416156202e162565b62007a3f828962004d46565b518381101562004cfd5760031b01805460ff1916600117905562007a64818a62004d46565b5162007a71828962004d46565b51908382101562004cfd57600562007a8d9260031b016200571f565b62007a99818662004d46565b5162007aa6828962004d46565b518381101562004cfd5760031b6001015562007ac3818762004d46565b5162007ad0828962004d46565b518381101562004cfd5760031b6002015562007aed818862004d46565b519182101562004cfd576000600662007b0b9360031b015562004cdf565b620079f7565b5095509390506020925062007985915062004cdf565b5162461bcd60e51b815260206004820152603c6024820152600080516020620337ec83398151915260448201527b1b911a5d9a59195b9915d95a59da1d081a5cc81b9bdd08195c5d585b60221b6064820152608490fd5b5162461bcd60e51b81526020600482015260396024820152600080516020620337ec8339815191526044820152781b959bdd1a5b99d41bddd95c881a5cc81b9bdd08195c5d585b603a1b6064820152608490fd5b5162461bcd60e51b81526020600482015260386024820152600080516020620337ec8339815191526044820152771b925b99195e105c9c985e481a5cc81b9bdd08195c5d585b60421b6064820152608490fd5b819593949295518181101562002a235760030362008221575050604084019062007c5460c08351015162004cef565b519362007c6b60a06200779b818651015162004cef565b519362007c80865185511462000fa3620331b7565b62007c93865186511462000fa3620331b7565b60005b865181101562007cfc5762007cac818662004d46565b51906103e882101562004cfd57600362007cf69260018060a01b038b5116600052811b0160205262000faa60406000205462007ce9838a62004d46565b51111562000fa3620332bb565b62007c96565b50909493919460005b855181101562007e305762007d1b818662004d46565b51906103e88083101562004cfd57600360018060a01b0393848c5116600052811b0160205262007d5e60406000205462007d56848962004d46565b5190620050ba565b9062007d6b848a62004d46565b51918383101562004cfd57600362007d9a93878f5116600052811b0160205260406000205562000fa3620332bb565b62007da6828862004d46565b518181101562004cfd576003908462007dc0858c62004d46565b5116600052811b0160205262007de160406000205462006814848962004d46565b62007ded848a62004d46565b519283101562004cfd57600362000faa9362007e2a9662007e0f878e62004d46565b5116600052811b0160205260406000205562000fa362033320565b62007d05565b5091509162007e4762007e4e919695949662032f53565b9562032e37565b926040519462007e5e8662002b78565b6001865260203681880137516001600160a01b031662007e7e8662004cef565b526000905b86518210156200820c5762007e99828862004d46565b516104c05262007eaa855162004e62565b9660009462007eba885162004e62565b610ae0528594865b885181101562007f91578a8962007ef26001600160a01b0362007ee6858462004d46565b51166104c05162032d3b565b158062007f4b575b62007f13575b505062007f0d9062004cdf565b62007ec2565b9862007f409162001ac782859c62007f3762007f0d9760018060a01b039262004d46565b51169262004d46565b9790508a8962007f00565b5050506103e86104c051101562004cfd576001600160a01b0362007f70828b62004d46565b511660005260036104c051811b016020528a89604060002054151562007efa565b509098949897969291939760005b885181101562008033576103e86104c051101562004cfd576001600160a01b0362007fcb828b62004d46565b511660005260036104c051811b016020526040600020541562007ffa575b62007ff49062004cdf565b62007f9f565b9962007ff4906200802a906001600160a01b03620080198e8d62004d46565b511662001ac782610ae05162004d46565b9a905062007fe9565b5098509694939291956104c0516103e8811015806107405262004cfd5760031b60040154966200806e62008068878a62006200565b62004e62565b996000998a6104e0525b6107405162004cfd576104e0518a8110156200812d57620080ad620080ca9160006107405260046104c05160031b0162004f5e565b9054610ae05160039290921b1c6001600160a01b03169062032dea565b15620080e9575b620080df6104e05162004cdf565b6104e05262008078565b99808c62001ac762008126936200810d6104e05160046104c05160031b0162004f5e565b905460039190911b1c6001600160a01b03169262004d46565b99620080d1565b509a939794969299919850946000915b838310620081d257505050506107405162004cfd578051906001600160401b03821162002a9b576020906200817c8360046104c05160031b016200509a565b0160046104c05160031b01600052602060002060005b838110620081b45750505050620081a99062004cdf565b909295919562007e83565b82516001600160a01b03168183015560209092019160010162008192565b6200820590620081fe906001600160a01b03620081f0868662004d46565b511662001ac7828962004d46565b9262004cdf565b916200813d565b91945050620079859194506020925062004cdf565b819593949295518181101562002a2357600403620084a9575050604080920160c0946200826262008256878451015162004cef565b51968351015162004d13565b51946200827960a06200779b818651015162004cef565b51936200828e885188511462000fa3620331b7565b620082a1885185511462000fa3620331b7565b620082b4885186511462000fa3620331b7565b60005b88518110156200831c57620082cd818662004d46565b51906103e882101562004cfd5762008316916003906001600160a01b03620082f6848e62004d46565b5116600052811b0160205262000faa886000205462007ce9838a62004d46565b620082b7565b50909691959294939660005b83518110156200845d576200833e818862004d46565b51906103e8918281101562004cfd576001600160a01b03906003908262008366858a62004d46565b5116600052811b01602052620083878b62007d56848b600020549262004d46565b9062008394848c62004d46565b51918583101562004cfd576003620083cd9385620083b3888d62004d46565b5116600052811b016020528a6000205562000fa3620332bb565b620083d9828a62004d46565b518381101562004cfd5760039082620083f3858b62004d46565b5116600052811b01602052620084148b62006814848b600020549262004d46565b91905062008423838b62004d46565b519384101562004cfd57620084579360039162008441858b62004d46565b5116600052811b01602052876000205562004cdf565b62008328565b50946200848092975062007e4791939450620084799062032f53565b9362032e37565b9260005b835181101562007971578062000faa62007962620084a3938762004d46565b62008484565b8195949593929351908082101562002a23576005918203620084db575050506020919262000faa62007985926202ec1a565b82518181101562002a23576006036200874c575050509060408092016200850760c08251015162004cef565b51946200852960a06200851e818551015162004cef565b519351015162004d13565b51928651835103620086fb578651845103620086af5760005b8751811015620085a75762008558818562004d46565b51906103e882101562004cfd57620085a1916003906001600160a01b0362008581848d62004d46565b5116600052811b0160205262000faa876000205462007ce9838962004d46565b62008542565b509092919260005b87518110156200865b57620085c5818662004d46565b516103e88082101562004cfd576001600160a01b03929160039084620085ec858e62004d46565b5116600052811b016020526200860c886000205462007d56848962004d46565b62008618848a62004d46565b519283101562004cfd57600362000faa9362008655966200863b8f889062004d46565b5116600052811b01602052896000205562000fa3620332bb565b620085af565b50959262008670919250620079229062032f53565b9251946200867e8662002b3f565b60008652600036813760005b835181101562007971578062000faa62007962620086a9938762004d46565b6200868a565b845162461bcd60e51b8152602060048201526030602482015260008051602062033aec83398151915260448201526f1b9d1cc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b845162461bcd60e51b815260206004820152603560248201526000805160206203372c8339815191526044820152741b90db185cdcd95cc81a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b82518181101562002a23576007036200889b575050506040809101936200877860c08651015162004cef565b51926200878a60a08751015162004cef565b5195515191620087a2855188511462000fa3620331b7565b60005b855181101562007b1157620088959062000faa6001600160a01b03826002886200887d8e620088728e620088688f89620087e08a8562004d46565b51166000526200881c896200881481611f409a8b6020526200880e60ff8760002054161562000fa362033288565b62004d46565b519662004d46565b51968a6200885283519b8c96620088338862002a7f565b600188526060602089019860008a528781019b8c52019b8c5262004d46565b51166000526020526000209751151588620057f2565b5115158662005803565b51600185016200571f565b519101556200888d838a62004d46565b5116620066c0565b620087a5565b82519596959394928185101562002a235760089485036200899257505050620088cd60c0604080950151015162004cef565b519360005b85518110156200897d5762008977906001600160a01b0380620088f6838a62004d46565b5116600052611f4090816020526200894c60ff620089236001828c600020541615151462000fa3620331e7565b8262008930868d62004d46565b5116600052836020528960002054891c161562000fa36203324f565b62008958838a62004d46565b51166000526020528560002061010061ff001982541617905562004cdf565b620088d2565b50949093506020925062007985915062004cdf565b80518281101562002a235760090362008a6657505050620089bc60c0604080950151015162004cef565b519360005b85518110156200897d5762008a6090866001600160a01b0380620089e6848462004d46565b511660005262008a396001898362008a1b87611f4097886020526200880e8660ff8097600020541615151462000fa3620331e7565b5116600052846020528a600020548a1c1615151462000fa36203321a565b62008a45838a62004d46565b51166000526020528560002061ff0019815416905562004cdf565b620089c1565b809192939597969450518281101562002a2357600a0362008b445750505060408094019162008aab60a062008aa060c08651015162004cef565b519451015162004cef565b519162008ac0845184511462000fa3620331b7565b60005b8451811015620079715762008b3e906001600160a01b038062008ae7838962004d46565b5116600052611f408060205262008b0e600160ff8c600020541615151462000fa3620331e7565b62008b1a838862004d46565b519162008b28848a62004d46565b5116600052602052600289600020015562004cdf565b62008ac3565b80969496518281101562002a2357600b0362008c125750505060408092019362008b7360c08651015162004cef565b519451519162008b8b865184511462000fa3620331b7565b60005b8651811015620079715762008c0c9062000faa6001600160a01b038062008bb6848c62004d46565b5116600052611f408060205262008bdd600160ff8b600020541615151462000fa3620331e7565b62008be9848962004d46565b519162008bf7858d62004d46565b5116600052602052600188600020016200571f565b62008b8e565b80969394929596518281101562002a2357600c0362008d1257505060400160609182825101519362008c44856202d698565b60005b855181101562008cfc5760c062008c6382878751015162004d46565b5101511562008cbf5762008c8762008c8082878751015162004d46565b5162005cfa565b611f425460001981019190821162001e07578762008ca962008cb99362005cba565b5001805460ff1916905562004cdf565b62008c47565b62008cda62008cd382878751015162004d46565b5162005d46565b611f425460001981019190821162001e07578762008ca962008cb99362005c7a565b5095915093506020925062007985915062004cdf565b809695949396518281101562002a2357600d0362008e3657505060400193602062008d4260a08751015162004cef565b51955101519162008d5786518451146202dd8c565b60005b865181101562007971578062008d7562008de5928662004d46565b511562008deb5762008d9862008d8c828a62004d46565b51611f4254116202de15565b62008dc160ff8762008db662008daf858d62004d46565b5162005cba565b50015416156202de6d565b8562008dd262008daf838b62004d46565b5001805460ff1916600117905562004cdf565b62008d5a565b62008e0762008dfb828a62004d46565b51611f4354116202de15565b62008e2560ff8762008db662008e1e858d62004d46565b5162005c7a565b8562008dd262008e1e838b62004d46565b80518281101562002a2357600e0362008ef457505060400193602062008e6160a08751015162004cef565b51955101519162008e7686518451146202dd8c565b60005b865181101562007971578062008e9462008ea0928662004d46565b5162008ea65762004cdf565b62008e79565b62008ec262008eb6828a62004d46565b51611f4254116202dece565b62008ee360ff8762008ed962008daf858d62004d46565b500154166202df27565b8562008ca962008daf838b62004d46565b809693949596518281101562002a2357600f0362008fbf57505060400160609182825101519362008f25856202d698565b60005b855181101562008cfc5760c062008f4482878751015162004d46565b5101511562008f895762008f6162008c8082878751015162004d46565b611f425460001981019190821162001e07578762008dd262008f839362005cba565b62008f28565b62008f9d62008cd382878751015162004d46565b611f425460001981019190821162001e07578762008dd262008f839362005c7a565b8091929394969550518281101562002a235760100362009064575050604001519062008ff460a0608084015193015162004cef565b519362009009835186511462000fa3620331b7565b60005b835181101562009051578062000faa6200902b6200904b938762004d46565b51620090378162002fc4565b62009043838a62004d46565b51906202d55c565b6200900c565b5093509160209150620079859062004cdf565b80959295518281101562002a2357601103620092ed575050906040809401916200909960a062008aa060c08651015162004cef565b5191620090aa84518451146202d510565b60005b845181101562009122576200911c9062000faa6001600160a01b0380620090d5848a62004d46565b5116600052611f4580602052620090f68b6000205462006814868b62004d46565b91909262009105868c62004d46565b51166000526020528a6000205562000fa36203316d565b620090ad565b509394509162009133915062032e37565b90611f46928354946200914c6200806885518862006200565b91600093845b888110620092ad575060005b865181101562009205576000805b8a8110620091b6575b50156200918e575b620091889062004cdf565b6200915e565b946200918890620091ad906001600160a01b03620081f0898b62004d46565b9590506200917d565b620091c18162004eb6565b90546001600160a01b0360039290921b1c811690620091e1858c62004d46565b511614620091fa57620091f49062004cdf565b6200916c565b505060013862009175565b50965094909350620092178362004e62565b805191906001600160401b03831162002a9b57602090620092388462004ff7565b0190600052602060002060005b8381106200928f575050505060005b8281106200926c575050506200798560209162004cdf565b620092899062000faa6001600160a01b03620019fb838662004d46565b62009254565b82516001600160a01b03168183015560209092019160010162009245565b94620092e0620092e791620092c28862004eb6565b905460039190911b1c6001600160a01b031662001ac7828962004d46565b9562004cdf565b62009152565b80518281101562002a23576012036200955c5750506040809401916200931e60a062008aa060c08651015162004cef565b51916200932f84518451146202d510565b60005b845181101562009381576200937b9062000faa6001600160a01b03806200935a848a62004d46565b5116600052611f4580602052620090f68b6000205462007d56868b62004d46565b62009332565b509491509291620093929062032e37565b90611f468054620093a38162004e62565b9260009485925b808410620094575750505050620093c18362004e62565b805191906001600160401b03831162002a9b57602090620093e28462004ff7565b0190600052602060002060005b83811062009439575050505060005b82811062009416575050506200798560209162004cdf565b620094339062000faa6001600160a01b03620019fb838662004d46565b620093fe565b82516001600160a01b031681830155602090920191600101620093ef565b9297600097929597949194998a5b86518110156200954a576200947a8b62004eb6565b90546001600160a01b0360039290921b1c8116906200949a838a62004d46565b511614620094b357620094ad9062004cdf565b62009465565b509950976001979592979491945b806200951a575b15620094e057620094d99062004cdf565b92620093aa565b9562009513620094d991620094f58962004eb6565b905460039190911b1c6001600160a01b031662001ac7828a62004d46565b9662004cdf565b50620095268162004eb6565b60018060a01b0391549060031b1c16600052611f45602052826000205415620094c8565b509998909897959297949194620094c1565b80959295518281101562002a2357601303620095bd57505060408091015101519260005b8451811015620095ac578062000faa6200959f620095a6938862004d46565b516202f24b565b62009580565b509250906200798560209162004cdf565b8051918083101562002a235760149283036200976057505050604080910190620095ec60c08351015162004cef565b51926200960360a06200779b818651015162004cef565b51956200961485518551146202df8a565b6200962385518851146202dff0565b60005b85518110156200970b576200963c818962004d46565b5162009649828762004d46565b516103e8918282101562004cfd5760066200966a9260031b0154906200608f565b9062009677848962004d46565b51918383101562004cfd576006620096949360031b01556202e0aa565b620096a0828a62004d46565b5190620096ae838862004d46565b518181101562004cfd576001600160a01b039392620096d79160039086620078ab878e62004d46565b620096e3848a62004d46565b519283101562004cfd57600362000faa936200970596620078f0878e62004d46565b62009626565b5093926200972191929650620079229062032f53565b9451926200972f8462002b3f565b60008452600036813760005b835181101562007971578062000faa620079626200975a938762004d46565b6200973b565b819694959396518181101562002a2357601590810362009cd7575050505060408401906200979360c08351015162004cef565b5193620097aa60a06200779b818651015162004cef565b5193620097bf865185511462000fa3620331b7565b620097d2865186511462000fa3620331b7565b60005b86518110156200982e57620097eb818662004d46565b51906103e882101562004cfd576003620098289260018060a01b038b5116600052811b0160205262000faa60406000205462007ce9838a62004d46565b620097d5565b50909493919460005b85518110156200993f576200984d818662004d46565b51906103e88083101562004cfd57600360018060a01b0393848c5116600052811b016020526200988860406000205462007d56848962004d46565b9062009895848a62004d46565b51918383101562004cfd576003620098c493878f5116600052811b0160205260406000205562000fa3620332bb565b620098d0828862004d46565b518181101562004cfd5760039084620098ea858c62004d46565b5116600052811b016020526200990b60406000205462006814848962004d46565b62009917848a62004d46565b519283101562004cfd57600362000faa93620099399662007e0f878e62004d46565b62009837565b5091509162007e4762009956919695949662032f53565b9260405194620099668662002b78565b6001865260203681880137516001600160a01b0316620099868662004cef565b526000905b86518210156200820c57620099a1828862004d46565b516103a052620099b2855162004e62565b96600094620099c2885162004e62565b610580528594865b885181101562009a90578a89620099fa6001600160a01b03620099ee858462004d46565b51166103a05162032d3b565b158062009a4a575b62009a1b575b505062009a159062004cdf565b620099ca565b9862009a3f9162001ac782859c62007f3762009a159760018060a01b039262004d46565b9790508a8962009a08565b5050506103e86103a051101562004cfd576001600160a01b0362009a6f828b62004d46565b511660005260036103a051811b016020528a89604060002054151562009a02565b509098949897969291939760005b885181101562009b32576103e86103a051101562004cfd576001600160a01b0362009aca828b62004d46565b511660005260036103a051811b016020526040600020541562009af9575b62009af39062004cdf565b62009a9e565b9962009af39062009b29906001600160a01b0362009b188e8d62004d46565b511662001ac7826105805162004d46565b9a905062009ae8565b5098509694939291956103a0516103e8811015806105c05262004cfd5760031b600401549662009b6762008068878a62006200565b996000998a610200525b6105c05162004cfd57610200518a81101562009c0d5762009ba662009bc39160006105c05260046103a05160031b0162004f5e565b90546105805160039290921b1c6001600160a01b03169062032dea565b1562009be2575b62009bd86102005162004cdf565b6102005262009b71565b99808c62001ac762009c06936200810d6102005160046103a05160031b0162004f5e565b9962009bca565b509a939794969299919850946000915b83831062009cb257505050506105c05162004cfd578051906001600160401b03821162002a9b5760209062009c5c8360046103a05160031b016200509a565b0160046103a05160031b01600052602060002060005b83811062009c94575050505062009c899062004cdf565b90929591956200998b565b82516001600160a01b03168183015560209092019160010162009c72565b62009cd090620081fe906001600160a01b03620081f0868662004d46565b9162009c1d565b82979496959751918083101562002a2357601692830362009d4457505050505060c0604062009d0a920151015162004cef565b519260005b8451811015620095ac5762009d3e9062000faa6001600160a01b0362009d36838962004d46565b511662006675565b62009d0f565b83518181101562002a235760170362009d9d5760405162461bcd60e51b81526020600482015260296024820152600080516020620339cc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b83518181101562002a235760180362009e1057505050505060c0604062009dc8920151015162004cef565b51611fb6805460ff191660011790559260005b8451811015620095ac5762009e0a9062000faa6001600160a01b0362009e02838962004d46565b51166200662a565b62009ddb565b83979697518181101562002a235760190362009f8457505050505060008080604080940160a08082510151805162009f4b575b5050519060e08201519162009e676200680d60c060018060a01b0393015162004cef565b511690602083519301915af1903d1562009f42573d9162009e888362002f5b565b9262009e978351948562002b94565b83523d6000602085013e5b1562009eb75750506200798560209162004cdf565b62004cdb925062009f23815192600080516020620338cc833981519152602085015278039bab1b1b2b9b9b33ab617102932ba3ab937103230ba309d1603d1b8385015283815162009f12816059946020868601910162002e01565b810103603981018552018362002b94565b5162461bcd60e51b815260206004820152918291602483019062002e26565b60609162009ea2565b62009f569062004cef565b515162009f65575b8062009e43565b8192506200680d9062009f7b9251015162004cef565b51903862009f5e565b83518181101562002a2357601a036200a084575050505062009faf60a0604080940151015162004cef565b519062009fc060038351146202d510565b62009fcb8262004cef565b519262009fe462009fdc8462004d13565b519362004d24565b51926200a04a5750509162007985916001602094146000146200a043576200a023906200a016611fb19182546200608f565b90915562000fa362033108565b62000faa611fb26200a03681546200607c565b90915562000fa362033142565b5062004cdf565b60649250519062461bcd60e51b825260206004830152602482015273496e76616c6964207061796d656e74207479706560601b6044820152fd5b909192809450518181101562002a2357601b036200a51957505050505091906200a0c4611faf546200225a6200a0b962033044565b612710831062004cac565b50506200a0d062033108565b506000805b6103e881106200a4a8575b50506200a0ec62006161565b6200a0fa613f745462004e62565b9060009485935b6103e88510156200a49b5760ff60078660031b015416156200a25a5760009560028660031b0154156200a24b57869796975b62004cfd5760048660031b01548810156200a232576200a15b886004600389901b0162004f5e565b600160a01b6001900391549060031b1c1696876000528660031b600301602052604097858960002054906200a1909162005eb0565b99906200a19c62033108565b6200a1a79162004cac565b6000998960031b600201546200a1bd9162005eb0565b91906200a1c962033108565b6200a1d49162004cac565b828b52611f476020528a20908154906200a1ee916200608f565b9091556200a1fb62033108565b6200a2069162004cac565b6200a212828862004d46565b526200a21e9062004cdf565b976200a22a9062004cdf565b97966200a133565b91946200a2429196975062004cdf565b9390946200a101565b91946200a24291965062004cdf565b949592915092505b6200a26d8262004e62565b91600091825b8281106200a40557505050611f48908154926200a29562008068858462006200565b9360009081905b8082106200a3ca57505060005b8381106200a3265750508351939150506001600160401b03831162002a9b576020906200a2d68462004fbc565b0190600052602060002060005b8381106200a3085750505050620079856020916000611fb1556000611fb25562004cdf565b82516001600160a01b0316818301556020909201916001016200a2e3565b6000805b8381106200a382575b50156200a34c575b6200a3469062004cdf565b6200a2a9565b906200a346906200a379906001600160a01b036200a36b858762004d46565b511662001ac7828a62004d46565b9190506200a33b565b6001600160a01b03806200a397858862004d46565b5116906200a3a6838b62004d46565b5116146200a3bf576200a3b99062004cdf565b6200a32a565b50506001386200a333565b9091620081fe6200a3fe916200a3e08562004e9a565b905460039190911b1c6001600160a01b031662001ac7828b62004d46565b906200a29c565b6000805b8581106200a453575b50156200a42b575b6200a4259062004cdf565b6200a273565b926200a425906200a44a906001600160a01b03620081f0878662004d46565b9390506200a41a565b6001600160a01b03806200a468858762004d46565b5116906200a477838a62004d46565b5116146200a490576200a48a9062004cdf565b6200a409565b50506001386200a412565b949592915092506200a262565b806003959394951b9060ff600783015416156200a50e576200a4f86200746162000faa946200a4ec6200a5049560026200a4e28762005e1c565b9101549062005eb0565b929062000fa362033108565b939062000fa362033108565b939291936200a0d5565b50939291936200a0e0565b83518181101562002a2357601c036200a5725760405162461bcd60e51b8152602060048201526029602482015260008051602062033acc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b83518181101562002a2357601d036200a598575b50505050506200798560209162004cdf565b839795969497518181101562002a2357601e036200ae665750505050604084019060a0906200a5cb828451015162004cef565b51516200a5dc838551015162004d13565b5151036200ade9576200a5f3828451015162004cef565b51516200a604838551015162004d24565b5151036200ad6d576200a61b828451015162004cef565b51946200a62c838551015162004d13565b51916200a65d6200a641858751015162004d24565b51946200a652818851015162004cef565b519651015162004d13565b519585518751036200ad0a5760005b86518110156200a6c5576200a682818862004d46565b51906103e882101562004cfd5760036200a6bf9260018060a01b038d5116600052811b0160205262000faa60406000205462007ce9838c62004d46565b6200a66c565b5090969192939660005b86518110156200a76e576200a6e5818862004d46565b516103e881101562004cfd5760039060018060a01b038c5116600052811b016020526200a71d60406000205462007d56838b62004d46565b91906200a72b828a62004d46565b51906103e882101562004cfd576200a76893600362000faa938f60018060a01b03905116600052811b0160205260406000205562000fa3620332bb565b6200a6cf565b5093979550936200a7829096929662032f53565b96604051966200a7928862002b78565b60018852602036818a013786516001600160a01b03166200a7b38962004cef565b52604051966200a7c38862002b3f565b600088526000610460525b895161046051908110156200ab8b576200a7e9908b62004d46565b51610520526200a7fa885162004e62565b996000976200a80a8b5162004e62565b610920528897895b8b518110156200a8d8578d8c6200a8426001600160a01b036200a836858462004d46565b51166105205162032d3b565b15806200a892575b6200a863575b50506200a85d9062004cdf565b6200a812565b9b6200a8879162001ac782859f62007f376200a85d9760018060a01b039262004d46565b9a90508d8c6200a850565b5050506103e861052051101562004cfd576001600160a01b036200a8b7828e62004d46565b5116600052600361052051811b016020528d8c60406000205415156200a84a565b50909b989a99949691929395979b60005b8b518110156200a97d576103e861052051101562004cfd576001600160a01b036200a915828e62004d46565b5116600052600361052051811b01602052604060002054156200a944575b6200a93e9062004cdf565b6200a8e9565b9c6200a9746200a93e918f6200a9638f9160018060a01b039262004d46565b511662001ac7826109205162004d46565b9d90506200a933565b509a9b509895969193969490929461052051996103e88b10159b8c62004cfd578d9b60031b600401549d6200a9b3908f62006200565b6200a9be9062004e62565b6103205260006108c0528c6000610640525b62004cfd57610640519c8e8e10156200aa8e57506200aa1c6200a9ff60009e60046105205160031b0162004f5e565b90546109205160039290921b1c6001600160a01b03169062032dea565b156200aa3c575b8c6200aa326106405162004cdf565b610640526200a9d0565b6200aa546106405160046105205160031b0162004f5e565b60018060a01b0391549060031b1c166200aa756108c0516103205162004d46565b526200aa846108c05162004cdf565b6108c0526200aa23565b939d509396999094979b50999094979960005b8281106200ab3f5750505062004cfd5761032051516001600160401b03811162002a9b576200aada8160046105205160031b016200509a565b602061032051019060046105205160031b0160005260206000209160005b8281106200ab2157505050506200ab126104605162004cdf565b6104605295989094986200a7ce565b81516001600160a01b0316818501556020909101906001016200aaf8565b6200ab85906001600160a01b036200ab58828562004d46565b51166200ab6c6108c0516103205162004d46565b526200ab7b6108c05162004cdf565b6108c05262004cdf565b6200aaa1565b5094929750929750939450600094855b87518110156200ac0b576200abce6200abc66200abb9838962004d46565b5162007451848d62004d46565b91906202f07a565b806200abe7575b506200abe19062004cdf565b6200ab9b565b906200abfc6200ac04986200abe1936200608f565b98906202f0c7565b906200abd5565b509650945092909150806200ac2f575b5050620079856020915b913880806200a586565b6200ac629060018060a01b038351166000526200ac5a611f459182602052604060002054906200608f565b92906202f120565b60018060a01b03835116600052602052604060002055600080611f4654905b8181106200acc0575b5050916200798591602093156200aca4575b50916200ac1b565b516200acb9906001600160a01b0316620065d6565b386200ac9c565b6200accb8162004eb6565b9054855160039290921b1c6001600160a01b039081169116146200acfa576200acf49062004cdf565b6200ac81565b506001915082905060206200ac8a565b60405162461bcd60e51b815260206004820152603560248201527f546865206c656e677468206f6620746f6b656e436c61737320616e6420746f6b604482015274195b905b5bdd5b9d081a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b60405162461bcd60e51b81526020600482015260596024820152600080516020620339ec83398151915260448201527f642070726963654172726179206973206e6f7420657175616c2061742042415460648201527810d217d095549397d513d2d15394d7d0539117d49151955391603a1b608482015260a490fd5b60405162461bcd60e51b815260206004820152605a6024820152600080516020620339ec83398151915260448201527f6420616d6f756e744172726179206973206e6f7420657175616c2061742042416064820152791510d217d095549397d513d2d15394d7d0539117d4915195539160321b608482015260a490fd5b839794969597518181101562002a2357601f036200aeaa57505050506020916200aea46200ae9d6040620079859401515162004cef565b516202f281565b6200ac25565b83518181101562002a23576020036200aed0575b5050505050620079856020916200ac25565b83518181101562002a235760218091036200aeed575b506200aebe565b8451828110156200b01a576022036200af2d5750505050505062007985602091611fb660ff1981541690556200af2262005087565b91388080806200aee6565b8451828110156200b01a576023036200af54575b505050505050620079856020916200af22565b845194828610156200b01a5760248096036200af72575b506200af41565b8051838110156200b006576025146200af6b5751918210156200aff25750036200afb65750506020916200afaa62007985926202e1ae565b9138808080806200af6b565b60405162461bcd60e51b8152602060048201529182015275496e76616c6964206f7065726174696f6e207479706560501b604482015260649150fd5b8490634e487b7160e01b6000526004526000fd5b8683634e487b7160e01b6000526004526000fd5b50634e487b7160e01b60005260045260246000fd5b60405162461bcd60e51b815260206004820152601b60248201527a13dc195c985d1a5bdb881d1e5c19481a5cc81d5b9919599a5b9959602a1b6044820152606490fd5b50915050565b80516200b08e906001600160a01b031662006600565b62007667565b6200b09f8162004f0a565b9054855160039290921b1c6001600160a01b039081169116146200b0ce576200b0c89062004cdf565b62007655565b505050600138806200765e565b600281036200b0ff5760405162461bcd60e51b81528062004cdb600482016200758f565b6001146200b10a5750565b6200b118611f43546200530f565b805190600160401b821162002a9b57613efb5482613efb5580831062014bbf575b50602001613efb60005260206000206000915b83831062014b9e575050505060005b611f43548110156200b194578062000faa6200b17b6200b18e9362005c7a565b506200b1878362005c9a565b90620150c9565b6200b15b565b506200b1a3611f42546200530f565b805190600160401b821162002a9b57613efa5482613efa5580831062014b02575b50602001613efa60005260206000206000915b83831062014ae1575050505060005b611f42548110156200b218578062000faa6200b2066200b2129362005cba565b506200b1878362005cda565b6200b1e6565b5060005b6103e8811015806200b3c957600160ff611fbf8460031b0154161515146200b251575b506200b24b9062004cdf565b6200b21c565b916000835b62004cfd57611fbc8360031b01548110156200b2c0576200b2b7929350600092816200b28b8593611fbc8860031b0162004f5e565b9054600391821b1c6001600160a01b031660009081529087901b611fbb01602052604081205562004cdf565b9093926200b256565b5091604051906200b2d18262002b3f565b6000825262004cfd578051906001600160401b03821162002a9b576020906200b30283611fbc8660031b016200509a565b01611fbc8360031b01600052602060002060005b8381106200b3ab57505050611fbf600383901b908101805460ff191690556000611fb88201819055611fb98201819055611fba8201819055611fbd90910180546200b24b9493506200b3689062002c79565b601f908181116200b389575b5050556000611fbe8260031b0155906200b23f565b6200b3a39183855260208520910160051c81019062004fa3565b38806200b374565b82516001600160a01b0316818301556020909201916001016200b316565b505060005b6103e8811062014a53575060005b611f41548110156200b43757806200b3f86200b4319262004ed2565b60018060a01b0391549060031b1c16600052613ef860205260006002604082208281556200b4296001820162005399565b015562004cdf565b6200b3dc565b506200b446611f415462004e62565b8051906001600160401b03821162002a9b57600160401b821162002a9b57602090613ef95483613ef95580841062014a31575b5001613ef9600052602060002060005b83811062014a13575050505060005b611f41548110156200b50a576200b4af8162004ed2565b9054613ef95460039290921b1c6001600160a01b0316919081101562004cfd57613ef96000526000805160206203398c833981519152810180546001600160a01b0319169092179091556200b5049062004cdf565b6200b498565b509060005b611f41548110156200b5c957806200b52b6200b57e9262004ed2565b9060018060a01b03918291549060031b1c16600052611f40602052604080600020916200b5588462004ed2565b90549060031b1c16600052613ef8602052600020908082036200b584575b505062004cdf565b6200b50f565b600280916200b5aa60ff6200b59d8184541687620057f2565b825460081c168562005803565b6200b5bc600182016001860162014d65565b015491015538806200b576565b5060005b613f02548110156200b61b57806200b5e96200b6159262004eee565b60018060a01b0391549060031b1c16600052613f0160205262000faa6040600020606481019062004fa3565b6200b5cd565b506200b62a611f4a5462004e62565b8051906001600160401b03821162002a9b57600160401b821162002a9b57602090613f025483613f0255808410620149f1575b5001613f02600052602060002060005b838110620149d3575050505060005b611f4a548110156200b6bf578062000faa6200b69c6200b6b99362004f0a565b905460039190911b1c6001600160a01b031662001a088362004eee565b6200b67c565b5060005b611f4a548110156200b74a57806200b6df6200b7319262004f0a565b9060018060a01b03918291549060031b1c16600052611f49602052604080600020916200b70c8462004f0a565b90549060031b1c16600052613f01602052600020908082036200b73757505062004cdf565b6200b6c3565b6200b742916201514b565b38806200b576565b50611f4b80546000905b60648210620149ba575050611faf54613f675550611fb054613f6855611fb154613f6955611fb254613f6a55611fb3546001600160401b03811162002a9b57600160401b811162002a9b57613f6b5481613f6b558082106201498c575b50613f6b60009081527f0c040229f6fc4874d4176ee508a0872dc89a48e51cc9b61a792006f29e06275480546000805160206203376c83398151915291905b8484106201496a575050505050611fb454600160401b811162002a9b57613f6c5481613f6c5580821062014928575b50613f6c6000908152600080516020620337ac8339815191527fcdf85548d0b3537a0f46212d2994f9493fe1dfa88d3af4ddb0cac3c506fd3f595b8383106201490a575050611fb5549150506001600160401b03811162002a9b57600160401b811162002a9b57613f6d5481613f6d55808210620148dc575b50613f6d60009081527f70c3d981fef3a436e3d026045c487f2278cccbfa7f9e11fbd3c1406b0017bd5d80546000805160206203396c83398151915291905b848410620148ba57505050505060ff611fb65416151560ff8019613f6e5416911617613f6e5560005b613efe548110156200b94a57806200b91c6200b9449262004f26565b905460039190911b1c6001600160a01b03166000908152613efd602052604081205562004cdf565b6200b900565b506200b959611f465462004e62565b8051906001600160401b03821162002a9b576020906200b9798362005041565b01613efe600052602060002060005b8381106201489c575050505060005b611f46548110156200b9da578062000faa6200b9b76200b9d49362004eb6565b905460039190911b1c6001600160a01b031662001a088362004f26565b6200b997565b5060005b611f46548110156200ba4957806200b9fa6200ba439262004eb6565b9060018060a01b03918291549060031b1c16600052611f4560205260408060002054916200ba288462004eb6565b90549060031b1c16600052613efd6020526000205562004cdf565b6200b9de565b5060005b613f00548110156200ba9757806200ba696200ba919262004f42565b905460039190911b1c6001600160a01b03166000908152613eff602052604081205562004cdf565b6200ba4d565b506200baa6611f485462004e62565b8051906001600160401b03821162002a9b576020906200bac68362005064565b01613f00600052602060002060005b8381106201487e575050505060005b611f48548110156200bb27578062000faa6200bb046200bb219362004e9a565b905460039190911b1c6001600160a01b031662001a088362004f42565b6200bae4565b5060005b611f48548110156200bb9657806200bb476200bb909262004e9a565b9060018060a01b03918291549060031b1c16600052611f4760205260408060002054916200bb758462004e9a565b90549060031b1c16600052613eff6020526000205562004cdf565b6200bb2b565b50613f02546000805b82811062014839575b501562014803575b5060005b60208301519081518110156200bc0c5762000faa620076c16200bbe6620076a16020620067a7866200bc069862004d46565b86516001600160a01b03166000908152613f0160205260409020620242c3565b6200bbb4565b505060005b602083015180518210156200bc5957620076a16020620067a7846200bc369462004d46565b90606482101562004cfd576200bc53914290613f03015562004cdf565b6200bc11565b5050906000905b6020810151805183101562010f2357826200bc7b9162004d46565b516020810151602681101562002a2357156200b02f576020810151602681101562002a23576001036200c24d57604001906200bcbc60c08351015162004cef565b51936200bcd360a06200779b818651015162004cef565b51916200bce486518551146202df8a565b6200bcf386518451146202dff0565b60005b86518110156200be51576200bd0c818662004d46565b516103e881101562004cfd57600160ff611fbf6200bd339360031b0154161515146202e052565b6200bd3f818562004d46565b516200bd4c828762004d46565b51906103e882101562004cfd57611fbe6200bd6d9260031b0154906200608f565b906200bd7a838862004d46565b51916103e883101562004cfd57611fbe6200bd9a9360031b01556202e0aa565b6200bda6818562004d46565b516200bdb3828762004d46565b51906103e882101562004cfd576200bdf691611fbb906001600160a01b036200bddd868d62004d46565b511660005260031b01602052604060002054906200608f565b91906200be04828862004d46565b51906103e882101562004cfd576200be4b9362000faa92611fbb906001600160a01b036200be33878f62004d46565b511660005260031b016020526040600020556202e109565b6200bcf6565b50926200be68919250620084799095949562032f53565b916040516200be778162002b3f565b6000815260003681376000945b80518610156200c233576200be9a868262004d46565b516102c0526200beab855162004e62565b966000946200bebb845162004e62565b6105a05260009460005b88518110156200bf8d578a896200bef56001600160a01b036200bee9858462004d46565b51166102c05162032d92565b15806200bf45575b6200bf16575b50506200bf109062004cdf565b6200bec5565b986200bf3a9162001ac782859c62007f376200bf109760018060a01b039262004d46565b9790508a896200bf03565b5050506103e86102c051101562004cfd576001600160a01b036200bf6a828b62004d46565b5116600052611fbb6102c05160031b016020528a8960406000205415156200befd565b50909895979498969291939660005b88518110156200c02b576103e86102c051101562004cfd576001600160a01b03806200bfc9838c62004d46565b5116600052611fbb6102c05160031b01602052604060002054156200bffb575b506200bff59062004cdf565b6200bf9c565b819b6200c023916200c0126200bff5948d62004d46565b511662001ac7826105a05162004d46565b9a906200bfe9565b509850969592919093966102c0516103e8811015806103e05262004cfd5760031b611fbc0154986200c06262008068898c62006200565b6108a0526000610a80526000610ac0525b6103e05162004cfd57610ac0518a8110156200c13c576200c0a96200c0c99160006103e052611fbc6102c05160031b0162004f5e565b90546105a0516001600160a01b03939260031b9190911c83169062032dea565b156200c0e9575b506200c0df610ac05162004cdf565b610ac0526200c073565b60006103e0526200c108610ac051611fbc6102c05160031b0162004f5e565b90549060031b1c166200c122610a80516108a05162004d46565b526200c131610a805162004cdf565b610a8052386200c0d0565b50979294959093985095909560005b8281106200c1e7575050506103e05162004cfd576108a051516001600160401b03811162002a9b576200c18981611fbc6102c05160031b016200509a565b60206108a05101611fbc6102c05160031b01600052602060002060005b8381106200c1c957505050506200c1bd9062004cdf565b9492959091956200be84565b82516001600160a01b0316818301556020909201916001016200c1a6565b6200c22d906001600160a01b036200c200828562004d46565b51166200c214610a80516108a05162004d46565b526200c223610a805162004cdf565b610a805262004cdf565b6200c14b565b5050939092506200c245915062004cdf565b90916200bc60565b906020829493940151602681101562002a23576002036200c404576040809201908151938451916200c2a46200c28860a08098015162004cef565b51966200c299818751015162004d13565b519551015162004d24565b5194835187510362007bd257835185510362007b7e57835186510362007b27575060005b86518110156200c3f1576200c2de818862004d46565b516103e881101562004cfd5760ff611fbf6200c3019260031b015416156202e162565b6200c30d818862004d46565b516103e881101562004cfd5760031b611fbf01805460ff191660011790556200c337818562004d46565b516200c344828962004d46565b51906103e882101562004cfd57611fbd6200c3639260031b016200571f565b6200c36f818662004d46565b516200c37c828962004d46565b516103e881101562004cfd5760031b611fb901556200c39c818762004d46565b516200c3a9828962004d46565b516103e881101562004cfd5760031b611fba01556200c3c9818862004d46565b51906103e882101562004cfd576000611fbe6200c3eb9360031b015562004cdf565b6200c2c8565b509592509350506200c245915062004cdf565b9092916020840151602681101562002a23576003036200ca2a5760408401906200c43360c08351015162004cef565b51906200c44a60a06200779b818651015162004cef565b51936200c45f835185511462000fa3620331b7565b6200c472835186511462000fa3620331b7565b60005b83518110156200c4d0576200c48b818662004d46565b51906103e882101562004cfd57611fbb6200c4ca9260018060a01b038b511660005260031b0160205262000faa60406000205462007ce9838a62004d46565b6200c475565b509095919560005b87518110156200c61e576200c4ee818662004d46565b516103e881101562004cfd57611fbb9060018060a01b0386511660005260031b016020526200c52860406000205462007d56838962004d46565b906200c535838862004d46565b51916103e883101562004cfd57611fbb6200c56e9360018060a01b0389511660005260031b0160205260406000205562000fa3620332bb565b6200c57a818662004d46565b516103e881101562004cfd57611fbb906001600160a01b036200c59e848c62004d46565b511660005260031b016020526200c5c060406000205462006814838962004d46565b91906200c5ce828862004d46565b51906103e882101562004cfd576200c61893611fbb62000faa938d6200c5fc8760018060a01b039262004d46565b511660005260031b0160205260406000205562000fa362033320565b6200c4d8565b50926200c63d919294506200c6369096959662032f53565b9462032e37565b92604051906200c64d8262002b78565b6001825260203681840137516001600160a01b03166200c66d8262004cef565b526000945b80518610156200c233576200c688868262004d46565b51610220526200c699855162004e62565b966000946200c6a9845162004e62565b6104005260009460005b88518110156200c77b578a896200c6e36001600160a01b036200c6d7858462004d46565b51166102205162032d92565b15806200c733575b6200c704575b50506200c6fe9062004cdf565b6200c6b3565b986200c7289162001ac782859c62007f376200c6fe9760018060a01b039262004d46565b9790508a896200c6f1565b5050506103e861022051101562004cfd576001600160a01b036200c758828b62004d46565b5116600052611fbb6102205160031b016020528a8960406000205415156200c6eb565b50909895979498969291939660005b88518110156200c820576103e861022051101562004cfd576001600160a01b036200c7b6828b62004d46565b5116600052611fbb6102205160031b01602052604060002054156200c7e7575b6200c7e19062004cdf565b6200c78a565b996200c7e1906200c817906001600160a01b036200c8068e8d62004d46565b511662001ac7826104005162004d46565b9a90506200c7d6565b50985096959291909396610220516103e8811015806104a05262004cfd5760031b611fbc0154986200c85762008068898c62006200565b6103c0526000610a40526000610540525b6104a05162004cfd57610540518a8110156200c933576200c89e6200c8bb9160006104a052611fbc6102205160031b0162004f5e565b90546104005160039290921b1c6001600160a01b03169062032dea565b156200c8da575b6200c8d06105405162004cdf565b610540526200c868565b60006104a0526200c8f961054051611fbc6102205160031b0162004f5e565b60018060a01b0391549060031b1c166200c91a610a40516103c05162004d46565b526200c929610a405162004cdf565b610a40526200c8c2565b50979294959093985095909560005b8281106200c9de575050506104a05162004cfd576103c051516001600160401b03811162002a9b576200c98081611fbc6102205160031b016200509a565b60206103c05101611fbc6102205160031b01600052602060002060005b8381106200c9c057505050506200c9b49062004cdf565b9492959091956200c672565b82516001600160a01b0316818301556020909201916001016200c99d565b6200ca24906001600160a01b036200c9f7828562004d46565b51166200ca0b610a40516103c05162004d46565b526200ca1a610a405162004cdf565b610a405262004cdf565b6200c942565b90926020810151602681101562002a23576004036200d0575760400160c0936200ca686200ca5c868451015162004cef565b51958351015162004d13565b51906200ca7f60a06200779b818651015162004cef565b51936200ca94875184511462000fa3620331b7565b6200caa7875185511462000fa3620331b7565b6200caba875186511462000fa3620331b7565b60005b87518110156200cb25576200cad3818662004d46565b51906103e882101562004cfd576200cb1f91611fbb906001600160a01b036200cafd848d62004d46565b511660005260031b0160205262000faa60406000205462007ce9838a62004d46565b6200cabd565b509095919593929360005b83518110156200cc88576200cb46818762004d46565b516103e881101562004cfd57611fbb906001600160a01b036200cb6a848862004d46565b511660005260031b016020526200cb8c60406000205462007d56838862004d46565b906200cb99838962004d46565b51916103e883101562004cfd576200cbdf92611fbb906001600160a01b036200cbc3878b62004d46565b511660005260031b0160205260406000205562000fa3620332bb565b6200cbeb818762004d46565b516103e881101562004cfd57611fbb906001600160a01b036200cc0f848c62004d46565b511660005260031b016020526200cc3160406000205462006814838862004d46565b9190506200cc40818862004d46565b51916103e883101562004cfd576200cc8292611fbb906001600160a01b036200cc6a858e62004d46565b511660005260031b0160205260406000205562004cdf565b6200cb30565b5091936200cca491935062007e47620084799197969762032f53565b6000945b80518610156200c233576200ccbe868262004d46565b51610280526200cccf855162004e62565b966000946200ccdf845162004e62565b6107005260009460005b88518110156200cdb1578a896200cd196001600160a01b036200cd0d858462004d46565b51166102805162032d92565b15806200cd69575b6200cd3a575b50506200cd349062004cdf565b6200cce9565b986200cd5e9162001ac782859c62007f376200cd349760018060a01b039262004d46565b9790508a896200cd27565b5050506103e861028051101562004cfd576001600160a01b036200cd8e828b62004d46565b5116600052611fbb6102805160031b016020528a8960406000205415156200cd21565b50909895979498969291939660005b88518110156200ce4f576103e861028051101562004cfd576001600160a01b03806200cded838c62004d46565b5116600052611fbb6102805160031b01602052604060002054156200ce1f575b506200ce199062004cdf565b6200cdc0565b819b6200ce47916200ce366200ce19948d62004d46565b511662001ac7826107005162004d46565b9a906200ce0d565b50985096959291909396610280516103e881101580610a005262004cfd5760031b611fbc0154986200ce8662008068898c62006200565b610260526000610780526000610620525b610a005162004cfd57610620518a8110156200cf60576200cecd6200ceed916000610a0052611fbc6102805160031b0162004f5e565b9054610700516001600160a01b03939260031b9190911c83169062032dea565b156200cf0d575b506200cf036106205162004cdf565b610620526200ce97565b6000610a00526200cf2c61062051611fbc6102805160031b0162004f5e565b90549060031b1c166200cf46610780516102605162004d46565b526200cf556107805162004cdf565b61078052386200cef4565b50979294959093985095909560005b8281106200d00b57505050610a005162004cfd5761026051516001600160401b03811162002a9b576200cfad81611fbc6102805160031b016200509a565b60206102605101611fbc6102805160031b01600052602060002060005b8381106200cfed57505050506200cfe19062004cdf565b9492959091956200cca8565b82516001600160a01b0316818301556020909201916001016200cfca565b6200d051906001600160a01b036200d024828562004d46565b51166200d038610780516102605162004d46565b526200d0476107805162004cdf565b6107805262004cdf565b6200cf6f565b92906020840151602681101562002a23576005036200d5b15760408401906200d08a60a06200851e818551015162004cef565b519282518451036200ad0a5760005b83518110156200d0f4576200d0af818562004d46565b51906103e882101562004cfd57611fbb6200d0ee9260018060a01b038a511660005260031b0160205262000faa60406000205462007ce9838962004d46565b6200d099565b509060005b83518110156200d19b576200d10f818562004d46565b516103e881101562004cfd57611fbb9060018060a01b0389511660005260031b016020526200d14960406000205462007d56838862004d46565b91906200d157828762004d46565b51906103e882101562004cfd576200d19593611fbb62000faa9360018060a01b038d511660005260031b0160205260406000205562000fa3620332bb565b6200d0f9565b50916200d1ac919495935062032f53565b92604051926200d1bc8462002b78565b6001845260203681860137516001600160a01b03166200d1dc8462004cef565b52604051926200d1ec8462002b3f565b6000845260003681376000945b80518610156200c233576200d20f868262004d46565b516107c0526200d220855162004e62565b966000946200d230845162004e62565b6102405260009460005b88518110156200d302578a896200d26a6001600160a01b036200d25e858462004d46565b51166107c05162032d92565b15806200d2ba575b6200d28b575b50506200d2859062004cdf565b6200d23a565b986200d2af9162001ac782859c62007f376200d2859760018060a01b039262004d46565b9790508a896200d278565b5050506103e86107c051101562004cfd576001600160a01b036200d2df828b62004d46565b5116600052611fbb6107c05160031b016020528a8960406000205415156200d272565b50909895979498969291939660005b88518110156200d3a7576103e86107c051101562004cfd576001600160a01b036200d33d828b62004d46565b5116600052611fbb6107c05160031b01602052604060002054156200d36e575b6200d3689062004cdf565b6200d311565b996200d368906200d39e906001600160a01b036200d38d8e8d62004d46565b511662001ac7826102405162004d46565b9a90506200d35d565b509850969592919093966107c0516103e8811015806109e05262004cfd5760031b611fbc0154986200d3de62008068898c62006200565b610560526000610420526000610480525b6109e05162004cfd57610480518a8110156200d4ba576200d4256200d4429160006109e052611fbc6107c05160031b0162004f5e565b90546102405160039290921b1c6001600160a01b03169062032dea565b156200d461575b6200d4576104805162004cdf565b610480526200d3ef565b60006109e0526200d48061048051611fbc6107c05160031b0162004f5e565b60018060a01b0391549060031b1c166200d4a1610420516105605162004d46565b526200d4b06104205162004cdf565b610420526200d449565b50979294959093985095909560005b8281106200d565575050506109e05162004cfd5761056051516001600160401b03811162002a9b576200d50781611fbc6107c05160031b016200509a565b60206105605101611fbc6107c05160031b01600052602060002060005b8381106200d54757505050506200d53b9062004cdf565b9492959091956200d1f9565b82516001600160a01b0316818301556020909201916001016200d524565b6200d5ab906001600160a01b036200d57e828562004d46565b51166200d592610420516105605162004d46565b526200d5a16104205162004cdf565b6104205262004cdf565b6200d4c9565b926020810151602681101562002a23576006036200db9a576040016200d5dc60c08251015162004cef565b51936200d5f360a06200851e818551015162004cef565b519285518351036200db485785518451036200dafb5760005b86518110156200d674576200d622818562004d46565b51906103e882101562004cfd576200d66e91611fbb906001600160a01b036200d64c848c62004d46565b511660005260031b0160205262000faa60406000205462007ce9838962004d46565b6200d60c565b509060005b86518110156200d718576200d68f818562004d46565b516103e881101562004cfd57611fbb906001600160a01b036200d6b3848b62004d46565b511660005260031b016020526200d6d560406000205462007d56838862004d46565b91906200d6e3828762004d46565b51906103e882101562004cfd576200d7129362000faa92611fbb906001600160a01b036200cbc3878f62004d46565b6200d679565b50916200d72f919350620084799095949562032f53565b91604051926200d73f8462002b3f565b6000845260003681376000945b80518610156200c233576200d762868262004d46565b51610aa0526200d773855162004e62565b966000946200d783845162004e62565b6109c05260009460005b88518110156200d855578a896200d7bd6001600160a01b036200d7b1858462004d46565b5116610aa05162032d92565b15806200d80d575b6200d7de575b50506200d7d89062004cdf565b6200d78d565b986200d8029162001ac782859c62007f376200d7d89760018060a01b039262004d46565b9790508a896200d7cb565b5050506103e8610aa051101562004cfd576001600160a01b036200d832828b62004d46565b5116600052611fbb610aa05160031b016020528a8960406000205415156200d7c5565b50909895979498969291939660005b88518110156200d8f3576103e8610aa051101562004cfd576001600160a01b03806200d891838c62004d46565b5116600052611fbb610aa05160031b01602052604060002054156200d8c3575b506200d8bd9062004cdf565b6200d864565b819b6200d8eb916200d8da6200d8bd948d62004d46565b511662001ac7826109c05162004d46565b9a906200d8b1565b50985096959291909396610aa0516103e8811015806102e05262004cfd5760031b611fbc0154986200d92a62008068898c62006200565b6109a05260006102a05260006107e0525b6102e05162004cfd576107e0518a8110156200da04576200d9716200d9919160006102e052611fbc610aa05160031b0162004f5e565b90546109c0516001600160a01b03939260031b9190911c83169062032dea565b156200d9b1575b506200d9a76107e05162004cdf565b6107e0526200d93b565b60006102e0526200d9d06107e051611fbc610aa05160031b0162004f5e565b90549060031b1c166200d9ea6102a0516109a05162004d46565b526200d9f96102a05162004cdf565b6102a052386200d998565b50979294959093985095909560005b8281106200daaf575050506102e05162004cfd576109a051516001600160401b03811162002a9b576200da5181611fbc610aa05160031b016200509a565b60206109a05101611fbc610aa05160031b01600052602060002060005b8381106200da9157505050506200da859062004cdf565b9492959091956200d74c565b82516001600160a01b0316818301556020909201916001016200da6e565b6200daf5906001600160a01b036200dac8828562004d46565b51166200dadc6102a0516109a05162004d46565b526200daeb6102a05162004cdf565b6102a05262004cdf565b6200da13565b60405162461bcd60e51b8152602060048201526030602482015260008051602062033aec83398151915260448201526f1b9d1cc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b60405162461bcd60e51b815260206004820152603560248201526000805160206203372c8339815191526044820152741b90db185cdcd95cc81a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b602081949293940151602681101562002a23576007036200dd3557604001916200dbc960c08451015162004cef565b51916200dbdb60a08551015162004cef565b51935151916200dbf3845186511462000fa3620331b7565b60005b84518110156200dd23576001600160a01b03806200dc15838862004d46565b5116600052613ef8806020526200dc3960ff604060002054161562000fa362033288565b60026200dc47848862004d46565b516200dcb16200dc58868c62004d46565b5191620088728b604051966200dc6e8862002a7f565b60018852886200dc958b60208b01946000865260408c0197885260608c01998a5262004d46565b51166000526020526200886860406000209751151588620057f2565b519101556200dcc1828762004d46565b51613ef954929116600160401b83101562002a9b576001830180613ef95583101562004cfd57613ef96000526000805160206203398c83398151915290920180546001600160a01b0319169092179091556200dd1d9062004cdf565b6200dbf6565b5094915092506200c245915062004cdf565b6020810151602681101562002a23576008036200de235760c060406200dd5f920151015162004cef565b519160005b83518110156200de14576200de0e906001600160a01b03806200dd88838862004d46565b5116600052613ef890816020526200ddb1600160ff6040600020541615151462000fa3620331e7565b806200ddbe848962004d46565b5116600052816020526200dde260ff60406000205460081c161562000fa36203324f565b6200ddee838862004d46565b5116600052602052604060002061010061ff001982541617905562004cdf565b6200dd64565b50926200c24591925062004cdf565b6020810151602681101562002a23576009036200df025760c060406200de4d920151015162004cef565b519160005b83518110156200de14576200defc906001600160a01b03806200de76838862004d46565b5116600052613ef890816020526200de9f600160ff6040600020541615151462000fa3620331e7565b806200deac848962004d46565b5116600052816020526200ded4600160ff60406000205460081c1615151462000fa36203321a565b6200dee0838862004d46565b5116600052602052604060002061ff0019815416905562004cdf565b6200de52565b6020810151602681101562002a2357600a036200dfea57604001906200df3e60a06200df3360c08551015162004cef565b519351015162004cef565b51926200df53835185511462000fa3620331b7565b60005b83518110156200dfd9576200dfd3906001600160a01b03806200df7a838862004d46565b5116600052613ef8806020526200dfa2600160ff6040600020541615151462000fa3620331e7565b6200dfae838962004d46565b51916200dfbc848962004d46565b511660005260205260026040600020015562004cdf565b6200df56565b50939092506200c245915062004cdf565b602081949392940151602681101562002a2357600b036200e0ca57604001926200e01960c08551015162004cef565b51935151916200e031855184511462000fa3620331b7565b60005b85518110156200e0ba576200e0b49062000faa6001600160a01b03806200e05c848b62004d46565b5116600052613ef8806020526200e084600160ff6040600020541615151462000fa3620331e7565b6200e090848962004d46565b51916200e09e858c62004d46565b511660005260205260016040600020016200571f565b6200e034565b509350916200c245915062004cdf565b9091926020820151602681101562002a2357600c036200e1b557606060408301510151926200e0f9846202d698565b60005b84518110156200dfd95760c06200e11c8260606040880151015162004d46565b510151156200e170576200e1446200e13d8260606040880151015162004d46565b5162005d8c565b613efa54908160001981011162001e0757600562008ca96200e16a936000190162005cda565b6200e0fc565b6200e18f6200e1888260606040880151015162004d46565b5162005d69565b613efb54908160001981011162001e0757600562008ca96200e16a936000190162005c9a565b9291906020810151602681101562002a2357600d036200e2bf576040019260206200e1e560a08651015162004cef565b5194510151916200e1fa85518451146202dd8c565b60005b85518110156200e0ba57806200e2186200e26c928662004d46565b51156200e272576200e23b6200e22f828962004d46565b51613efa54116202de15565b6200e25a60ff600562008db66200e253858c62004d46565b5162005cda565b600562008dd26200e253838a62004d46565b6200e1fd565b6200e28e6200e282828962004d46565b51613efb54116202de15565b6200e2ad60ff600562008db66200e2a6858c62004d46565b5162005c9a565b600562008dd26200e2a6838a62004d46565b6020810151602681101562002a2357600e036200e3b8576040019260206200e2ec60a08651015162004cef565b5194510151916200e30185518451146202dd8c565b60005b85518110156200e0ba57806200e31f6200e36c928662004d46565b51156200e372576200e3426200e336828962004d46565b51613efa54116202dece565b6200e35a60ff600562008ed96200e253858c62004d46565b600562008ca96200e253838a62004d46565b6200e304565b6200e38e6200e382828962004d46565b51613efb54116202dece565b6200e3a660ff600562008ed96200e2a6858c62004d46565b600562008ca96200e2a6838a62004d46565b9091926020820151602681101562002a2357600f036200e49557606060408301510151926200e3e7846202d698565b60005b84518110156200dfd95760c06200e40a8260606040880151015162004d46565b510151156200e457576200e42b6200e13d8260606040880151015162004d46565b613efa54908160001981011162001e0757600562008dd26200e451936000190162005cda565b6200e3ea565b6200e46f6200e1888260606040880151015162004d46565b613efb54908160001981011162001e0757600562008dd26200e451936000190162005c9a565b9291906020810151602681101562002a23576010036200e5da5760400151926200e4c860a0608086015195015162004cef565b51916200e4dd855184511462000fa3620331b7565b60005b85518110156200e0ba57806200e4fb6200e570928862004d46565b516200e5078162002fc4565b6200e513828762004d46565b51906200e5208162002fc4565b6200e5376200e52e620332ea565b82151562004cac565b6200e5428162002fc4565b600181036200e57657506200e5666200e55a620332ea565b61271083111562004cac565b613f675562004cdf565b6200e4e0565b6200e5818162002fc4565b600281036200e5955750613f685562004cdf565b6200e5a08162002fc4565b600381036200e5b45750613f695562004cdf565b806200e5c260049262002fc4565b146200e5cf575062004cdf565b613f6a55386200a043565b6020810151602681101562002a23576011036200e87d57604001906200e60b60a06200df3360c08551015162004cef565b51936200e61c83518651146202d510565b60005b83518110156200e69c576200e696906200e6766001600160a01b03806200e647848962004d46565b5116600052613efd90816020526200e66a60406000205462006814868d62004d46565b939062000fa36203316d565b6200e682848962004d46565b511660005260205260406000205562004cdf565b6200e61f565b509350906200e6ab9062032e37565b90613efe54936200e6c26200806884518762006200565b9060009260005b8781106200e83d575060005b85518110156200e78a576000805b8981106200e73b575b50156200e705575b6200e6ff9062004cdf565b6200e6d5565b936200e6ff906200e732906001600160a01b036200e724888a62004d46565b511662001ac7828862004d46565b9490506200e6f4565b6200e7468162004f26565b90546001600160a01b0360039290921b1c8116906200e766858b62004d46565b5116146200e77f576200e7799062004cdf565b6200e6e3565b50506001386200e6ec565b5095509392506200e79b8262004e62565b8051906001600160401b03821162002a9b576020906200e7bb8362005041565b01613efe600052602060002060005b8381106200e81f575050505060005b8281106200e7ef575050506200c2459062004cdf565b6200e8199062000faa6001600160a01b036200e80c838662004d46565b511662001a088362004f26565b6200e7d9565b82516001600160a01b0316818301556020909201916001016200e7ca565b936200e8706200e877916200e8528762004f26565b905460039190911b1c6001600160a01b031662001ac7828862004d46565b9462004cdf565b6200e6c9565b6020819492940151602681101562002a23576012036200eac157604001906200e8b160a06200df3360c08551015162004cef565b51936200e8c283518651146202d510565b60005b83518110156200e916576200e910906200e6766001600160a01b03806200e8ed848962004d46565b5116600052613efd90816020526200e66a60406000205462007d56868d62004d46565b6200e8c5565b50935091906200e9269062032e37565b613efe546200e9358162004e62565b906000926000915b8083106200e9e8575050506200e9538262004e62565b8051906001600160401b03821162002a9b576020906200e9738362005041565b01613efe600052602060002060005b8381106200e9ca575050505060005b8281106200e9a7575050506200c2459062004cdf565b6200e9c49062000faa6001600160a01b036200e80c838662004d46565b6200e991565b82516001600160a01b0316818301556020909201916001016200e982565b91956000959193959760005b85518110156200eab2576200ea098962004f26565b90546001600160a01b0360039290921b1c8116906200ea29838962004d46565b5116146200ea42576200ea3c9062004cdf565b6200e9f4565b509750956001959391955b806200ea81575b156200ea6c576200ea659062004cdf565b916200e93d565b936200e8706200ea65916200e8528762004f26565b506200ea8d8162004f26565b60018060a01b0391549060031b1c16600052613efd602052604060002054156200ea54565b5097969096959391956200ea4d565b6020819493940151602681101562002a23576013036200eb625760408091015101519160005b83518110156200de14576200eafd818562004d46565b5190613efc54600160401b81101562002a9b576001810180613efc5581101562004cfd57613efc6000526200eb5c9262000faa916007027f6710e0bb821cd3dfcfba05f5136082a6d0bca8d604d6d14bfd93de2dd49659d2016202f19f565b6200eae7565b602081949392940151602681101562002a23576014036200f0a457604001906200eb9160c08351015162004cef565b51936200eba860a06200779b818651015162004cef565b51916200ebb986518551146202df8a565b6200ebc886518451146202dff0565b60005b86518110156200ecc2576200ebe1818562004d46565b516200ebee828762004d46565b51906103e882101562004cfd57611fbe6200ec0f9260031b0154906200608f565b906200ec1c838862004d46565b51916103e883101562004cfd57611fbe6200ec3c9360031b01556202e0aa565b6200ec48818562004d46565b516200ec55828762004d46565b51906103e882101562004cfd576200ec7f91611fbb906001600160a01b036200bddd868d62004d46565b91906200ec8d828862004d46565b51906103e882101562004cfd576200ecbc9362000faa92611fbb906001600160a01b036200be33878f62004d46565b6200ebcb565b50926200ecd9919250620084799095949562032f53565b916040516200ece88162002b3f565b6000815260003681376000945b80518610156200c233576200ed0b868262004d46565b516106e0526200ed1c855162004e62565b966000946200ed2c845162004e62565b6103005260009460005b88518110156200edfe578a896200ed666001600160a01b036200ed5a858462004d46565b51166106e05162032d92565b15806200edb6575b6200ed87575b50506200ed819062004cdf565b6200ed36565b986200edab9162001ac782859c62007f376200ed819760018060a01b039262004d46565b9790508a896200ed74565b5050506103e86106e051101562004cfd576001600160a01b036200eddb828b62004d46565b5116600052611fbb6106e05160031b016020528a8960406000205415156200ed6e565b50909895979498969291939660005b88518110156200ee9c576103e86106e051101562004cfd576001600160a01b03806200ee3a838c62004d46565b5116600052611fbb6106e05160031b01602052604060002054156200ee6c575b506200ee669062004cdf565b6200ee0d565b819b6200ee94916200ee836200ee66948d62004d46565b511662001ac7826103005162004d46565b9a906200ee5a565b509850969592919093966106e0516103e8811015806103405262004cfd5760031b611fbc0154986200eed362008068898c62006200565b610440526000610900526000610980525b6103405162004cfd57610980518a8110156200efad576200ef1a6200ef3a91600061034052611fbc6106e05160031b0162004f5e565b9054610300516001600160a01b03939260031b9190911c83169062032dea565b156200ef5a575b506200ef506109805162004cdf565b610980526200eee4565b6000610340526200ef7961098051611fbc6106e05160031b0162004f5e565b90549060031b1c166200ef93610900516104405162004d46565b526200efa26109005162004cdf565b61090052386200ef41565b50979294959093985095909560005b8281106200f058575050506103405162004cfd5761044051516001600160401b03811162002a9b576200effa81611fbc6106e05160031b016200509a565b60206104405101611fbc6106e05160031b01600052602060002060005b8381106200f03a57505050506200f02e9062004cdf565b9492959091956200ecf5565b82516001600160a01b0316818301556020909201916001016200f017565b6200f09e906001600160a01b036200f071828562004d46565b51166200f085610900516104405162004d46565b526200f0946109005162004cdf565b6109005262004cdf565b6200efbc565b926020840151602681101562002a23576015036200f6a55760408401906200f0d160c08351015162004cef565b51906200f0e860a06200779b818651015162004cef565b51936200f0fd835185511462000fa3620331b7565b6200f110835186511462000fa3620331b7565b60005b83518110156200f16e576200f129818662004d46565b51906103e882101562004cfd57611fbb6200f1689260018060a01b038b511660005260031b0160205262000faa60406000205462007ce9838a62004d46565b6200f113565b509095919560005b87518110156200f2a0576200f18c818662004d46565b516103e881101562004cfd57611fbb9060018060a01b0386511660005260031b016020526200f1c660406000205462007d56838962004d46565b906200f1d3838862004d46565b51916103e883101562004cfd57611fbb6200f20c9360018060a01b0389511660005260031b0160205260406000205562000fa3620332bb565b6200f218818662004d46565b516103e881101562004cfd57611fbb906001600160a01b036200f23c848c62004d46565b511660005260031b016020526200f25e60406000205462006814838962004d46565b91906200f26c828862004d46565b51906103e882101562004cfd576200f29a93611fbb62000faa938d6200c5fc8760018060a01b039262004d46565b6200f176565b50926200f2b8919294506200c6369096959662032f53565b92604051906200f2c88262002b78565b6001825260203681840137516001600160a01b03166200f2e88262004cef565b526000945b80518610156200c233576200f303868262004d46565b51610a60526200f314855162004e62565b966000946200f324845162004e62565b6108405260009460005b88518110156200f3f6578a896200f35e6001600160a01b036200f352858462004d46565b5116610a605162032d92565b15806200f3ae575b6200f37f575b50506200f3799062004cdf565b6200f32e565b986200f3a39162001ac782859c62007f376200f3799760018060a01b039262004d46565b9790508a896200f36c565b5050506103e8610a6051101562004cfd576001600160a01b036200f3d3828b62004d46565b5116600052611fbb610a605160031b016020528a8960406000205415156200f366565b50909895979498969291939660005b88518110156200f49b576103e8610a6051101562004cfd576001600160a01b036200f431828b62004d46565b5116600052611fbb610a605160031b01602052604060002054156200f462575b6200f45c9062004cdf565b6200f405565b996200f45c906200f492906001600160a01b036200f4818e8d62004d46565b511662001ac7826108405162004d46565b9a90506200f451565b50985096959291909396610a60516103e8811015806106805262004cfd5760031b611fbc0154986200f4d262008068898c62006200565b6108605260006106c0526000610880525b6106805162004cfd57610880518a8110156200f5ae576200f5196200f53691600061068052611fbc610a605160031b0162004f5e565b90546108405160039290921b1c6001600160a01b03169062032dea565b156200f555575b6200f54b6108805162004cdf565b610880526200f4e3565b6000610680526200f57461088051611fbc610a605160031b0162004f5e565b60018060a01b0391549060031b1c166200f5956106c0516108605162004d46565b526200f5a46106c05162004cdf565b6106c0526200f53d565b50979294959093985095909560005b8281106200f659575050506106805162004cfd5761086051516001600160401b03811162002a9b576200f5fb81611fbc610a605160031b016200509a565b60206108605101611fbc610a605160031b01600052602060002060005b8381106200f63b57505050506200f62f9062004cdf565b9492959091956200f2ed565b82516001600160a01b0316818301556020909201916001016200f618565b6200f69f906001600160a01b036200f672828562004d46565b51166200f6866106c0516108605162004d46565b526200f6956106c05162004cdf565b6106c05262004cdf565b6200f5bd565b9091926020810151602681101562002a23576016036200f7575760c060406200f6d2920151015162004cef565b519160005b83518110156200de14576001600160a01b036200f6f5828662004d46565b51613f6b54929116600160401b83101562002a9b576001830180613f6b5583101562004cfd57613f6b6000526000805160206203376c83398151915290920180546001600160a01b0319169092179091556200f7519062004cdf565b6200f6d7565b6020810151602681101562002a23576017036200f7b45760405162461bcd60e51b81526020600482015260296024820152600080516020620339cc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a23576018036200f8725760c060406200f7de920151015162004cef565b5191600160ff19613f6e541617613f6e5560005b83518110156200de14576001600160a01b036200f810828662004d46565b51613f6d54929116600160401b83101562002a9b576001830180613f6d5583101562004cfd57613f6d6000526000805160206203396c83398151915290920180546001600160a01b0319169092179091556200f86c9062004cdf565b6200f7f2565b602081949293940151602681101562002a23576019036200f89a575b506200c2459062004cdf565b6020810151602681101562002a2357601a036200fa115760a060406200f8c4920151015162004cef565b51906200f8d560038351146202d510565b6200f8e08262004cef565b516200f8f062009fdc8462004d13565b51926200f9d5576200c245926001036200f9ce576200f9176200f97591613f69546200608f565b613f6955604051906200f92a8262002b06565b603282527f6469766964656e6461626c652062616c616e6365206f766572666c6f772077686020830152710cadc40e0e4dec6cae6e6d2dcce40c6c2e6d60731b604083015262004cac565b6200f9c76200f987613f6a546200607c565b613f6a55604051906200f99a8262002b78565b601a8252796469766964656e647320636f756e746572206f766572666c6f7760301b602083015262004cac565b906200f88e565b506200f9c7565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207061796d656e74207479706560601b6044820152606490fd5b6020810151602681101562002a2357601b036200ffa157509190613f67546200fa3d6200a0b962033044565b613f6a54613f685411156200fa5c6200fa55620330b2565b8262004cac565b613f6954906200fa6d838362005eb0565b50506200fa7962033108565b506000805b6103e882106200ff52575b5050906200fab96200fabf93926200faaf6200faa462033044565b612710861062004cac565b62000fa3620330b2565b62005eb0565b90506200facb62033108565b5060009060005b6103e881106200fe7f575b50906127106200faee9204620061de565b90506200fafe613f745462004e62565b906000946000905b6103e88210156200fe72578160031b9460ff611fbf87015416156200fc5c57600096611fba870154156200fc4b57600098975b62004cfd57611fbc8701548910156200fc31576200fb5c89611fbc890162004f5e565b600160a01b6001900391549060031b1c169788600052611fbb8801602052604098868a60002054906200fb8f9162005eb0565b9a906200fb9b62033108565b6200fba69162004cac565b60009a611fba8b01546200fbba9162005eb0565b91906200fbc662033108565b6200fbd19162004cac565b82600052613eff602052600020908154906200fbed916200608f565b9091556200fbfa62033108565b6200fc059162004cac565b6200fc11828962004d46565b526200fc1d9062004cdf565b986200fc299062004cdf565b98976200fb39565b929095506200fc439196975062004cdf565b90946200fb06565b929095506200fc4391965062004cdf565b95969392509350505b6200fc708262004e62565b9160009160005b8281106200fddc57505050613f0054916200fc9762008068848462006200565b926000906000905b8082106200fdbf57505060005b8381106200fd295750508251929150506001600160401b03821162002a9b576020906200fcd98362005064565b01613f00600052602060002060005b8381106200fd0b57505050506200c245906000613f69556000613f6a556200f9c7565b82516001600160a01b0316818301556020909201916001016200fce8565b6000805b8381106200fd77575b50156200fd4f575b6200fd499062004cdf565b6200fcac565b906200fd49906200fd6e906001600160a01b03620081f0858762004d46565b9190506200fd3e565b6001600160a01b03806200fd8c858862004d46565b5116906200fd9b838a62004d46565b5116146200fdb4576200fdae9062004cdf565b6200fd2d565b50506001386200fd36565b9091620081fe6200fdd591620094f58562004f42565b906200fc9f565b6000805b8581106200fe2a575b50156200fe02575b6200fdfc9062004cdf565b6200fc77565b926200fdfc906200fe21906001600160a01b03620081f0878662004d46565b9390506200fdf1565b6001600160a01b03806200fe3f858762004d46565b5116906200fe4e838a62004d46565b5116146200fe67576200fe619062004cdf565b6200fde0565b50506001386200fde9565b939495929150506200fc65565b90918160039695961b60ff611fbf82015416156200ff4657611fba810154611fbc8201546000928391825b8184106200fee65750505050620074616200fedd936200fed562000faa979694620022e49462005eb0565b929062005daf565b9493946200fad2565b94929462004cfd576200ff3f856200ff376200ff0b62000faa98611fbc870162004f5e565b905460039190911b1c6001600160a01b03166000908152611fbb8601602052604081205490966200608f565b979062005ed2565b926200feaa565b5091909493946200fadd565b8160039897981b60ff611fbf82015416156200ff9757916200a4f8620074616200ff8d936200a4ec62000faa96611fba6200a4e28762005e52565b909695966200fa7e565b509695966200fa89565b6020810151602681101562002a2357601c036200fffe5760405162461bcd60e51b8152602060048201526029602482015260008051602062033acc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a2357601d0362010022575b506200c245906200f9c7565b9290916020840151602681101562002a2357601e036201075857604084019060a09062010053828451015162004cef565b515162010064838551015162004d13565b5151036200ade9576201007b828451015162004cef565b51516201008c838551015162004d24565b5151036200ad6d57620100a3828451015162004cef565b5194620100b4838551015162004d13565b5191620100c96200a641858751015162004d24565b519585518751036200ad0a5760005b86518110156201013357620100ee818862004d46565b51906103e882101562004cfd57611fbb6201012d9260018060a01b038d511660005260031b0160205262000faa60406000205462007ce9838c62004d46565b620100d8565b5090969192939660005b8651811015620101e05762010153818862004d46565b516103e881101562004cfd57611fbb9060018060a01b038c511660005260031b016020526201018d60406000205462007d56838b62004d46565b91906201019b828a62004d46565b51906103e882101562004cfd57620101da93611fbb62000faa938f60018060a01b0390511660005260031b0160205260406000205562000fa3620332bb565b6201013d565b5093969297955093620101f39062032f53565b9660405196620102038862002b78565b60018852602036818a013786516001600160a01b0316620102248962004cef565b5260405196620102348862002b3f565b600088526000610600525b89516106005190811015620105fa576201025a908b62004d46565b51610960526201026b885162004e62565b996000976201027b8b5162004e62565b6103605260009760005b8b518110156201034d578d8c620102b56001600160a01b03620102a9858462004d46565b51166109605162032d92565b158062010305575b620102d6575b5050620102d09062004cdf565b62010285565b9b620102fa9162001ac782859f62007f37620102d09760018060a01b039262004d46565b9a90508d8c620102c3565b5050506103e861096051101562004cfd576001600160a01b036201032a828e62004d46565b5116600052611fbb6109605160031b016020528d8c6040600020541515620102bd565b50909b989a99949691929395979b60005b8b51811015620103f4576103e861096051101562004cfd576001600160a01b036201038a828e62004d46565b5116600052611fbb6109605160031b0160205260406000205415620103bb575b620103b59062004cdf565b6201035e565b9c620103eb620103b5918f620103da8f9160018060a01b039262004d46565b511662001ac7826103605162004d46565b9d9050620103aa565b509b5098959092949691939661096051996103e88b10159c8d62004cfd576201042c62008068611fbc8f9e60031b01549e8f62006200565b6108005260006107a0528d60009e5b62004cfd578d8f1015620104fc575060009d620104846201046782611fbc6109605160031b0162004f5e565b90546103605160039290921b1c6001600160a01b03169062032dea565b156201049e575b620104978f9162004cdf565b9e6201043b565b620104979e5060009e8f91620104bf81611fbc6109605160031b0162004f5e565b60018060a01b0391549060031b1c16620104e06107a0516108005162004d46565b52620104ef6107a05162004cdf565b6107a0529150506201048b565b9396999b929d509396999094979b5060005b828110620105ae5750505062004cfd5761080051516001600160401b03811162002a9b576201054881611fbc6109605160031b016200509a565b6020610800510190611fbc6109605160031b0160005260206000209160005b828110620105905750505050620105816106005162004cdf565b6106005295989094986201023f565b81516001600160a01b03168185015560209091019060010162010567565b620105f4906001600160a01b03620105c7828562004d46565b5116620105db6107a0516108005162004d46565b52620105ea6107a05162004cdf565b6107a05262004cdf565b6201050e565b509492975094955091965060009460005b87518110156201065e57620106296200abc66200abb9838962004d46565b8062010642575b506201063c9062004cdf565b6201060b565b906200abfc62010657986201063c936200608f565b9062010630565b5096509450915091806201067c575b506200c24591505b9062010016565b620106a79060018060a01b038451166000526200ac5a613efd9182602052604060002054906200608f565b60018060a01b03845116600052602052604060002055600091600092613efe54935b84811062010713575b506201066d57516001600160a01b031691600160401b81101562002a9b576200c2459262001a088260016201070c9401613efe5562004f26565b386201066d565b6201071e8162004f26565b9054845160039290921b1c6001600160a01b039081169116146201074d57620107479062004cdf565b620106c9565b5050600138620106d2565b9190926020810151602681101562002a2357601f03620107d3576040620107829101515162004cef565b5190613f6c54600160401b81101562002a9b576001810180613f6c5581101562004cfd57613f6c6000526200c24592620107cd91600080516020620337ac833981519152016200571f565b62010675565b6020810151602681101562002a2357602003620107f7575b506200c2459062010675565b6020810151602681101562002a2357602114620107eb576020810151602681101562002a23576022036201087d57506200c2459060ff19613f6e5416613f6e55613f6d546000613f6d558062010851575b505b90620107eb565b613f6d60005262010876906000805160206203396c8339815191529081019062004fa3565b3862010848565b6020810151602681101562002a2357602303620108a1575b506200c245906201084a565b6020810151602681101562002a235760241462010895576020810151602681101562002a235760251462010895579290916020840151602681101562002a235760150362010ee5576040840190620108fe60c08351015162004cef565b51906201091560a06200779b818651015162004cef565b51936201092a835185511462000fa3620331b7565b6201093d835186511462000fa3620331b7565b60005b83518110156201099b5762010956818662004d46565b51906103e882101562004cfd57611fbb620109959260018060a01b038b511660005260031b0160205262000faa60406000205462007ce9838a62004d46565b62010940565b509095919560005b875181101562010acd57620109b9818662004d46565b516103e881101562004cfd57611fbb9060018060a01b0386511660005260031b01602052620109f360406000205462007d56838962004d46565b9062010a00838862004d46565b51916103e883101562004cfd57611fbb62010a399360018060a01b0389511660005260031b0160205260406000205562000fa3620332bb565b62010a45818662004d46565b516103e881101562004cfd57611fbb906001600160a01b0362010a69848c62004d46565b511660005260031b0160205262010a8b60406000205462006814838962004d46565b919062010a99828862004d46565b51906103e882101562004cfd5762010ac793611fbb62000faa938d6200c5fc8760018060a01b039262004d46565b620109a3565b509262010ae5919294506200c6369096959662032f53565b926040519062010af58262002b78565b6001825260203681840137516001600160a01b031662010b158262004cef565b526000945b805186101562010ed25762010b30868262004d46565b516106a05262010b41855162004e62565b9660009462010b51845162004e62565b6103805260009460005b885181101562010c23578a8962010b8b6001600160a01b0362010b7f858462004d46565b51166106a05162032d92565b158062010bdb575b62010bac575b505062010ba69062004cdf565b62010b5b565b9862010bd09162001ac782859c62007f3762010ba69760018060a01b039262004d46565b9790508a8962010b99565b5050506103e86106a051101562004cfd576001600160a01b0362010c00828b62004d46565b5116600052611fbb6106a05160031b016020528a89604060002054151562010b93565b50909895979498969291939660005b885181101562010cc8576103e86106a051101562004cfd576001600160a01b0362010c5e828b62004d46565b5116600052611fbb6106a05160031b016020526040600020541562010c8f575b62010c899062004cdf565b62010c32565b9962010c899062010cbf906001600160a01b0362010cae8e8d62004d46565b511662001ac7826103805162004d46565b9a905062010c7e565b509850969592919093966106a0516103e8811015806106605262004cfd5760031b611fbc01549862010cff62008068898c62006200565b6105e0526000610820526000610500525b6106605162004cfd57610500518a81101562010ddb5762010d4662010d6391600061066052611fbc6106a05160031b0162004f5e565b90546103805160039290921b1c6001600160a01b03169062032dea565b1562010d82575b62010d786105005162004cdf565b6105005262010d10565b60006106605262010da161050051611fbc6106a05160031b0162004f5e565b60018060a01b0391549060031b1c1662010dc2610820516105e05162004d46565b5262010dd16108205162004cdf565b6108205262010d6a565b50979294959093985095909560005b82811062010e86575050506106605162004cfd576105e051516001600160401b03811162002a9b5762010e2881611fbc6106a05160031b016200509a565b60206105e05101611fbc6106a05160031b01600052602060002060005b83811062010e68575050505062010e5c9062004cdf565b94929590919562010b1a565b82516001600160a01b03168183015560209092019160010162010e45565b62010ecc906001600160a01b0362010e9f828562004d46565b511662010eb3610820516105e05162004d46565b5262010ec26108205162004cdf565b6108205262004cdf565b62010dea565b5050939092506200c24591509062010895565b60405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206f7065726174696f6e207479706560501b6044820152606490fd5b5091905062010f32826201561e565b9290600681101562002a23576002810362010f625760405162461bcd60e51b81528062004cdb600482016200758f565b6003810362011ef65750613f738054600260ff821662010f828162002a18565b1462011eb15760ff19166002179055613f78549060018201821162001e075760018201613f7855611f44549092600019929060005b8651811015620110335762010fda8462010fd2838a62004d46565b511062032899565b84600262010ff462010fed848b62004d46565b516202f17f565b500154106201100f575b620110099062004cdf565b62010fb7565b93506201100960026201102762010fed878a62004d46565b50015494905062010ffe565b5090936000199360005b8751811015620110aa57620110588562010fd2838b62004d46565b8560036201106b62010fed848c62004d46565b5001541062011086575b620110809062004cdf565b6201103d565b94506201108060036201109e62010fed888b62004d46565b50015495905062011075565b5091946001919350620110be875162004e62565b620110ca885162004e62565b620110d6895162004e62565b90620110e38a5162004e62565b9260405197620110f38962002ae9565b88526020880152604087015260608601526080850152600060a0850152600060c0850152600260e0850152600061010085015201600052613f766020526040600020825160018060a01b0381511660018060a01b03198354161782556020810151805190600160401b821162002a9b57600184015482600186015580831062011cf2575b5060200190600184016000526020600020916000905b8282106201168d57505050506040620111ac910151600283016200571f565b60208301518051906001600160401b03821162002a9b5760206003840191620111d684846200509a565b0190600052602060002060005b83811062011678575050505060408301518051906001600160401b03821162002a9b57602060048401916201121984846200509a565b0190600052602060002060005b83811062011663575050505060608301518051906001600160401b03821162002a9b57602060058401916201125c84846200509a565b0190600052602060002060005b8381106201164e575050505060808301518051906001600160401b03821162002a9b57602060068401916201129f84846200509a565b0190600052602060002060005b83811062011639575050505060a0830151600782015560c0830151600882015560e08301519290600901600384101562002a235761010062011304926201130b9560ff80198554169116178355015115159062005803565b426200608f565b9015620115f957613f7854600052613f7660205280600760406000200155613f715562011349613f785491826000526007604060002001546200608f565b919015620115b657600052613f7660205280600860406000200155613f7255613f78546000526009604060002001600260ff1982541617905560005b8251811015620113cb578062000faa620113a4620113c5938662004d46565b51613f7854600052613f7660205262006bbf83600360406000200162004f5e565b62011385565b506000915b8051831015620115b157613f78549283600052613f766020526201140d6201140082600360406000200162004f5e565b90549060031b1c6202f17f565b5054916201141b8362004e62565b9260005b818110620115665750506000906000915b8451831015620115355762011446838662004d46565b516103e8908181101562004cfd5760031b6001015462011467858862004d46565b519182101562004cfd576006620114849260031b01549062005eb0565b9015620114f15762011496916200608f565b929015620114b057620114a99062004cdf565b9162011430565b60405162461bcd60e51b8152602060048201526019602482015278746f74616c566f74696e67506f776572206f766572666c6f7760381b6044820152606490fd5b606460405162461bcd60e51b815260206004820152602060248201527f63757272656e74436c617373566f74696e67506f776572206f766572666c6f776044820152fd5b90956201155f945062000faa9250600052613f7660205262006bbf83600660406000200162004f5e565b91620113d0565b620115ab9087600052613f766020526201159881620115916201140088600360406000200162004f5e565b5062004f5e565b90549060031b1c62001ac7828862004d46565b6201141f565b509050565b60405162461bcd60e51b815260206004820152601b60248201527a657865637574696e6720656e642074696d65206f766572666c6f7760281b6044820152606490fd5b60405162461bcd60e51b8152602060048201526018602482015277766f74696e6720656e642074696d65206f766572666c6f7760401b6044820152606490fd5b600190602084519401938184015501620112ac565b60019060208451940193818401550162011269565b60019060208451940193818401550162011226565b600190602084519401938184015501620111e3565b805180518554602083015190916001600160a01b031690602681101562002a23576001600160a81b03199092161760a09190911b60ff60a01b161785556040015180518051906001870190602090620116e7848462005427565b01906000526020600020906000905b83821062011cd25750505050602081015180516001600160401b03811162002a9b57602060028801926201172b83856203239f565b019160005260206000209060005b8160051c811062011c965750601f198116810362011c51575b5050506040810151805190600160401b821162002a9b57600387015482600389015580831062011bc9575b50602001600387016000526020600020906000905b83821062011ba857505050506060810151805190600160401b821162002a9b57600487015482600489015580831062011b27575b50602001600487016000526020600020906000905b83821062011b065750505050608081015180516001600160401b03811162002a9b57602060058801926201181083856203239f565b019160005260206000209060005b8160051c811062011ac75750601f1981169283820362011a78575b505050506006850160a08201516020815191620118578385620054b5565b019160005260206000206000925b82841062011a1457505050506007850160c082015160208151916201188b8385620054b5565b019160005260206000206000925b828410620119a7575050505060e001518051906001600160401b03821162002a9b57620118d982620118cf600889015462002c79565b60088901620056d5565b602090601f83116001146201192c57928260099360209360019660009262011920575b5050600019600383901b1c191690851b1760088801555b019401910190926201118d565b015190503880620118fc565b906008870160005260206000209160005b601f19851681106201198e575083602093600196938793600997601f1981161062011974575b505050811b01600888015562011913565b015160001960f88460031b161c1916905538808062011963565b919260206001819286850151815501940192016201193d565b80518051906001600160401b03821162002a9b57602090620119ca83866200509a565b0183600052602060002060005b838110620119f657505050506001602081920192019301929062011899565b82516001600160a01b031681830155602090920191600101620119d7565b80518051906001600160401b03821162002a9b5760209062011a3783866200509a565b0183600052602060002060005b83811062011a6357505050506001602081920192019301929062011865565b60019060208451940193818401550162011a44565b6000936000905b808403821062011a9b5750505060051c01553880808062011839565b909194602062011abc6001928589519162011ab68362002fc4565b62032409565b960192019062011a7f565b6000805b6020811062011ae25750838201556001016201181e565b9490602062011afc6001928885519162011ab68362002fc4565b9201950162011acb565b600660208262011b1a60019451876200581b565b01930191019091620117db565b600681810204810362001e0757600683810204830362001e07576004880160005260206000208360060281015b826006028201811062011b69575050620117c6565b806000600692556000600182015562011b856002820162005504565b6000600382015562011b9a6004820162005399565b600060058201550162011b54565b600760208262011bbc60019451876202f19f565b0193019101909162011792565b600781810204810362001e0757600783810204830362001e07576003880160005260206000208360070281015b826007028201811062011c0b5750506201177d565b8062011c196007926200501a565b6000600182015560006002820155600060038201556000600482015562011c436005820162005399565b600060068201550162011bf6565b60009260005b601f1983168303811062011c7557505060051c015538808062011752565b9093602062011c8c60019284885115159162032409565b9501910162011c57565b6000805b6020811062011cb157508382015560010162011739565b9490602062011cc860019288855115159162032409565b9201950162011c9a565b600160208262011ce5839451876200571f565b01930191019091620116f6565b600981810204810362001e0757600983810204830362001e07576001850160005260206000208360090281015b826009028201811062011d3457505062011177565b6000815562011d4660018201620053e8565b62011d5b600282018054906000815562032377565b6003810154600060038301558062011e3b575b506004810154600060048301558062011dcc575b508062011d9b6005600993018054906000815562032377565b62011da96006820162005476565b62011db76007820162005476565b62011dc56008820162005399565b0162011d1f565b600681810204810362001e0757600482016000526020600020906006028101905b81811062011dfc575062011d82565b806000600692556000600182015562011e186002820162005504565b6000600382015562011e2d6004820162005399565b600060058201550162011ded565b600781810204810362001e0757600382016000526020600020906007028101905b81811062011e6b575062011d6e565b8062011e796007926200501a565b6000600182015560006002820155600060038201556000600482015562011ea36005820162005399565b600060068201550162011e5c565b60405162461bcd60e51b815260206004820152601d60248201527f766f74696e6720697320616c726561647920696e2070726f67726573730000006044820152606490fd5b6005919293501462011f055750565b90600080611f4a54905b818110620147bc575b505015620147a0575b60005b602083015190815181101562011f7c5762000faa620076c162011f56620076a16020620067a78662011f769862004d46565b86516001600160a01b03166000908152611f4960205260409020620242c3565b62011f24565b505060005b6020830151805182101562011fc957620076a16020620067a78462011fa69462004d46565b90606482101562004cfd5762011fc3914290611f4b015562004cdf565b62011f81565b50506000905b602083015180518310156200b072578262011fea9162004d46565b516020810151602681101562002a2357156200b02f576020810151602681101562002a23576001036201223257604001906201202b60c08351015162004cef565b51936201204260a06200779b818651015162004cef565b51916201205386518551146202df8a565b6201206286518451146202dff0565b60005b8651811015620121b9576201207b818662004d46565b516103e881101562004cfd57600160ff6007620120a19360031b0154161515146202e052565b620120ad818562004d46565b51620120ba828762004d46565b51906103e882101562004cfd576006620120da9260031b0154906200608f565b90620120e7838862004d46565b51916103e883101562004cfd576006620121069360031b01556202e0aa565b62012112818562004d46565b516201211f828762004d46565b51906103e882101562004cfd5762012160916003906001600160a01b0362012148868d62004d46565b5116600052811b01602052604060002054906200608f565b91906201216e828862004d46565b51906103e882101562004cfd57620121b39362000faa926003906001600160a01b036201219c878f62004d46565b5116600052811b016020526040600020556202e109565b62012065565b5094915091620121cd620121d49162032f53565b9162032e37565b9360405192620121e48462002b3f565b60008452600036813760005b835181101562012215578062000faa620079626201220f938762004d46565b620121f0565b509450926020925062012229915062004cdf565b91905062011fcf565b9091926020820151602681101562002a2357600203620123c9576040809201908151938451916201226c6200c28860a08098015162004cef565b5194835187510362007bd257835185510362007b7e57835186510362007b27575060005b8651811015620123b357620122a6818862004d46565b516103e881101562004cfd5760ff6007620122c89260031b015416156202e162565b620122d4818862004d46565b516103e881101562004cfd5760031b600701805460ff19166001179055620122fd818562004d46565b516201230a828962004d46565b51906103e882101562004cfd576005620123289260031b016200571f565b62012334818662004d46565b5162012341828962004d46565b516103e881101562004cfd5760031b6001015562012360818762004d46565b516201236d828962004d46565b516103e881101562004cfd5760031b600201556201238c818862004d46565b51906103e882101562004cfd5760006006620123ad9360031b015562004cdf565b62012290565b5095915093506020925062012229915062004cdf565b9291906020810151602681101562002a2357600303620123f6576020919262000faa62012229926202e1ae565b6020810151602681101562002a23576004036201269e576201242060c06040830151015162004cef565b51936201243560c06040840151015162004d13565b51906201245c60a06040620124508282880151015162004cef565b51950151015162004d13565b519362012471875184511462000fa3620331b7565b62012484875185511462000fa3620331b7565b62012497875186511462000fa3620331b7565b60005b87518110156201250057620124b0818662004d46565b51906103e882101562004cfd57620124fa916003906001600160a01b03620124d9848d62004d46565b5116600052811b0160205262000faa60406000205462007ce9838a62004d46565b6201249a565b509095919593929360005b83518110156201265b5762012521818762004d46565b516103e881101562004cfd576003906001600160a01b0362012544848862004d46565b5116600052811b016020526201256560406000205462007d56838862004d46565b9062012572838962004d46565b51916103e883101562004cfd57620125b6926003906001600160a01b036201259b878b62004d46565b5116600052811b0160205260406000205562000fa3620332bb565b620125c2818762004d46565b516103e881101562004cfd576003906001600160a01b03620125e5848c62004d46565b5116600052811b016020526201260660406000205462006814838862004d46565b91905062012615818862004d46565b51916103e883101562004cfd5762012655926003906001600160a01b036201263e858e62004d46565b5116600052811b0160205260406000205562004cdf565b6201250b565b50936201267591929693506200847962007e479162032f53565b9260005b835181101562012215578062000faa6200796262012698938762004d46565b62012679565b6020810151602681101562002a2357600503620126c8576020919262000faa62012229926202ec1a565b6020810151602681101562002a23576006036201288f57620126f260c06040830151015162004cef565b51936201271960a060406201270d8282870151015162004cef565b51940151015162004d13565b519285518351036200db485785518451036200dafb5760005b8651811015620127985762012748818562004d46565b51906103e882101562004cfd5762012792916003906001600160a01b0362012771848c62004d46565b5116600052811b0160205262000faa60406000205462007ce9838962004d46565b62012732565b509060005b86518110156201283957620127b3818562004d46565b516103e881101562004cfd576003906001600160a01b03620127d6848b62004d46565b5116600052811b01602052620127f760406000205462007d56838862004d46565b919062012805828762004d46565b51906103e882101562004cfd57620128339362000faa926003906001600160a01b036201259b878f62004d46565b6201279d565b5094916201284e919350620121cd9062032f53565b91604051946201285e8662002b3f565b60008652600036813760005b835181101562012215578062000faa6200796262012889938762004d46565b6201286a565b6020810151602681101562002a2357600703620129a15760400192620128ba60c08551015162004cef565b5191620128cc60a08651015162004cef565b5194515191620128e4845187511462000fa3620331b7565b60005b845181101562012215576201299b9062000faa6001600160a01b03806201290f848a62004d46565b51166000528660028b6201298b6201294e876201294681611f4097886020526200880e60ff604060002054161562000fa362033288565b519362004d46565b5191620088728d60405196620129648862002a7f565b60018852886200dc958c60208b01946000865260408c0197885260608c01998a5262004d46565b519101556200888d838962004d46565b620128e7565b6020819493940151602681101562002a235760080362012a385760c06040620129ce920151015162004cef565b519160005b835181101562012a265762012a20906001600160a01b0380620129f7838862004d46565b5116600052611f4090816020526200ddb1600160ff6040600020541615151462000fa3620331e7565b620129d3565b50926020919250620122299062004cdf565b6020810151602681101562002a235760090362012aba5760c0604062012a62920151015162004cef565b519160005b835181101562012a265762012ab4906001600160a01b038062012a8b838862004d46565b5116600052611f4090816020526200de9f600160ff6040600020541615151462000fa3620331e7565b62012a67565b6020810151602681101562002a2357600a0362012b68576040019062012aeb60a06200df3360c08551015162004cef565b519262012b00835185511462000fa3620331b7565b60005b835181101562012b555762012b4f906001600160a01b038062012b27838862004d46565b5116600052611f40806020526200dfa2600160ff6040600020541615151462000fa3620331e7565b62012b03565b5093620122299193506020925062004cdf565b602081949392940151602681101562002a2357600b0362012c1b576040019262012b9760c08551015162004cef565b519351519162012baf855184511462000fa3620331b7565b60005b855181101562012c085762012c029062000faa6001600160a01b038062012bda848b62004d46565b5116600052611f40806020526200e084600160ff6040600020541615151462000fa3620331e7565b62012bb2565b5093509160209150620122299062004cdf565b9091926020820151602681101562002a2357600c0362012cf8576060604083015101519262012c4a846202d698565b60005b845181101562012b555760c062012c6d8260606040880151015162004d46565b5101511562012cba5762012c8e62008c808260606040880151015162004d46565b611f4254908160001981011162001e0757600562008ca962012cb4936000190162005cba565b62012c4d565b62012cd262008cd38260606040880151015162004d46565b611f4254908160001981011162001e0757600562008ca962012cb4936000190162005c7a565b9291906020810151602681101562002a2357600d0362012ddc5760400192602062012d2860a08651015162004cef565b51945101519162012d3d85518451146202dd8c565b60005b855181101562012c08578062012d5b62012d9c928662004d46565b511562012da25762012d7262008d8c828962004d46565b62012d8a60ff600562008db662008daf858c62004d46565b600562008dd262008daf838a62004d46565b62012d40565b62012db262008dfb828962004d46565b62012dca60ff600562008db662008e1e858c62004d46565b600562008dd262008e1e838a62004d46565b6020819492940151602681101562002a2357600e0362012e8b5760400190602062012e0c60a08451015162004cef565b51925101519362012e2183518651146202dd8c565b60005b835181101562012c08578062012e3f62012e4b928862004d46565b5162012e515762004cdf565b62012e24565b62012e6162008eb6828762004d46565b62012e7960ff600562008ed962008daf858a62004d46565b600562008ca962008daf838862004d46565b906020829493940151602681101562002a2357600f0362012f69576060604083015101519262012ebb846202d698565b60005b845181101562012b555760c062012ede8260606040880151015162004d46565b5101511562012f2b5762012eff62008c808260606040880151015162004d46565b611f4254908160001981011162001e0757600562008dd262012f25936000190162005cba565b62012ebe565b62012f4362008cd38260606040880151015162004d46565b611f4254908160001981011162001e0757600562008dd262012f25936000190162005c7a565b906020819493940151602681101562002a235760100362012fda57604001519062012f9d60a0608084015193015162004cef565b519362012fb2835186511462000fa3620331b7565b60005b835181101562012c08578062000faa6200902b62012fd4938762004d46565b62012fb5565b6020819492940151602681101562002a23576011036201323c57604001906201300e60a06200df3360c08551015162004cef565b51936201301f83518651146202d510565b60005b83518110156201309957620130939062000faa6001600160a01b03806201304a848962004d46565b5116600052611f45806020526201306c60406000205462006814868d62004d46565b9190926201307b868b62004d46565b511660005260205260406000205562000fa36203316d565b62013022565b50935090620130a89062032e37565b90611f465493620130bf6200806884518762006200565b9060009260005b87811062013221575060005b855181101562013179576000805b8981106201312a575b501562013102575b620130fc9062004cdf565b620130d2565b93620130fc9062013121906001600160a01b036200e724888a62004d46565b949050620130f1565b620131358162004eb6565b90546001600160a01b0360039290921b1c81169062013155858b62004d46565b5116146201316e57620131689062004cdf565b620130e0565b5050600138620130e9565b5095509392506201318a8262004e62565b8051906001600160401b03821162002a9b57602090620131aa8362004ff7565b01611f46600052602060002060005b83811062013203575050505060005b828110620131e0575050506201222960209162004cdf565b620131fd9062000faa6001600160a01b03620019fb838662004d46565b620131c8565b82516001600160a01b031681830155602090920191600101620131b9565b936200e87062013236916200e8528762004eb6565b620130c6565b6020819492940151602681101562002a23576012036201348157604001906201327060a06200df3360c08551015162004cef565b51936201328183518651146202d510565b60005b8351811015620132d457620132ce9062000faa6001600160a01b0380620132ac848962004d46565b5116600052611f45806020526201306c60406000205462007d56868d62004d46565b62013284565b5093509190620132e49062032e37565b611f4654620132f38162004e62565b906000926000915b808310620133a857505050620133118262004e62565b8051906001600160401b03821162002a9b57602090620133318362004ff7565b01611f46600052602060002060005b8381106201338a575050505060005b82811062013367575050506201222960209162004cdf565b620133849062000faa6001600160a01b03620019fb838662004d46565b6201334f565b82516001600160a01b03168183015560209092019160010162013340565b91956000959193959760005b85518110156201347257620133c98962004eb6565b90546001600160a01b0360039290921b1c811690620133e9838962004d46565b5116146201340257620133fc9062004cdf565b620133b4565b509750956001959391955b8062013441575b156201342c57620134259062004cdf565b91620132fb565b936200e87062013425916200e8528762004eb6565b506201344d8162004eb6565b60018060a01b0391549060031b1c16600052611f456020526040600020541562013414565b5097969096959391956201340d565b6020810151602681101562002a2357601303620134da5760408091015101519260005b8451811015620134c9578062000faa6200959f620134c3938862004d46565b620134a4565b509250906201222960209162004cdf565b6020810151602681101562002a23576014036201368757604001906201350560c08351015162004cef565b51936201351c60a06200779b818651015162004cef565b51916201352d86518551146202df8a565b6201353c86518451146202dff0565b60005b8651811015620136325762013555818562004d46565b5162013562828762004d46565b51906103e882101562004cfd576006620135829260031b0154906200608f565b906201358f838862004d46565b51916103e883101562004cfd576006620135ae9360031b01556202e0aa565b620135ba818562004d46565b51620135c7828762004d46565b51906103e882101562004cfd57620135f0916003906001600160a01b0362012148868d62004d46565b9190620135fe828862004d46565b51906103e882101562004cfd576201362c9362000faa926003906001600160a01b036201219c878f62004d46565b6201353f565b5094915091620121cd620136469162032f53565b9360405192620136568462002b3f565b60008452600036813760005b835181101562012215578062000faa6200796262013681938762004d46565b62013662565b6020810151602681101562002a2357601503620136b1576020919262000faa62012229926202e1ae565b6020810151602681101562002a23576016036201370d5760c06040620136db920151015162004cef565b519260005b8451811015620134c957620137079062000faa6001600160a01b0362009d36838962004d46565b620136e0565b6020810151602681101562002a23576017036201376a5760405162461bcd60e51b81526020600482015260296024820152600080516020620339cc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a2357601803620137d55760c0604062013794920151015162004cef565b5192600160ff19611fb6541617611fb65560005b8451811015620134c957620137cf9062000faa6001600160a01b0362009e02838962004d46565b620137a8565b6020819392930151602681101562002a23576019036201394a5760008091604082910160a08082510151805162013911575b5050519060e0820151916201382b6200680d60c060018060a01b0393015162004cef565b511690602083519301915af13d1562013908573d906201384b8262002f5b565b916201385b604051938462002b94565b82523d6000602084013e5b156201387a57506201222960209162004cdf565b62004cdb90620138e760405191600080516020620338cc833981519152602084015278039bab1b1b2b9b9b33ab617102932ba3ab937103230ba309d1603d1b6040840152828151620138d6816059946020868601910162002e01565b810103603981018452018262002b94565b60405162461bcd60e51b815260206004820152918291602483019062002e26565b60609062013866565b6201391c9062004cef565b51516201392b575b8062013807565b8192506200680d90620139419251015162004cef565b51903862013924565b6020810151602681101562002a2357601a0362013a005760a0604062013974920151015162004cef565b516201398460038251146202d510565b6201398f8162004cef565b5191620139a8620139a08362004d13565b519262004d24565b51916200f9d55760209262012229926001036200a04357620139d2620139e091611fb1546200608f565b611fb15562000fa362033108565b62000faa620139f2611fb2546200607c565b611fb25562000fa362033142565b6020810151602681101562002a2357601b0362013e305750919062013a30611faf546200225a6200a0b962033044565b505062013a3c62033108565b506000805b6103e8811062013de4575b505062013a5862006161565b62013a66613f745462004e62565b906000946000905b6103e882101562013dd7578160031b9460ff6007870154161562013bbf5760009660028701541562013bae57600098975b62004cfd57600487015489101562013b945762013ac0896004890162004f5e565b9054600391821b1c6001600160a01b031660008181529189016020526040918290205491999162013af390889062005eb0565b9a9062013aff62033108565b62013b0a9162004cac565b60009a60028b015462013b1d9162005eb0565b919062013b2962033108565b62013b349162004cac565b82600052611f476020526000209081549062013b50916200608f565b90915562013b5d62033108565b62013b689162004cac565b62013b74828962004d46565b5262013b809062004cdf565b9862013b8c9062004cdf565b989762013a9f565b9290955062013ba69196975062004cdf565b909462013a6e565b9290955062013ba691965062004cdf565b95969392509350505b62013bd38262004e62565b9160009160005b82811062013d4157505050611f48549162013bfa62008068848462006200565b926000906000905b80821062013d2457505060005b83811062013c8e5750508251929150506001600160401b03821162002a9b5760209062013c3c8362004fbc565b01611f48600052602060002060005b83811062013c705750505050620122296020916000611fb1556000611fb25562004cdf565b82516001600160a01b03168183015560209092019160010162013c4b565b6000805b83811062013cdc575b501562013cb4575b62013cae9062004cdf565b62013c0f565b9062013cae9062013cd3906001600160a01b03620081f0858762004d46565b91905062013ca3565b6001600160a01b038062013cf1858862004d46565b51169062013d00838a62004d46565b51161462013d195762013d139062004cdf565b62013c92565b505060013862013c9b565b9091620081fe62013d3a91620094f58562004e9a565b9062013c02565b6000805b85811062013d8f575b501562013d67575b62013d619062004cdf565b62013bda565b9262013d619062013d86906001600160a01b03620081f0878662004d46565b93905062013d56565b6001600160a01b038062013da4858762004d46565b51169062013db3838a62004d46565b51161462013dcc5762013dc69062004cdf565b62013d45565b505060013862013d4e565b9394959291505062013bc8565b8060039594951b9060ff6007830154161562013e26576200a4f86200746162000faa946200a4ec62013e1d9560026200a4e28762005e1c565b93929362013a41565b5093929362013a4c565b6020810151602681101562002a2357601c0362013e8d5760405162461bcd60e51b8152602060048201526029602482015260008051602062033acc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a2357601d0362013eb3575b506201222960209162004cdf565b9290916020840151602681101562002a2357601e03620145d557604084019060a09062013ee4828451015162004cef565b515162013ef5838551015162004d13565b5151036200ade95762013f0c828451015162004cef565b515162013f1d838551015162004d24565b5151036200ad6d5762013f34828451015162004cef565b519462013f45838551015162004d13565b519162013f5a6200a641858751015162004d24565b519585518751036200ad0a5760005b865181101562013fc25762013f7f818862004d46565b51906103e882101562004cfd57600362013fbc9260018060a01b038d5116600052811b0160205262000faa60406000205462007ce9838c62004d46565b62013f69565b5090969192939660005b86518110156201406b5762013fe2818862004d46565b516103e881101562004cfd5760039060018060a01b038c5116600052811b016020526201401a60406000205462007d56838b62004d46565b919062014028828a62004d46565b51906103e882101562004cfd576201406593600362000faa938f60018060a01b03905116600052811b0160205260406000205562000fa3620332bb565b62013fcc565b50939692979550936201407e9062032f53565b96604051966201408e8862002b78565b60018852602036818a013786516001600160a01b0316620140af8962004cef565b5260405196620140bf8862002b3f565b600088526000610760525b895161076051908110156201447c57620140e5908b62004d46565b5161072052620140f6885162004e62565b99600097620141068b5162004e62565b6109405260009760005b8b51811015620141d6578d8c620141406001600160a01b0362014134858462004d46565b51166107205162032d3b565b158062014190575b62014161575b50506201415b9062004cdf565b62014110565b9b620141859162001ac782859f62007f376201415b9760018060a01b039262004d46565b9a90508d8c6201414e565b5050506103e861072051101562004cfd576001600160a01b03620141b5828e62004d46565b5116600052600361072051811b016020528d8c604060002054151562014148565b50909b989a99949691929395979b60005b8b518110156201427b576103e861072051101562004cfd576001600160a01b0362014213828e62004d46565b5116600052600361072051811b016020526040600020541562014242575b6201423c9062004cdf565b620141e7565b9c620142726201423c918f620142618f9160018060a01b039262004d46565b511662001ac7826109405162004d46565b9d905062014231565b509b5098959092949691939661072051996103e88b10159c8d62004cfd57620142b26200806860048f9e60031b01549e8f62006200565b6108e0526000610a20528d60009e5b62004cfd578d8f101562014380575060009d62014309620142ec8260046107205160031b0162004f5e565b90546109405160039290921b1c6001600160a01b03169062032dea565b1562014323575b6201431c8f9162004cdf565b9e620142c1565b6201431c9e5060009e8f91620143438160046107205160031b0162004f5e565b60018060a01b0391549060031b1c1662014364610a20516108e05162004d46565b5262014373610a205162004cdf565b610a205291505062014310565b9396999b929d509396999094979b5060005b828110620144305750505062004cfd576108e051516001600160401b03811162002a9b57620143cb8160046107205160031b016200509a565b60206108e051019060046107205160031b0160005260206000209160005b828110620144125750505050620144036107605162004cdf565b610760529598909498620140ca565b81516001600160a01b031681850155602090910190600101620143e9565b62014476906001600160a01b0362014449828562004d46565b51166201445d610a20516108e05162004d46565b526201446c610a205162004cdf565b610a205262004cdf565b62014392565b509492975094955091965060009460005b8751811015620144e057620144ab6200abc66200abb9838962004d46565b80620144c4575b50620144be9062004cdf565b6201448d565b906200abfc620144d998620144be936200608f565b90620144b2565b5096509450929091508062014502575b5050620122296020915b915062013ea5565b6201452d9060018060a01b038351166000526200ac5a611f459182602052604060002054906200608f565b60018060a01b03835116600052602052604060002055600080611f4654905b8181106201458b575b5050916201222991602093156201456f575b5091620144f0565b5162014584906001600160a01b0316620065d6565b3862014567565b620145968162004eb6565b9054855160039290921b1c6001600160a01b03908116911614620145c557620145bf9062004cdf565b6201454c565b5060019150829050602062014555565b9190926020810151602681101562002a2357601f0362014610576020916201460a6200ae9d6040620122299401515162004cef565b620144fa565b6020810151602681101562002a235760200362014636575b5062012229602091620144fa565b6020810151602681101562002a2357602180910362014657575b5062014628565b602082015160268110156200b01a57602203620146945750506201222960209160ff19611fb65416611fb6556201468d62005087565b9162014650565b602082015160268110156200b01a57602303620146bb575b5050620122296020916201468d565b60208201519060268210156201478c576024809203620146dd575b50620146ac565b602083015160268110156201477957602514620146d65760208301519060268210156201476557506015036201472857506020916201472062012229926202e1ae565b9138620146d6565b60649060166040519162461bcd60e51b83526020600484015282015275496e76616c6964206f7065726174696f6e207479706560501b6044820152fd5b9050634e487b7160e01b6000526004526000fd5b50634e487b7160e01b6000526004526000fd5b634e487b7160e01b60005260045260246000fd5b8151620147b6906001600160a01b031662006600565b62011f21565b620147c78162004f0a565b9054865160039290921b1c6001600160a01b03908116911614620147f657620147f09062004cdf565b62011f0f565b5050506001388062011f18565b82516001600160a01b0316600160401b82101562002a9b5762001a08826001620148329401613f025562004eee565b386200bbb0565b620148448162004eee565b9054865160039290921b1c6001600160a01b0390811691161462014873576201486d9062004cdf565b6200bb9f565b50506001386200bba8565b82516001600160a01b0316818301556020909201916001016200bad5565b82516001600160a01b0316818301556020909201916001016200b988565b600191820180546001600160a01b03909216848601559390910192906200b8d7565b613f6d60005262014903906000805160206203396c83398151915290810190830162004fa3565b386200b898565b600180826201491b82948662014d65565b019201920191906200b85a565b613f6c600052600080516020620337ac833981519152908282015b8183018110620149555750506200b81f565b806201496360019262005399565b0162014943565b600191820180546001600160a01b03909216848601559390910192906200b7f0565b613f6b600052620149b3906000805160206203376c83398151915290810190830162004fa3565b386200b7b1565b6001809193019182549381613f0301550190916200b754565b82516001600160a01b0316818301556020909201916001016200b66d565b62014a0c90613f026000528484600020918201910162004fa3565b386200b65d565b82516001600160a01b0316818301556020909201916001016200b489565b62014a4c90613ef96000528484600020918201910162004fa3565b386200b479565b8062014a759160031b600160ff60078301541615151462014a7b575062004cdf565b6200b3ce565b62014a8e60048201611fbc830162014efe565b611fbf8101600160ff19825416179055805481611fb801556001810154611fb98201556002810154611fba82015562014acf60058201611fbd830162014d65565b611fbe6006820154910155386200a043565b600660208262014af560019451866200581b565b019201920191906200b1d7565b600681810204810362001e0757600683810204830362001e0757613efa6000527f2dfc264c6ecd0c6ea7ea3726867a09cc7eed901a6e437c010038bab559d48ed86006840281015b826006028201811062014b5f5750506200b1c4565b806000600692556000600182015562014b7b6002820162005504565b6000600382015562014b906004820162005399565b600060058201550162014b4a565b600660208262014bb260019451866200581b565b019201920191906200b14c565b8060060290600682040362001e07578260060260068104840362001e0757600090613efb82526020822092830192015b82811062014bff5750506200b139565b80826006925582600182015562014c196002820162005504565b82600382015562014c2d6004820162005399565b8260058201550162014bef565b608460405162461bcd60e51b815260206004820152604060248201526000805160206203394c83398151915260448201527f656d2073686f756c64206e6f742072657475726e20766f7465206e65656465646064820152fd5b60405162461bcd60e51b815260206004820152604760248201526000805160206203394c83398151915260448201527f656d2073686f756c64206e6f742072657475726e206120766f74696e672072756064820152661b19481b1a5cdd60ca1b608482015260a490fd5b81811462014d61578154916001600160401b03831162002a9b5762014d2383836200509a565b60005260206000209060005260206000208154916000925b84841062014d4a575050505050565b600180919201938454928185015501929062014d3b565b5050565b9080821462014d615762014d7a815462002c79565b906001600160401b03821162002a9b57819062014da48262014d9d865462002c79565b86620056d5565b600090601f831160011462014ddd5760009262014dd15750508160011b916000199060031b1c1916179055565b01549050388062005768565b81526020808220858352818320935090601f1985169083905b82821062014e3257505090846001959493921062014e1857505050811b019055565b015460001960f88460031b161c19169055388080620057b5565b849581929585015481556001809101960194019062014df6565b81811462014d615781549162014e63838362005427565b6000526020600020906000526020600020906000905b83821062014e875750505050565b8062014e966001928562014d65565b92810192918101910162014e79565b81811462014d615781549162014ebc8383620054b5565b6000526020600020906000526020600020906000905b83821062014ee05750505050565b8062014eef6001928562014cfd565b92810192918101910162014ed2565b81811462014d61578154916001600160401b03831162002a9b5762014f2483836200509a565b60005260206000209060005260206000208154916000925b84841062014f4b575050505050565b600191820180546001600160a01b039092168486015593909101929062014f3c565b81811462014d615781549162014f848383620054b5565b6000526020600020906000526020600020906000905b83821062014fa85750505050565b8062014fb76001928562014efe565b92810192918101910162014f9a565b81811462014d615781549162014fdd8383620055b8565b6000526020600020906000526020600020906000905b838210620150015750505050565b8060019184036201501e575b600880910193019101909162014ff3565b805484556201504b8280860190830160ff906201503f82825416846200569a565b5460081c1690620056b4565b6002808201549085015562015067600380830190860162014cfd565b600480850190820180820362015080575b50506201500d565b6201508b9162014e4c565b6201509d600580830190860162014ea5565b620150af600680830190860162014f6d565b620150c1600780830190860162014d65565b388062015078565b919062005d3057808203620150dc575050565b60ff60058062002c3b94620150f5848654168262005681565b6001850154600182015562015111600286016002830162014fc6565b600385015460038201556201512d600486016004830162014d65565b0192016201513f8282541684620057f2565b5460081c169062005803565b9080821462014d6157908154906000915b606483106201516b5750505050565b60018091940192835494818401550191926201515c565b90611f42549060009060208401805151906201519e8262002c61565b91620151ae604051938462002b94565b808352620151bf601f199162002c61565b01366020840137620151d48151518662005eb0565b9015620155c657620151e69062004e62565b92849180515115620155bb57620152008793929362004e62565b95915b81515183101562015404576000958687805b8c8c83109182156201537d576201522e89895162004d46565b5194600092839662015241859662015a04565b620152528588846001948562015bb7565b6201533e575b508284118062015328575b15620152cd575050509183918b620152c3575b600685101562002a23578c8f95600314620152a3575b5050620152999062004cdf565b9190925062015215565b9b620152ba9162001ac78262015299959f62004d46565b9a908c6201528c565b60009b5062015276565b909391809593148062015312575b15620153045750600685101562002a23578c8f95600314620152a3575050620152999062004cdf565b945050620152999062004cdf565b5050600685101562002a23578e851515620152db565b5050600686101562002a23578f86151562015263565b92935093509450620153508462005cba565b5001549060ff620153618562005cba565b505416946003620153728662005cba565b500154933862015258565b50505050969096949391946201539f8162015399858a62004d46565b620035e5565b600681101562002a2357600314620153c6575b50620153be9062004cdf565b919262015203565b6000905b808210620153d95750620153b2565b9094620092e0620153fd91620153f0888c62004d46565b5162001ac7828c62004d46565b90620153ca565b9650505094509150600093845b83518610156201555657620154316201542b878662004d46565b62005673565b9060068083101562002a235760029283036201545c57505062015455909562004cdf565b9462015411565b6201546c6201542b898862004d46565b928184101562002a235760018094148062015542575b15620154975750505062015455909562004cdf565b620154ac6201542b8a899b9694959b62004d46565b928084101562002a23576004809414928362015516575b5082620154eb575b5050620154df575b50620154559062004cdf565b955062015455620154d3565b90915088101562015501578714153880620154cb565b602182634e487b7160e01b6000525260246000fd5b908093508a10156201552d578914159138620154c3565b602184634e487b7160e01b6000525260246000fd5b508183101562002a23578083141562015482565b925092909350600682101562002a235760038203620155b2575b6201557b8162004e62565b9360005b8281106201558e575050509190565b806201559f620155ac928462004d46565b5162001ac7828962004d46565b6201557f565b50600062015570565b509450505092509190565b60405162461bcd60e51b815260206004820152602a60248201527f546865206c656e677468206f6620766f74696e672072756c65206c697374206960448201526973206f766572666c6f7760b01b6064820152608490fd5b90611f43549060009060208401805151906201563a8262002c61565b916201564a604051938462002b94565b8083526201565b601f199162002c61565b01366020840137620156708151518662005eb0565b9015620155c657620156829062004e62565b92849180515115620155bb576201569c8793929362004e62565b95915b8151518310156201588a576000958680805b8c8c82109283156201581557620156ca89895162004d46565b5194600092620156eb848683829a620156e4849b62015a04565b8362015bb7565b620157d6575b81841180620157c0575b1562015764575050509083928b6201575a575b600685101562002a23578c8f956003146201573a575b5050620157319062004cdf565b909250620156b1565b9b620157519162001ac78262015731959f62004d46565b9a908c62015724565b60009b506201570e565b908094939592951480620157aa575b156201579c5750600685101562002a23578c8f956003146201573a575050620157319062004cdf565b945050620157319062004cdf565b5050600685101562002a23578e85151562015773565b5050600686101562002a23578f861515620156fb565b9450945090506001620157e98362005c7a565b5001549060ff620157fa8462005c7a565b5054169460036201580b8562005c7a565b50015494620156f1565b935050505096909694939194620158328162015399858a62004d46565b600681101562002a235760031462015859575b50620158519062004cdf565b91926201569f565b6000905b8082106201586c575062015845565b9094620092e06201588391620153f0888c62004d46565b906201585d565b9650505094509150600093845b8351861015620159ac57620158b16201542b878662004d46565b9060068083101562002a23576002928303620158dc575050620158d5909562004cdf565b9462015897565b620158ec6201542b898862004d46565b928184101562002a235760038094148062015998575b156201591757505050620158d5909562004cdf565b6201592c6201542b8a899b9694959b62004d46565b928084101562002a23576005809414928362015981575b50826201596b575b50506201595f575b50620158d59062004cdf565b9550620158d562015953565b90915088101562002a235787141538806201594b565b908093508a101562002a2357891415913862015943565b508183101562002a23578083141562015902565b925092909350600682101562002a235760038203620159fb575b620159d18162004e62565b9360005b828110620159e4575050509190565b806201559f620159f5928462004d46565b620159d5565b506000620159c6565b1562015a0c57565b60405162461bcd60e51b815260206004820152602860248201527f506c7567696e466163746f72793a20706c7567696e20696e646578206f7574206044820152676f662072616e676560c01b6064820152608490fd5b9062002c3b606160405180947f436865636b696e6720636f6e646974696f6e206578703a20706c7567696e206960208301527f6e646578206f7574206f662072616e67652c20706c7567696e20696e6465783a6040830152600160fd1b606083015262015ad9815180926020868601910162002e01565b810103604181018552018362002b94565b606d62002c3b919392936040519485917f436865636b696e6720636f6e646974696f6e206578703a206e6f646520696e6460208401527f6578206f7574206f662072616e67652c20706c7567696e20696e6465783a2000604084015262015b5c815180926020605f8701910162002e01565b82016d016103737b2329034b73232bc1d160951b605f82015262015b8a825180936020878501910162002e01565b0103604d81018552018362002b94565b805482101562004cfd5760005260206000209060031b0190600090565b93929190841562015f485762015be1611f4254841062000fa362015bdb86620050f5565b62015a62565b62015c18600262015bf28562005cba565b500154851062000fa362015c0686620050f5565b62015c1188620050f5565b9062015aea565b841562015f295762015c48600162015c3f86600262015c378862005cba565b500162015b9a565b50015460ff1690565b945b62015c558662002fc4565b8562015c6657505050505050600090565b62015c718662002fc4565b60039580870362015c885750505050505050600190565b62015c938162002fc4565b6004810362015ca85750505050505050600090565b62015cb38162002fc4565b6001810362015cc95750620032d2955062015f78565b91959392949062015cda8362002fc4565b600280931462015cf1575b50505050505050600090565b801562015f0b5762015d1b600162015d0f848662015c378962005cba565b50015460081c60ff1690565b935b811562015eef578562015d36848662015c378562005cba565b500154965b62015d468862004e62565b9860005b89811062015e645750505050505062015d638262002a18565b6001820362015dc657505050906001916000915b81831062015d855750505090565b9091928062015da3575b62015d9b909362004cdf565b919062015d77565b5062015d9b62015dbe62015db8858462004d46565b51151590565b905062015d8f565b62015dd18262002a18565b810362015e2b5750509060009182915b81831062015def5750505090565b909192801562015e0e575b62015e06909362004cdf565b919062015de1565b5062015e0662015e2362015db8858462004d46565b905062015dfa565b90915062015e398162002a18565b1462015e4d57503880808080808062015ce5565b62015e6062015db8620032d29262004cef565b1590565b808b62015ead828c8a8c8a8c1562015ece5762015ea3949262015e99949262015c3762015e919362005cba565b500162004f5e565b90549060031b1c90565b8787878b62015bb7565b62015ec162015ec89462000faa9362004d46565b9015159052565b62015d4a565b62015ee9949262015e99949262015c3762015e919362005c7a565b62015ea3565b8562015f01848662015c378562005c7a565b5001549662015d3b565b62015f22600162015d0f848662015c378962005c7a565b9362015d1d565b62015f41600162015c3f86600262015c378862005c7a565b9462015c4a565b62015f61611f4354841062000fa362015bdb86620050f5565b62015f72600262015bf28562005c7a565b62015c18565b9392600462015fc291866000146201619057600262015f9d878262015c378562005cba565b500154955b87156201617f57600262015c3762015fba9362005cba565b5001620036ac565b916032841115620161735760338410158062016167575b6201615a576097841015806201614e575b620161415760d38410158062016134575b620161285761012d841015806201611c575b6201610f576101918410158062016102575b620160f5576101af84101580620160e8575b620160db576101cd84101580620160ce575b620160c1576101f584101580620160b4575b620160a757610259841015806201609a575b6201608c57506102bd831015620160815750505050600090565b620032d293620241b4565b9050620032d293506202b4f1565b506102bc84111562016067565b50620032d293506201e3df565b5061025884111562016055565b50620032d293506202be55565b506101f484111562016043565b50620032d293506202c8b8565b506101cc84111562016031565b50620032d2935062023923565b506101ae8411156201601f565b50620032d2935062028765565b5061019084106201600d565b50620032d293620161ad565b5061012c84111562015ffb565b50620032d2935062023f9f565b5060b484111562015fea565b5050620032d2926201f03f565b50609584111562015fd9565b50620032d29362025742565b600262015c3762015fba9362005c7a565b6002620161a3878262015c378562005c7a565b5001549562015fa2565b9260d381146201677c5760d481146201676f5760d58114620167625760d68114620167555760d78114620167485760d881146201673b5760d981146201672f5760da8114620167225760db8114620167155760dc8114620167095760dd8114620166fa5760de8114620166eb5760df8114620166de5760e08114620166d15760e18114620166c55760e28114620166b85760e38114620166ab5760e481146201669f5760e58114620166905760e68114620166815760e78114620166745760e88114620166675760e981146201665a5760ea81146201664d5760eb8114620166405760ec8114620166335760ed8114620166265760ee8114620166195760ef81146201660c5760f08114620165ff5760f18114620165f25760f28114620165e55760f38114620165d85760f48114620165cb5760f58114620165be5760f68114620165b15760f78114620165a45760f88114620165975760f981146201658b5760fa81146201657f5760fb8114620165735760fc8114620165675760fd81146201655b5760fe81146201654f5760ff811462016543576101008114620165375761010181146201652b5761010281146201651f5761010381146201651357610104811462016507576101058114620164fb576101068114620164ef576101078114620164e3576101088114620164d7576101098114620164cb5761010a8114620164bf5761010b8114620164b35761010c8114620164a75761010d81146201649b5761010e81146201648f5761010f811462016483576101108114620164775761011181146201646b5761011281146201645f57610113811462016453576101148114620164475761011581146201643b57610116146201643057505050600090565b620032d2926201da96565b50620032d2926201d86d565b50620032d2926201d644565b50620032d2926201d341565b50620032d2926201d120565b50620032d2926201ceff565b50620032d2926201cccd565b50620032d2926201cb04565b50620032d2926201c93b565b50620032d2926201c703565b50620032d2926201c53c565b50620032d2926201c20d565b50620032d2926201bfdb565b50620032d2926201be12565b50620032d2926201bc49565b50620032d2926201ba84565b50620032d2926201b84c565b50620032d2926201b685565b50620032d2926201b34f565b50620032d2926201b0ef565b50620032d2926201af1e565b50620032d2926201ad3d565b50620032d2926201ab76565b50620032d2926201a920565b50620032d2926201a757565b50620032d2926201a58e565b50620032d2926201a2ad565b50620032d29262019fad565b50620032d29262019cc0565b50620032d292620199c0565b50620032d292506201983b565b50620032d29250620196f6565b50620032d2925062019584565b50620032d292506201943f565b50620032d29250620192fa565b50620032d29250620191b6565b50620032d2925062019041565b50620032d2925062018efd565b50620032d2925062018db9565b50620032d2925062018c78565b50620032d2925062018b35565b50620032d29250620189f4565b50620032d29250620188ab565b50620032d2925062018767565b50620032d2925062018623565b50620032d29250620184ae565b50620032d2925062018310565b50620032d29250620181cd565b509050620032d2915062018172565b509050620032d2915062018115565b50620032d29262017ed7565b50620032d2925062017d48565b50620032d2925062017bf9565b50620032d292620179e2565b50620032d292506201783a565b50620032d29250620176ed565b509050620032d2915062017692565b509050620032d2915062017625565b50620032d292620173d9565b50620032d292506201724a565b50620032d29250620170f5565b50620032d29262016ec7565b50620032d2925062016d0f565b50620032d2925062016bb3565b50620032d2925062016ab2565b50620032d2925062016985565b50620032d2925062016884565b50620032d2925090602001906001825151036201682b576001620167a1835162004cef565b515103620167d157620167b4906201dd9d565b919015620065cf576200680d620167cc915162004cef565b511090565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231313a205468652055494e545f324441525241595b305d206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3231313a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b90602001906001825151036201692c576001620168a2835162004cef565b515103620168d257620168b5906201dd9d565b919015620065cf576200680d620168cd915162004cef565b511190565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231323a205468652055494e545f324441525241595b305d206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3231323a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b906020019060018251510362016a59576002620169a3835162004cef565b515103620169fd57620169b6906201dd9d565b9015620065cf57620169cd6200680d835162004cef565b518110159182620169dd57505090565b620169f7919250620169f0905162004cef565b5162004d13565b51101590565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231333a205468652055494e545f324441525241595b305d206c60448201526d32b733ba341034b9903737ba101960911b6064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3231333a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b906020019060018251510362016b5a57600162016ad0835162004cef565b51510362016b005762016ae3906201dd9d565b919015620065cf576200680d62016afb915162004cef565b511490565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231343a205468652055494e545f324441525241595b305d206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3231343a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b90604001600191828251510362016cb5578262016bd1835162004cef565b51510362016c5b5762016be4906201e110565b15620065c757829160009182945b62016c00575b505050905090565b805185101562016c55576001600160a01b038062016c1f878462004d46565b51169062016c326200680d855162004cef565b51160362016c4d5762016c46849562004cdf565b9462016bf2565b505091505090565b62016bf8565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3231353a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231353a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90604001600191828251510362016e6d578262016d2d835162004cef565b51511062016e135762016d40906201e110565b15620065c757600091835b62016d57575b50505090565b815183101562016e0d57600080855b62016d8f575b501562016d865762016d7f849362004cdf565b9262016d4b565b50505050600090565b62016da08396949295965162004cef565b515181101562016e02576001600160a01b038062016dbf888562004d46565b51169062016dd3836200743f875162004cef565b51161462016df5579062016de984939262004cdf565b90939594919262016d66565b5091809493503862016d6c565b949390929462016d6c565b62016d51565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3231363a2054686520414444524553535f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231363a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201709b578462016ee9845162004cef565b515103620170415762016efc906201e110565b1562016f9a5784931562016fb1576000935b62016f1a575050505090565b8051841015620051fe576001600160a01b038062016f39868462004d46565b5116600052611f4080845260409060ff8260002054161562016fa45760029262016f64888662004d46565b51166000528452600020015462016f806200680d855162004cef565b510362016f9a5762016f93859462004cdf565b9362016f0e565b5050505050600090565b5050505050505050600090565b6000935b62016fc1575050505090565b8051841015620051fe576001600160a01b038062016fe0868462004d46565b5116600052613ef880845260409060ff8260002054161562016fa4576002926201700b888662004d46565b511660005284526000200154620170276200680d855162004cef565b510362016f9a576201703a859462004cdf565b9362016fb5565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3231373a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3231373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906040016001918282515103620171f0578262017113835162004cef565b515103620171965762017126906201e110565b91909115620065c757600091835b620171425750505050600090565b8051831015620171905783926001600160a01b038062017163838562004d46565b511690620171766200680d865162004cef565b511614620051c457620171899062004cdf565b9262017134565b62016d86565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3231383a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231383a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060400160019182825151036201737f578262017268835162004cef565b51511062017325576201727b906201e110565b15620065c75782916000935b620172955750505050600090565b815184101562017190576000835b620172bd575b50620172b6839462004cdf565b9362017287565b939291620172cc825162004cef565b51518510156201731c576001600160a01b0380620172eb868462004d46565b511690620172ff876200743f865162004cef565b51161462016c4d576201731483949562004cdf565b9092620172a3565b919293620172a9565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3231393a2054686520414444524553535f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231393a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90916020809101906001938483515103620175cb5784620173fb845162004cef565b51510362017571576201740e906201e110565b9190911562016f9a57849315620174cf576000935b62017432575050505050600090565b8151841015620174c95784936001600160a01b03908162017454828662004d46565b5116600052611f4080845260409060ff82600020541662017485575b50506201747e915062004cdf565b9362017423565b8293620174956002948862004d46565b511660005284526000200154620174b16200680d865162004cef565b5114620174c15780388062017470565b505050505090565b62016f9a565b6000935b620174e2575050505050600090565b8151841015620174c95784936001600160a01b03908162017504828662004d46565b5116600052613ef880845260409060ff82600020541662017535575b50506201752e915062004cdf565b93620174d3565b8293620175456002948862004d46565b511660005284526000200154620175616200680d865162004cef565b5114620174c15780388062017520565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3232303a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3232303a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b62017630816201e110565b91909115620065cf57815115620065cf57600090815b835181101562017689576001600160a01b038062017665838762004d46565b5116908351160362017682576201767c9062004cdf565b62017646565b5050905090565b50505050600190565b6201769d816201e110565b91909115620065cf57815115620065cf5760005b8251811015620065c7576001600160a01b0380620176d0838662004d46565b51169083511614620065b457620176e79062004cdf565b620176b1565b906040016001918282515103620177e057826201770b835162004cef565b51510362017786576201771e906201e199565b15620065c757829160009182945b6201773957505050905090565b805185101562016c55576001600160a01b038062017758878462004d46565b5116906201776b6200680d855162004cef565b51160362016c4d576201777f849562004cdf565b946201772c565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3232333a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3232333a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90604001600191828251510362017988578262017858835162004cef565b5151106201792e576201786b906201e199565b15620065c757600091835b620178815750505090565b815183101562016e0d57600080855b620178b0575b501562016d8657620178a9849362004cdf565b9262017876565b620178c18396949295965162004cef565b515181101562017923576001600160a01b0380620178e0888562004d46565b511690620178f4836200743f875162004cef565b5116146201791657906201790a84939262004cdf565b90939594919262017890565b5091809493503862017896565b949390929462017896565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3232343a2054686520414444524553535f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3232343a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9091602080910190600193848351510362017b9f578462017a04845162004cef565b51510362017b455762017a17906201e199565b1562016f9a5784931562017ab5576000935b62017a35575050505090565b8051841015620051fe576001600160a01b038062017a54868462004d46565b5116600052611f4080845260409060ff8260002054161562016fa45760029262017a7f888662004d46565b51166000528452600020015462017a9b6200680d855162004cef565b510362016f9a5762017aae859462004cdf565b9362017a29565b6000935b62017ac5575050505090565b8051841015620051fe576001600160a01b038062017ae4868462004d46565b5116600052613ef880845260409060ff8260002054161562016fa45760029262017b0f888662004d46565b51166000528452600020015462017b2b6200680d855162004cef565b510362016f9a5762017b3e859462004cdf565b9362017ab9565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3232353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3232353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90604001600191828251510362017cee578262017c17835162004cef565b51510362017c945762017c2a906201e199565b91909115620065c757600091835b62017c465750505050600090565b8051831015620171905783926001600160a01b038062017c67838562004d46565b51169062017c7a6200680d865162004cef565b511614620051c45762017c8d9062004cdf565b9262017c38565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3232363a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3232363a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90604001600191828251510362017e7d578262017d66835162004cef565b51511062017e235762017d79906201e199565b15620065c75782916000935b62017d935750505050600090565b815184101562017190576000835b62017dbb575b5062017db4839462004cdf565b9362017d85565b93929162017dca825162004cef565b515185101562017e1a576001600160a01b038062017de9868462004d46565b51169062017dfd876200743f865162004cef565b51161462016c4d5762017e1283949562004cdf565b909262017da1565b91929362017da7565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3232373a2054686520414444524553535f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3232373a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90916020809101906001938483515103620180bb578462017ef9845162004cef565b515103620180615762017f0c906201e199565b9190911562016f9a5784931562017fbf576000935b62017f30575050505050600090565b8151841015620174c95784936001600160a01b03908162017f52828662004d46565b5116600052611f4080845260409060ff82600020541662017f83575b505062017f7c915062004cdf565b9362017f21565b829362017f936002948862004d46565b51166000528452600020015462017faf6200680d865162004cef565b5114620174c15780388062017f6e565b6000935b62017fd2575050505050600090565b8151841015620174c95784936001600160a01b03908162017ff4828662004d46565b5116600052613ef880845260409060ff82600020541662018025575b50506201801e915062004cdf565b9362017fc3565b8293620180356002948862004d46565b511660005284526000200154620180516200680d865162004cef565b5114620174c15780388062018010565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3232383a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3232383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b62018120816201e199565b91909115620065cf57815115620065cf57600090815b835181101562017689576001600160a01b038062018155838762004d46565b5116908351160362017682576201816c9062004cdf565b62018136565b6201817d816201e199565b91909115620065cf57815115620065cf5760005b8251811015620065c7576001600160a01b0380620181b0838662004d46565b51169083511614620065b457620181c79062004cdf565b62018191565b906020016001918282515103620182b65782620181eb835162004cef565b5151036201825c57620181fe906201e1d2565b905015620065c757829160009182945b6201821b57505050905090565b805185101562016c555762018231858262004d46565b51620182426200680d845162004cef565b510362016c4d5762018255849562004cdf565b946201820e565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201845457826201832e835162004cef565b515110620183fa5762018341906201e1d2565b905015620065c757600091835b620183595750505090565b815183101562016e0d57600080855b62018388575b501562016d865762018381849362004cdf565b926201834e565b620183998396949295965162004cef565b5151811015620183ef57620183af868362004d46565b51620183c1826200743f865162004cef565b5114620183e25790620183d684939262004cdf565b90939594919262018368565b509180949350386201836e565b94939092946201836e565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3233323a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020016001918282515103620185c9576002620184cd835162004cef565b5151036201856f57620184e0906201e1d2565b905091909115620065c757829160009182945b6201850057505050905090565b815185101562016c555762018516858362004d46565b51620185276200680d835162004cef565b5111801562018549575b62016c4d5762018542849562004cdf565b94620184f3565b5062018556858362004d46565b5162018567620169f0835162004cef565b511062018531565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233333a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201870d578262018641835162004cef565b515103620186b35762018654906201e1d2565b905015620065c757829160009182945b6201867157505050905090565b805185101562016c555762018687858262004d46565b51620186986200680d845162004cef565b51101562016c4d57620186ac849562004cdf565b9462018664565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362018851578262018785835162004cef565b515103620187f75762018798906201e1d2565b905015620065c757829160009182945b620187b557505050905090565b805185101562016c5557620187cb858262004d46565b51620187dc6200680d845162004cef565b51111562016c4d57620187f0849562004cdf565b94620187a8565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201899a5782620188c9835162004cef565b5151036201894057620188dc906201e1d2565b9093915015620065c7578060009384925b62018906575b5050506200680d620167cc915162004cef565b909193815185101562018939576200e870620189309162018928878562004d46565b519062006200565b919081620188ed565b93620188f3565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233363a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362018adb578262018a12835162004cef565b51510362018a815762018a25906201e1d2565b9093915015620065c7578060009384925b62018a4f575b5050506200680d620168cd915162004cef565b909193815185101562018a7a576200e87062018a719162018928878562004d46565b91908162018a36565b9362018a3c565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233373a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200190600190818351510362018c1e57600262018b55845162004cef565b51510362018bc45762018b68906201e1d2565b90915015620065c757906000918183925b62018b92575b505050620169cd6200680d835162004cef565b909192825184101562018bbd576200647f62018bb49162018928868662004d46565b91908062018b79565b9262018b7f565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233383a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362018d5f578262018c96835162004cef565b51510362018d055762018ca9906201e1d2565b9093915015620065c7578060009384925b62018cd3575b5050506200680d62016afb915162004cef565b909193815185101562018cfe576200e87062018cf59162018928878562004d46565b91908162018cba565b9362018cc0565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233393a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233393a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362018ea3578262018dd7835162004cef565b51510362018e495762018dea906201e1d2565b9092915015620065c757600091835b62018e075750505050600090565b805183101562017190578262018e1f85948362004d46565b5162018e306200680d855162004cef565b5110620051c45762018e429062004cdf565b9262018df9565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234303a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234303a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362018fe7578262018f1b835162004cef565b51510362018f8d5762018f2e906201e1d2565b9291921562016d8657600092845b62018f4b575050505050600090565b8051841015620174c9578362018f6386958462004d46565b5162018f746200680d865162004cef565b5111620174c15762018f869062004cdf565b9362018f3c565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201915c57600262019060835162004cef565b515103620191025762019073906201e1d2565b929091921562016d8657600092845b62019091575050505050600090565b8051841015620174c95783620190a986958562004d46565b51620190ba6200680d855162004cef565b51111580620190db575b620174c157620190d49062004cdf565b9362019082565b50620190e8818562004d46565b51620190f9620169f0855162004cef565b511015620190c4565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234323a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020016001918282515103620192a05782620191d4835162004cef565b5151036201924657620191e7906201e1d2565b9291921562016d8657600092845b62019204575050505050600090565b8051841015620174c957836201921c86958462004d46565b516201922d6200680d865162004cef565b5114620174c1576201923f9062004cdf565b93620191f5565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020016001918282515103620193e5578262019318835162004cef565b5151036201938b576201932b906201e1d2565b905091909115620065c757600091835b620193495750505050600090565b80518310156201719057826201936185948362004d46565b51620193726200680d855162004cef565b5110620051c457620193849062004cdf565b926201933b565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201952a57826201945d835162004cef565b515103620194d05762019470906201e1d2565b905091909115620065c757600091835b6201948e5750505050600090565b8051831015620171905782620194a685948362004d46565b51620194b76200680d855162004cef565b5111620051c457620194c99062004cdf565b9262019480565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201969c576002620195a3835162004cef565b5151036201964257620195b6906201e1d2565b905015620065c757600091835b620195d15750505050600090565b8151831015620171905782620195e985948462004d46565b51620195fa6200680d845162004cef565b511115806201961b575b620051c457620196149062004cdf565b92620195c3565b5062019628818462004d46565b5162019639620169f0845162004cef565b51101562019604565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234363a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020016001918282515103620197e1578262019714835162004cef565b515103620197875762019727906201e1d2565b905091909115620065c757600091835b620197455750505050600090565b80518310156201719057826201975d85948362004d46565b516201976e6200680d855162004cef565b5114620051c457620197809062004cdf565b9262019737565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234373a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362019966578262019859835162004cef565b5151106201990c576201986c906201e1d2565b905015620065c75782916000935b620198885750505050600090565b815184101562017190576000835b620198b0575b50620198a9839462004cdf565b936201987a565b939291620198bf825162004cef565b51518510156201990357620198d5848262004d46565b51620198e7866200743f855162004cef565b511462016c4d57620198fb83949562004cdf565b909262019896565b9192936201989c565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3234383a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9091602080910190600193848351510362019c665784620199e2845162004cef565b51511062019c0c57620199f5906201e199565b9290921562016f9a5784931562019b09576000935b62019a16575050505090565b8251841015620051fe576001600160a01b038062019a35868662004d46565b5116600052611f40808452604060ff8160002054161562016fa457879160009384935b62019a7b575b505050501562016f9a5762019a74859462004cdf565b9362019a0a565b9092989591939662019a8e865162004cef565b51518a101562019afd578162019aa58a8362004d46565b5116600052838352600285600020015462019ac68b6200743f895162004cef565b511462019aea5762019adb8798999a62004cdf565b93919097999894929662019a58565b9650509396505050843880808062019a5e565b96938296995062019a5e565b6000935b62019b19575050505090565b8251841015620051fe576001600160a01b038062019b38868662004d46565b5116600052613ef8808452604060ff8160002054161562016fa457879160009384935b62019b7e575b505050501562016f9a5762019b77859462004cdf565b9362019b0d565b9092989591939662019b91865162004cef565b51518a101562019c00578162019ba88a8362004d46565b5116600052838352600285600020015462019bc98b6200743f895162004cef565b511462019bed5762019bde8798999a62004cdf565b93919097999894929662019b5b565b9650509396505050843880808062019b61565b96938296995062019b61565b60405162461bcd60e51b815260048101839052603e60248201527f43452049445f3234393a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3234393a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b6020809301600192838251510362019f53578362019cdf835162004cef565b51511062019ef95762019cf2906201e199565b9490941562016f9a5783921562019e045793926000905b62019d18575050505050600090565b8351811015620174c9576001600160a01b038062019d37838762004d46565b5116600052611f4080875260409160ff83600020541662019d6d575b5050509362019d6483949562004cdf565b90949362019d09565b6000929190865b62019d81575b5062019d53565b90929791939662019d93865162004cef565b515189101562019df9578162019daa898362004d46565b5116600052838352600285600020015462019dcb8a6200743f895162004cef565b511462019ded5762019ddf87989962004cdf565b939190979894929862019d74565b50505050505091505090565b969382985062019d7a565b93926000905b62019e19575050505050600090565b8351811015620174c9576001600160a01b038062019e38838762004d46565b5116600052613ef880875260409160ff83600020541662019e6e575b5050509362019e6583949562004cdf565b90949362019e0a565b6000929190865b62019e82575b5062019e54565b90929791939662019e94865162004cef565b515189101562019eee578162019eab898362004d46565b5116600052838352600285600020015462019ecc8a6200743f895162004cef565b511462019ded5762019ee087989962004cdf565b939190979894929862019e75565b969382985062019e7b565b60405162461bcd60e51b815260048101869052603e60248201527f43452049445f3235303a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101869052602e60248201527f43452049445f3235303a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201a253578462019fcf845162004cef565b5151106201a1f95762019fe2906201e110565b9290921562016f9a578493156201a0f6576000935b6201a003575050505090565b8251841015620051fe576001600160a01b03806201a022868662004d46565b5116600052611f40808452604060ff8160002054161562016fa457879160009384935b6201a068575b505050501562016f9a576201a061859462004cdf565b9362019ff7565b909298959193966201a07b865162004cef565b51518a10156201a0ea57816201a0928a8362004d46565b511660005283835260028560002001546201a0b38b6200743f895162004cef565b51146201a0d7576201a0c88798999a62004cdf565b9391909799989492966201a045565b965050939650505084388080806201a04b565b9693829699506201a04b565b6000935b6201a106575050505090565b8251841015620051fe576001600160a01b03806201a125868662004d46565b5116600052613ef8808452604060ff8160002054161562016fa457879160009384935b6201a16b575b505050501562016f9a576201a164859462004cdf565b936201a0fa565b909298959193966201a17e865162004cef565b51518a10156201a1ed57816201a1958a8362004d46565b511660005283835260028560002001546201a1b68b6200743f895162004cef565b51146201a1da576201a1cb8798999a62004cdf565b9391909799989492966201a148565b965050939650505084388080806201a14e565b9693829699506201a14e565b60405162461bcd60e51b815260048101839052603e60248201527f43452049445f3235313a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b602080930160019283825151036201a53457836201a2cc835162004cef565b5151106201a4da576201a2df906201e110565b9490941562016f9a578392156201a3e55793926000905b6201a305575050505050600090565b8351811015620174c9576001600160a01b03806201a324838762004d46565b5116600052611f4080875260409160ff8360002054166201a35a575b505050936201a35183949562004cdf565b9094936201a2f6565b6000929190865b6201a36e575b506201a340565b9092979193966201a380865162004cef565b51518910156201a3da57816201a397898362004d46565b511660005283835260028560002001546201a3b88a6200743f895162004cef565b511462019ded576201a3cc87989962004cdf565b93919097989492986201a361565b96938298506201a367565b93926000905b6201a3fa575050505050600090565b8351811015620174c9576001600160a01b03806201a419838762004d46565b5116600052613ef880875260409160ff8360002054166201a44f575b505050936201a44683949562004cdf565b9094936201a3eb565b6000929190865b6201a463575b506201a435565b9092979193966201a475865162004cef565b51518910156201a4cf57816201a48c898362004d46565b511660005283835260028560002001546201a4ad8a6200743f895162004cef565b511462019ded576201a4c187989962004cdf565b93919097989492986201a456565b96938298506201a45c565b60405162461bcd60e51b815260048101869052603e60248201527f43452049445f3235323a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101869052602e60248201527f43452049445f3235323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201a6fd57846201a5b0845162004cef565b5151036201a6a3576201a5c3906201e110565b1562016f9a578493156201a63a576000935b6201a5e1575050505090565b8051841015620051fe576001600160a01b036201a5ff858362004d46565b5116600052611f4582526040600020546201a61f6200680d855162004cef565b51101562016f9a576201a633859462004cdf565b936201a5d5565b6000935b6201a64a575050505090565b8051841015620051fe576001600160a01b036201a668858362004d46565b5116600052613efd82526040600020546201a6886200680d855162004cef565b51101562016f9a576201a69c859462004cdf565b936201a63e565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3235333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201a8c657846201a779845162004cef565b5151036201a86c576201a78c906201e110565b1562016f9a578493156201a803576000935b6201a7aa575050505090565b8051841015620051fe576001600160a01b036201a7c8858362004d46565b5116600052611f4582526040600020546201a7e86200680d855162004cef565b51111562016f9a576201a7fc859462004cdf565b936201a79e565b6000935b6201a813575050505090565b8051841015620051fe576001600160a01b036201a831858362004d46565b5116600052613efd82526040600020546201a8516200680d855162004cef565b51111562016f9a576201a865859462004cdf565b936201a807565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3235343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9091602080910160019384825151036201ab1c5760026201a942835162004cef565b5151036201aac2576201a955906201e110565b9290921562016f9a578493156201aa14576000935b6201a976575050505090565b8251841015620051fe576001600160a01b03806201a995868662004d46565b5116600052611f4580835260409081600020546201a9b86200680d875162004cef565b51119283156201a9de575b50505062016f9a576201a9d7859462004cdf565b936201a96a565b909192506201a9ee878762004d46565b51166000528252600020546201aa09620169f0845162004cef565b51103880806201a9c3565b6000935b6201aa24575050505090565b8251841015620051fe576001600160a01b03806201aa43868662004d46565b5116600052613efd80835260409081600020546201aa666200680d875162004cef565b51119283156201aa8c575b50505062016f9a576201aa85859462004cdf565b936201aa18565b909192506201aa9c878762004d46565b51166000528252600020546201aab7620169f0845162004cef565b51103880806201aa71565b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3235353a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052602e60248201527f43452049445f3235353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201ace357846201ab98845162004cef565b5151036201ac89576201abab906201e110565b1562016f9a578493156201ac21576000935b6201abc9575050505090565b8051841015620051fe576001600160a01b036201abe7858362004d46565b5116600052611f4582526040600020546201ac076200680d855162004cef565b510362016f9a576201ac1a859462004cdf565b936201abbd565b6000935b6201ac31575050505090565b8051841015620051fe576001600160a01b036201ac4f858362004d46565b5116600052613efd82526040600020546201ac6f6200680d855162004cef565b510362016f9a576201ac82859462004cdf565b936201ac25565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3235363a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201aec457846201ad5f845162004cef565b5151036201ae6a576201ad72906201e110565b1562016f9a578493156201adfd5760009182945b6201ad97575b505050505050600090565b81518510156201adf75785946001600160a01b036201adb7828562004d46565b51168452611f45825260408420546201add56200680d875162004cef565b51106201adee576201ade79062004cdf565b946201ad86565b50505050505090565b6201ad8c565b60009182945b6201ae1357505050505050600090565b81518510156201adf75785946001600160a01b036201ae33828562004d46565b51168452613efd825260408420546201ae516200680d875162004cef565b51106201adee576201ae639062004cdf565b946201ae03565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3235373a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201b09557846201af40845162004cef565b5151036201b03b576201af53906201e110565b1562016f9a578493156201afce5760009182945b6201af7757505050505050600090565b81518510156201adf75785946001600160a01b036201af97828562004d46565b51168452611f45825260408420546201afb56200680d875162004cef565b51116201adee576201afc79062004cdf565b946201af67565b60009182945b6201afe457505050505050600090565b81518510156201adf75785946001600160a01b036201b004828562004d46565b51168452613efd825260408420546201b0226200680d875162004cef565b51116201adee576201b0349062004cdf565b946201afd4565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3235383a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9091602080910160019384825151036201b2f55760026201b111835162004cef565b5151036201b29b576201b124906201e110565b9190911562016f9a578493156201b1e8576000935b6201b148575050505050600090565b8151841015620174c95784936001600160a01b03806201b169838662004d46565b5116600052611f4580865260409081600020546201b18c6200680d875162004cef565b51111592836201b1b1575b505050620174c1576201b1aa9062004cdf565b936201b139565b909192506201b1c1848762004d46565b51166000528552600020546201b1dc620169f0845162004cef565b5110153880806201b197565b6000935b6201b1fb575050505050600090565b8151841015620174c95784936001600160a01b03806201b21c838662004d46565b5116600052613efd80865260409081600020546201b23f6200680d875162004cef565b51111592836201b264575b505050620174c1576201b25d9062004cdf565b936201b1ec565b909192506201b274848762004d46565b51166000528552600020546201b28f620169f0845162004cef565b5110153880806201b24a565b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3235393a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052602e60248201527f43452049445f3235393a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201b4cc57836201b36e845162004cef565b5151036201b47257156201b3f7576201b387906201e110565b15620065c757829160009182945b6201b3a257505050905090565b805185101562016c55576201b3cc6001600160a01b036201b3c4878462004d46565b51166201b583565b6201b3dc6200680d845162004cef565b51101562016c4d576201b3f0849562004cdf565b946201b395565b6201b402906201e110565b15620065c757829160009182945b6201b41d57505050905090565b805185101562016c55576201b4476001600160a01b036201b43f878462004d46565b51166201b526565b6201b4576200680d845162004cef565b51101562016c4d576201b46b849562004cdf565b946201b410565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236303a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236303a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60009081905b6103e882106201b53b57505090565b9091620081fe6201b57c916201b5758560031b60018060a01b038616600052611fbb8101602052611fb96040600020549101549062004f77565b9062006200565b906201b52c565b60009081905b6103e882106201b59857505090565b9091620081fe6201b5d0916201b575600386811b9060018060a01b038716600052810160205260016040600020549101549062004f77565b906201b589565b600091906201b632576000905b6103e882106201b5f357505090565b9091620081fe6201b62b916201b575600386811b9060018060a01b038716600052810160205260016040600020549101549062004f77565b906201b5e4565b81905b6103e882106201b64457505090565b9091620081fe6201b67e916201b5758560031b60018060a01b038616600052611fbb8101602052611fb96040600020549101549062004f77565b906201b635565b916020019060019283835151036201b7f257836201b6a4845162004cef565b5151036201b79857156201b725576201b6bd906201e110565b15620065c757829160009182945b6201b6d857505050905090565b805185101562016c55576201b6fa6001600160a01b036201b3c4878462004d46565b6201b70a6200680d845162004cef565b51111562016c4d576201b71e849562004cdf565b946201b6cb565b6201b730906201e110565b15620065c757829160009182945b6201b74b57505050905090565b805185101562016c55576201b76d6001600160a01b036201b43f878462004d46565b6201b77d6200680d845162004cef565b51111562016c4d576201b791849562004cdf565b946201b73e565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201ba2a5760026201b86c845162004cef565b5151036201b9d057156201b925576201b885906201e110565b91909115620065c757829160009182945b6201b8a357505050905090565b815185101562016c55576001600160a01b036201b8c6816201b3c4888662004d46565b6201b8d66200680d845162004cef565b51119081156201b8fa575b5062016c4d576201b8f3849562004cdf565b946201b896565b6201b90c91506201b3c4878562004d46565b6201b91c620169f0835162004cef565b5110386201b8e1565b6201b930906201e110565b91909115620065c757829160009182945b6201b94e57505050905090565b815185101562016c55576001600160a01b036201b971816201b43f888662004d46565b6201b9816200680d845162004cef565b51119081156201b9a5575b5062016c4d576201b99e849562004cdf565b946201b941565b6201b9b791506201b43f878562004d46565b6201b9c7620169f0835162004cef565b5110386201b98c565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236323a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201bbef57836201baa3845162004cef565b5151036201bb9557156201bb23576201babc906201e110565b15620065c757829160009182945b6201bad757505050905090565b805185101562016c55576201baf96001600160a01b036201b3c4878462004d46565b6201bb096200680d845162004cef565b510362016c4d576201bb1c849562004cdf565b946201baca565b6201bb2e906201e110565b15620065c757829160009182945b6201bb4957505050905090565b805185101562016c55576201bb6b6001600160a01b036201b43f878462004d46565b6201bb7b6200680d845162004cef565b510362016c4d576201bb8e849562004cdf565b946201bb3c565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201bdb857836201bc68845162004cef565b5151036201bd5e57156201bcea576201bc81906201e110565b91909115620065c757600091835b6201bc9d5750505050600090565b8051831015620171905783926201bcc16001600160a01b036201b3c4838562004d46565b6201bcd16200680d855162004cef565b5110620051c4576201bce39062004cdf565b926201bc8f565b6201bcf5906201e110565b91909115620065c757600091835b6201bd115750505050600090565b8051831015620171905783926201bd356001600160a01b036201b43f838562004d46565b6201bd456200680d855162004cef565b5110620051c4576201bd579062004cdf565b926201bd03565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201bf8157836201be31845162004cef565b5151036201bf2757156201beb3576201be4a906201e110565b91909115620065c757600091835b6201be665750505050600090565b8051831015620171905783926201be8a6001600160a01b036201b3c4838562004d46565b6201be9a6200680d855162004cef565b5111620051c4576201beac9062004cdf565b926201be58565b6201bebe906201e110565b91909115620065c757600091835b6201beda5750505050600090565b8051831015620171905783926201befe6001600160a01b036201b43f838562004d46565b6201bf0e6200680d855162004cef565b5111620051c4576201bf209062004cdf565b926201becc565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201c1b35760026201bffb845162004cef565b5151036201c15957156201c0b1576201c014906201e110565b15620065c757600091835b6201c02d5750505050600090565b8151831015620171905783926001600160a01b036201c052816201b3c4848762004d46565b6201c0626200680d855162004cef565b51111590816201c085575b50620051c4576201c07e9062004cdf565b926201c01f565b6201c09791506201b3c4838662004d46565b6201c0a7620169f0845162004cef565b511015386201c06d565b6201c0bc906201e110565b15620065c757600091835b6201c0d55750505050600090565b8151831015620171905783926001600160a01b036201c0fa816201b43f848762004d46565b6201c10a6200680d855162004cef565b51111590816201c12d575b50620051c4576201c1269062004cdf565b926201c0c7565b6201c13f91506201b43f838662004d46565b6201c14f620169f0845162004cef565b511015386201c115565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236363a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201c38a57836201c22c845162004cef565b5151036201c33057156201c2b5576201c245906201e110565b15620065c757829160009182945b6201c26057505050905090565b805185101562016c55576201c28a6001600160a01b036201c282878462004d46565b51166201c43a565b6201c29a6200680d845162004cef565b51101562016c4d576201c2ae849562004cdf565b946201c253565b6201c2c0906201e110565b15620065c757829160009182945b6201c2db57505050905090565b805185101562016c55576201c3056001600160a01b036201c2fd878462004d46565b51166201c3e4565b6201c3156200680d845162004cef565b51101562016c4d576201c329849562004cdf565b946201c2ce565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236373a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60009081905b6103e882106201c3f957505090565b9091620081fe6201c433916201b5758560031b60018060a01b038616600052611fbb8101602052611fba6040600020549101549062004f77565b906201c3ea565b60009081905b6103e882106201c44f57505090565b9091620081fe6201c487916201b575600386811b9060018060a01b038716600052810160205260026040600020549101549062004f77565b906201c440565b600091906201c4e9576000905b6103e882106201c4aa57505090565b9091620081fe6201c4e2916201b575600386811b9060018060a01b038716600052810160205260026040600020549101549062004f77565b906201c49b565b81905b6103e882106201c4fb57505090565b9091620081fe6201c535916201b5758560031b60018060a01b038616600052611fbb8101602052611fba6040600020549101549062004f77565b906201c4ec565b916020019060019283835151036201c6a957836201c55b845162004cef565b5151036201c64f57156201c5dc576201c574906201e110565b15620065c757829160009182945b6201c58f57505050905090565b805185101562016c55576201c5b16001600160a01b036201c282878462004d46565b6201c5c16200680d845162004cef565b51111562016c4d576201c5d5849562004cdf565b946201c582565b6201c5e7906201e110565b15620065c757829160009182945b6201c60257505050905090565b805185101562016c55576201c6246001600160a01b036201c2fd878462004d46565b6201c6346200680d845162004cef565b51111562016c4d576201c648849562004cdf565b946201c5f5565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236383a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201c8e15760026201c723845162004cef565b5151036201c88757156201c7dc576201c73c906201e110565b91909115620065c757829160009182945b6201c75a57505050905090565b815185101562016c55576001600160a01b036201c77d816201c282888662004d46565b6201c78d6200680d845162004cef565b51119081156201c7b1575b5062016c4d576201c7aa849562004cdf565b946201c74d565b6201c7c391506201c282878562004d46565b6201c7d3620169f0835162004cef565b5110386201c798565b6201c7e7906201e110565b91909115620065c757829160009182945b6201c80557505050905090565b815185101562016c55576001600160a01b036201c828816201c2fd888662004d46565b6201c8386200680d845162004cef565b51119081156201c85c575b5062016c4d576201c855849562004cdf565b946201c7f8565b6201c86e91506201c2fd878562004d46565b6201c87e620169f0835162004cef565b5110386201c843565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236393a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236393a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201caaa57836201c95a845162004cef565b5151036201ca5057156201c9dc576201c973906201e110565b91909115620065c757600091835b6201c98f5750505050600090565b8051831015620171905783926201c9b36001600160a01b036201c282838562004d46565b6201c9c36200680d855162004cef565b5110620051c4576201c9d59062004cdf565b926201c981565b6201c9e7906201e110565b91909115620065c757600091835b6201ca035750505050600090565b8051831015620171905783926201ca276001600160a01b036201c2fd838562004d46565b6201ca376200680d855162004cef565b5110620051c4576201ca499062004cdf565b926201c9f5565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3237303a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3237303a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9160200190600192836201cb19845162004cef565b5151036201cc735783835151036201cc1957156201cba5576201cb3c906201e110565b91909115620065c757600091835b6201cb585750505050600090565b8051831015620171905783926201cb7c6001600160a01b036201c282838562004d46565b6201cb8c6200680d855162004cef565b5111620051c4576201cb9e9062004cdf565b926201cb4a565b6201cbb0906201e110565b91909115620065c757600091835b6201cbcc5750505050600090565b8051831015620171905783926201cbf06001600160a01b036201c2fd838562004d46565b6201cc006200680d855162004cef565b5111620051c4576201cc129062004cdf565b926201cbbe565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3237313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3237313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b916020019060026201cce0835162004cef565b5151036201cea55760019283835151036201ce4b57156201cda3576201cd06906201e110565b15620065c757600091835b6201cd1f5750505050600090565b8151831015620171905783926001600160a01b036201cd44816201c282848762004d46565b6201cd546200680d855162004cef565b51111590816201cd77575b50620051c4576201cd709062004cdf565b926201cd11565b6201cd8991506201c282838662004d46565b6201cd99620169f0845162004cef565b511015386201cd5f565b6201cdae906201e110565b15620065c757600091835b6201cdc75750505050600090565b8151831015620171905783926001600160a01b036201cdec816201c2fd848762004d46565b6201cdfc6200680d855162004cef565b51111590816201ce1f575b50620051c4576201ce189062004cdf565b926201cdb9565b6201ce3191506201c2fd838662004d46565b6201ce41620169f0845162004cef565b511015386201ce07565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3237323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3237323a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b919060208092019060019384835151036201d0c65760026201cf22845162004cef565b5151036201d06c57156201cfcd576201cf3b906201e110565b9290921562016d8657600092845b6201cf55575050505090565b8051841015620051fe576201cf6f6200680d845162004cef565b516103e881101562004cfd576001600160a01b036201cf8f868462004d46565b5116600052600390811b0182526040600020546201cfb2620169f0855162004cef565b51101562016f9a576201cfc6859462004cdf565b936201cf49565b6201cfd8906201e110565b9290921562016d8657600092845b6201cff2575050505090565b8051841015620051fe576201d00c6200680d845162004cef565b516103e881101562004cfd57611fbb906001600160a01b036201d030878562004d46565b511660005260031b0182526040600020546201d051620169f0855162004cef565b51101562016f9a576201d065859462004cdf565b936201cfe6565b60405162461bcd60e51b815260048101859052603160248201527f43452049445f3237333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b919060208092019060019384835151036201d2e75760026201d143845162004cef565b5151036201d28d57156201d1ee576201d15c906201e110565b9290921562016d8657600092845b6201d176575050505090565b8051841015620051fe576201d1906200680d845162004cef565b516103e881101562004cfd576001600160a01b036201d1b0868462004d46565b5116600052600390811b0182526040600020546201d1d3620169f0855162004cef565b51111562016f9a576201d1e7859462004cdf565b936201d16a565b6201d1f9906201e110565b9290921562016d8657600092845b6201d213575050505090565b8051841015620051fe576201d22d6200680d845162004cef565b516103e881101562004cfd57611fbb906001600160a01b036201d251878562004d46565b511660005260031b0182526040600020546201d272620169f0855162004cef565b51111562016f9a576201d286859462004cdf565b936201d207565b60405162461bcd60e51b815260048101859052603160248201527f43452049445f3237343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020809101600392836201d357835162004cef565b5151036201d5e55760019485835151036201d58b57156201d482576201d37d906201e110565b9390931562016f9a57600093855b6201d39857505050505090565b80518510156201d47c576201d3b26200680d845162004cef565b516103e8908181101562004cfd576001600160a01b03908490826201d3d88a8762004d46565b5116600052811b01865260409081600020546201d3fa620169f0885162004cef565b51119283156201d420575b5050506201ad8c576201d419869562004cdf565b946201d38b565b909192506201d4346200680d875162004cef565b519081101562004cfd5784916201d44c898662004d46565b5116600052811b018552600020546201d4716201d46a855162004cef565b5162004d24565b51103880806201d405565b620174c1565b6201d490909392936201e110565b9390931562016f9a57600093855b6201d4ab57505050505090565b80518510156201d47c576201d4c56200680d845162004cef565b516103e88082101562004cfd576001600160a01b0391826201d4e8898662004d46565b5116600052611fbb8091881b01855260409182600020546201d50f620169f0895162004cef565b51119384156201d536575b505050506201ad8c576201d52f869562004cdf565b946201d49e565b90919293506201d54b6200680d885162004cef565b519182101562004cfd576201d561898662004d46565b5116600052861b018352600020546201d57f6201d46a855162004cef565b5110388080806201d51a565b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3237353a205468652055494e543235365f324441525241595b306044820152705d206c656e677468206973206e6f74203360781b6064820152608490fd5b919060208092019060026201d65a835162004cef565b5151036201d8135760019384835151036201d7b957156201d716576201d680906201e110565b9290921562016d8657600092845b6201d69d575050505050600090565b8051841015620174c9576201d6b76200680d845162004cef565b51936103e885101562004cfd5785946001600160a01b036201d6da838562004d46565b5116600052600390811b0183526040600020546201d6fd620169f0865162004cef565b5110620174c1576201d70f9062004cdf565b936201d68e565b6201d721906201e110565b9290921562016d8657600092845b6201d73e575050505050600090565b8051841015620174c9576201d7586200680d845162004cef565b51936103e885101562004cfd578594611fbb906001600160a01b036201d77f848662004d46565b511660005260031b0183526040600020546201d7a0620169f0865162004cef565b5110620174c1576201d7b29062004cdf565b936201d72f565b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3237363a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b919060208092019060026201d883835162004cef565b5151036201da3c5760019384835151036201d9e257156201d93f576201d8a9906201e110565b9290921562016d8657600092845b6201d8c6575050505050600090565b8051841015620174c9576201d8e06200680d845162004cef565b51936103e885101562004cfd5785946001600160a01b036201d903838562004d46565b5116600052600390811b0183526040600020546201d926620169f0865162004cef565b5111620174c1576201d9389062004cdf565b936201d8b7565b6201d94a906201e110565b9290921562016d8657600092845b6201d967575050505050600090565b8051841015620174c9576201d9816200680d845162004cef565b51936103e885101562004cfd578594611fbb906001600160a01b036201d9a8848662004d46565b511660005260031b0183526040600020546201d9c9620169f0865162004cef565b5111620174c1576201d9db9062004cdf565b936201d958565b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3237373a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b916020809101600392836201daac835162004cef565b5151036201dd3e5760019485835151036201dce457156201dbd2576201dad2906201e110565b9390931562016f9a57600093855b6201daf057505050505050600090565b80518510156201adf7576201db0a6200680d845162004cef565b51946103e8958681101562004cfd5787966001600160a01b03918590836201db33868862004d46565b5116600052811b018752604080600020546201db54620169f0895162004cef565b51111592836201db79575b5050506201adee576201db729062004cdf565b946201dae0565b91985091506201db8e6200680d875162004cef565b519788101562004cfd57889785916201dba8858762004d46565b5116600052811b018652600020546201dbc66201d46a865162004cef565b5110153880806201db5f565b6201dbe0909392936201e110565b9390931562016f9a57600093855b6201dbfe57505050505050600090565b80518510156201adf7576201dc186200680d845162004cef565b51946103e88087101562004cfd5787966001600160a01b0390816201dc3e858762004d46565b5116600052611fbb8091891b01865260409081600020546201dc65620169f08a5162004cef565b51111593846201dc8b575b505050506201adee576201dc849062004cdf565b946201dbee565b9193509198506201dca16200680d885162004cef565b519081101562004cfd5789986201dcb9858762004d46565b5116600052871b018452600020546201dcd76201d46a865162004cef565b511015388080806201dc70565b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3237383a205468652055494e543235365f324441525241595b306044820152705d206c656e677468206973206e6f74203360781b6064820152608490fd5b6201dda8816201df2d565b156201df24576040810190606082510151511515806201dee9575b156201ddd55750516060015151600191565b604082510151511515806201ded0575b156201ddf75750516040015151600191565b60808251015151151590816201deb6575b50156201de1a57516080015151600191565b805160c081015151156201de6157506201de3960c08251015162004cef565b51516201de4a57505b600090600090565b60c06201de5a9151015162004cef565b5151600191565b602081015151156201de795750516020015151600191565b60a0015180516201de8d575b50506201de42565b6201de989062004cef565b51516201dea657806201de85565b60a06201de5a9151015162004cef565b602091500151602681101562002a2357601014386201de08565b506020810151602681101562002a23576013146201dde5565b50602081018051602681101562002a2357600c149081156201df0d575b506201ddc3565b905051602681101562002a2357600f14386201df06565b50600090600090565b6020018051906026908183101562002a235760018093146201e10b5780518281101562002a23576002146201e10b5780518281101562002a23576003146201e10b578051908282101562002a2357600480921462016d51578051838110156201e0f65760051462016d51578051838110156201e0f65760061462016d51578051838110156201e0f65760071462016d51578051838110156201e0f65760081462016d51578051838110156201e0f65760091462016d51578051838110156201e0f657600a1462016d51578051838110156201e0f657600b1462016d51578051838110156201e0f657600c1462016d51578051838110156201e0f657600d1462016d51578051838110156201e0f657600e1462016d51578051838110156201e0f657600f1462016d51578051838110156201e0f65760101462016d51578051838110156201e0f65760111462016d51578051838110156201e0f65760121462016d51578051838110156201e0f65760131462016d51578051838110156201e0f65760141462016d51578051838110156201e0f65760151462016d515751918210156201e0e15750601e14620032d25750600090565b602190634e487b7160e01b6000525260246000fd5b602183634e487b7160e01b6000525260246000fd5b505090565b6201e11b816201df2d565b156201e18a576020810151602681101562002a23576004146201e177576040015160c0015180516201e16557506040516201e1568162002b3f565b60008152600036813790600090565b6201e1709062004cef565b5190600190565b60c060406201e170920151015162004d13565b506040516201e1568162002b3f565b6020810151602681101562002a23576004146201e1bf57506040516201e1568162002b3f565b60c060406201e170920151015162004cef565b6201e1dd816201e322565b156201e3125760208101908151916026908184101562002a235760018094146201e2f75780518281101562002a23576003146201e2f7578051908282101562002a235760048092146201e2db578051838110156201e0f6576005146201e2db578051838110156201e0f6576006146201e2db578051838110156201e0f6576014146201e2db578051838110156201e0f6576015146201e2db5751918210156201e0e15750601e146201e2bd575050604051906201e29a8262002b3f565b60008252604051916201e2ad8362002b3f565b6000835260003681379190600090565b604001916201e2d660a06200779b818651015162004cef565b519190565b505050604001916201e2d660a06200779b818651015162004cef565b5050604001916201e2d660a06200779b818651015162004cef565b50604051906201e29a8262002b3f565b6020018051906026908183101562002a235760018093146201e10b5780518281101562002a2357600214620065c75780518281101562002a23576003146201e10b578051908282101562002a2357600480921462016d51578051838110156201e0f65760141462016d51578051838110156201e0f65760151462016d51578051838110156201e0f657601e1462016d51578051838110156201e0f65760051462016d515751918210156201e0e15750600614620032d25750600090565b916101f581146201e489576101f681146201e47d576101f781146201e471576101f881146201e465576101f981146201e459576101fa81146201e44d576101fb81146201e441576101fc146201e436575050600090565b620032d2916201eeda565b50620032d2916201ed35565b50620032d2916201ebd0565b50620032d2916201ea6b565b50620032d2916201e906565b50620032d2916201e761565b50620032d2916201e5fc565b50620032d291906020019060019182815151036201e5a257826201e4ae825162004cef565b5151036201e548576020820151602681101562002a2357600203620065c757600091835b6201e4e05750505050600090565b604081019260a0936201e4f7858251015162004d24565b51518210156201e54057816200743f87966201e5169351015162004d24565b516201e5276200680d855162004cef565b5110620051c4576201e5399062004cdf565b926201e4d2565b505062016d86565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201e70757826201e61b825162004cef565b5151036201e6ad576020820151602681101562002a2357600203620065c757600091835b6201e64d5750505050600090565b604081019260a0936201e664858251015162004d24565b51518210156201e54057816200743f87966201e6839351015162004d24565b516201e6946200680d855162004cef565b5111620051c4576201e6a69062004cdf565b926201e63f565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530323a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201e8ac5760026201e781825162004cef565b5151036201e852576020820151602681101562002a2357600203620065c757600091835b6201e7b35750505050600090565b604081019260a0936201e7ca858251015162004d24565b51518210156201e5405781856201e7eb826200743f8a998651015162004d24565b516201e7fc6200680d885162004cef565b51111592836201e821575b505050620051c4576201e81a9062004cdf565b926201e7a5565b5101516201e83592506200743f9062004d24565b516201e846620169f0855162004cef565b5110158138806201e807565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530333a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201ea1157826201e925825162004cef565b5151036201e9b7576020820151602681101562002a2357600203620065c757600091835b6201e9575750505050600090565b604081019260a0936201e96e858251015162004d24565b51518210156201e54057816200743f87966201e98d9351015162004d24565b516201e99e6200680d855162004cef565b5114620051c4576201e9b09062004cdf565b926201e949565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201eb7657826201ea8a825162004cef565b5151036201eb1c576020820151602681101562002a2357600203620065c757600091835b6201eabc5750505050600090565b604081019260a0936201ead3858251015162004d35565b51518210156201e54057816200743f87966201eaf29351015162004d13565b516201eb036200680d855162004cef565b5110620051c4576201eb159062004cdf565b926201eaae565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201ecdb57826201ebef825162004cef565b5151036201ec81576020820151602681101562002a2357600203620065c757600091835b6201ec215750505050600090565b604081019260a0936201ec38858251015162004d35565b51518210156201e54057816200743f87966201ec579351015162004d13565b516201ec686200680d855162004cef565b5111620051c4576201ec7a9062004cdf565b926201ec13565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530363a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201ee805760026201ed55825162004cef565b5151036201ee26576020820151602681101562002a2357600203620065c757600091835b6201ed875750505050600090565b604081019260a0936201ed9e858251015162004d35565b51518210156201e5405781856201edbf826200743f8a998651015162004d13565b516201edd06200680d885162004cef565b51111592836201edf5575b505050620051c4576201edee9062004cdf565b926201ed79565b5101516201ee0992506200743f9062004d13565b516201ee1a620169f0855162004cef565b5110158138806201eddb565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530373a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201efe557826201eef9825162004cef565b5151036201ef8b576020820151602681101562002a2357600203620065c757600091835b6201ef2b5750505050600090565b604081019260a0936201ef42858251015162004d35565b51518210156201e54057816200743f87966201ef619351015162004d13565b516201ef726200680d855162004cef565b5114620051c4576201ef849062004cdf565b926201ef1d565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530383a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b91603381036201f129575060209150016001815151036201f0d95760016201f068825162004cef565b5151036201f086576200680d6201f080915162004cef565b51421190565b60405162461bcd60e51b815260206004820152602560248201527f43452049445f35313a2055494e543235365f324441525241595b305d20697320604482015264656d70747960d81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f43452049445f35313a2055494e543235365f3244415252415920697320656d70604482015261747960f01b6064820152608490fd5b603481036201f212575060209150016001815151036201f1c25760016201f151825162004cef565b5151036201f16f576200680d6201f169915162004cef565b51421090565b60405162461bcd60e51b815260206004820152602560248201527f43452049445f35323a2055494e543235365f324441525241595b305d20697320604482015264656d70747960d81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f43452049445f35323a2055494e543235365f3244415252415920697320656d70604482015261747960f01b6064820152608490fd5b603581036201f324575060209150016001815151036201f2d45760026201f23a825162004cef565b5151036201f27a576201f2526200680d825162004cef565b5142101590816201f261575090565b6201f2739150620169f0905162004cef565b5142111590565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f35333a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f43452049445f35333a2055494e543235365f3244415252415920697320656d70604482015261747960f01b6064820152608490fd5b603681036201f428575060209150016001815151036201f3ce5760016201f34c825162004cef565b5151036201f37457620167cc6200680d6201f367426200621c565b5050505050925162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f35343a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35343a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603781036201f51f575060209150016001815151036201f4c55760016201f450825162004cef565b5151036201f46b57620168cd6200680d6201f367426200621c565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f35353a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35353a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603881036201f623575060209150016001815151036201f5c95760026201f547825162004cef565b5151036201f56f576201f55a426200621c565b5050505050620169cd6200680d835162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f35363a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35363a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603981036201f728575060209150016001815151036201f6ce5760016201f64b825162004cef565b5151036201f67457620167cc6200680d6201f666426200621c565b505050509390505162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f35373a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35373a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603a81036201f81f575060209150016001815151036201f7c55760016201f750825162004cef565b5151036201f76b57620168cd6200680d6201f666426200621c565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f35383a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35383a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603b81036201f924575060209150016001815151036201f8ca5760026201f847825162004cef565b5151036201f870576201f85a426200621c565b505050509050620169cd6200680d835162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f35393a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35393a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603c81036201fa29575060209150016001815151036201f9cf5760016201f94c825162004cef565b5151036201f97557620167cc6200680d6201f967426200621c565b505050949150505162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36303a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36303a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603d81036201fb20575060209150016001815151036201fac65760016201fa51825162004cef565b5151036201fa6c57620168cd6200680d6201f967426200621c565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36313a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36313a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603e81036201fc25575060209150016001815151036201fbcb5760026201fb48825162004cef565b5151036201fb71576201fb5b426200621c565b505050915050620169cd6200680d835162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f36323a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36323a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603f81036201fd2a575060209150016001815151036201fcd05760016201fc4d825162004cef565b5151036201fc7657620167cc6200680d6201fc68426200621c565b505095925050505162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36333a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36333a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b6040928184036201fe20575050602001906001825151036201fdc85760016201fd54835162004cef565b5151036201fd705750620168cd6200680d6201fc68426200621c565b5162461bcd60e51b815260206004820152603060248201527f43452049445f36343a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f36343a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b604182036201ff22575050602001906001825151036201feca5760026201fe48835162004cef565b5151036201fe7257506201fe5c426200621c565b505092505050620169cd6200680d835162004cef565b5162461bcd60e51b815260206004820152603160248201527f43452049445f36353a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f36353a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b9092604284036201ff3a5750620032d29250620215a8565b604384036201ff505750620032d29250620217b2565b60448481036201ff68575050620032d29250620219b4565b604585036201ff7f575050620032d2925062021c31565b604685036201ff96575050620032d2925062021e33565b604785036201ffad575050620032d2925062022035565b604885036201ffc4575050620032d2925062022318565b604985036201ffdb575050620032d2925062022625565b604a85036201fff2575050620032d2925062022903565b604b850362020009575050620032d2925062022ccb565b604c850362020020575050620032d2925062022e76565b604d850362020037575050620032d2925062022f7a565b604e85036202004e575050620032d29250620230d2565b604f850362020065575050620032d2925062023253565b605085036202007c575050620032d2925062023357565b91909293605181146000146202017857505090916020019160018351510362020120576001620200ad845162004cef565b515103620200c8575050620167cc6200680d47925162004cef565b907f43452049445f38313a2055494e543235365f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b907f43452049445f38313a2055494e543235365f32444152524159206d7573742068608492519162461bcd60e51b835260206004840152602d60248401528201526000805160206203378c8339815191526064820152fd5b605281036202026d57505090916020019160018351510362020215576001620201a2845162004cef565b515103620201bd575050620168cd6200680d47925162004cef565b907f43452049445f38323a2055494e543235365f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b907f43452049445f38323a2055494e543235365f32444152524159206d7573742068608492519162461bcd60e51b835260206004840152602d60248401528201526000805160206203378c8339815191526064820152fd5b60538103620203835750509091602001916001835151036202032b57600262020297845162004cef565b515103620202d357505047620202b26200680d835162004cef565b5111159081620202c0575090565b9050620169f7620169f047925162004cef565b907f43452049445f38333a2055494e543235365f324441525241595b305d206d7573608492519162461bcd60e51b835260206004840152603160248401528201526000805160206203392c8339815191526064820152fd5b907f43452049445f38333a2055494e543235365f32444152524159206d7573742068608492519162461bcd60e51b835260206004840152602d60248401528201526000805160206203378c8339815191526064820152fd5b605481036202047857505090916020019160018351510362020420576001620203ad845162004cef565b515103620203c857505062016afb6200680d47925162004cef565b907f43452049445f38343a2055494e543235365f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b907f43452049445f38343a2055494e543235365f32444152524159206d7573742068608492519162461bcd60e51b835260206004840152602d60248401528201526000805160206203378c8339815191526064820152fd5b605581036202063357506020840192600284515103620205db5760019283620204a2865162004d13565b51510362020584575090829160009586945b620204cf575b50505050506200680d620167cc915162004d13565b9091929395620204e28383015162004cef565b51518710156202057d5762020539908415620205445762009513906202051d6103e8620205158b6200743f8c5162004cef565b5110620234af565b6201b575620205328a6200743f8b5162004cef565b516200610a565b9392919083620204b4565b6200951390620205616103e8620205158b6200743f8c5162004cef565b6201b575620205768a6200743f8b5162004cef565b5162006139565b95620204ba565b7f43452049445f38353a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f38353a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b60568103620207b6575060208401926002845151036202075e57600192836202065d865162004d13565b51510362020707575090829160009586945b6202068a575b50505050506200680d620168cd915162004d13565b90919293956202069d8383015162004cef565b51518710156202070057620206d8908415620206e35762009513906202051d6103e8620206d08b6200743f8c5162004cef565b511062023521565b93929190836202066f565b6200951390620205616103e8620206d08b6200743f8c5162004cef565b9562020675565b7f43452049445f38363a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f38363a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b91949091605781036202097c5750602084019460028651510362020923576002620207e2875162004d13565b515103620208cb5750600092835b620207fe8287015162004cef565b51518510156202089157906202085685620207fe93898760001462020860576103e862020839620092e0946200743f62020841945162004cef565b511062023593565b6201b57562020532896200743f8d5162004cef565b94909150620207f0565b6103e862020839620092e0946200743f6202087c945162004cef565b6201b57562020576896200743f8d5162004cef565b93505093925050620208a86200680d835162004d13565b518110159182620208b857505090565b620169f7919250620169f0905162004d13565b6084907f43452049445f38373a20414444524553535f324441525241595b305d206d757385519162461bcd60e51b835260206004840152603160248401528201526000805160206203392c8339815191526064820152fd5b6084907f43452049445f38373a20414444524553535f32444152524159206d757374206885519162461bcd60e51b835260206004840152602d60248401528201526c185d99480c88195b195b595b9d609a1b6064820152fd5b909491906058810362020b335750602084019260028451510362020adb5760019283620209aa865162004d13565b51510362020a84575090829160009586945b620209d65750505050506200680d620167cc915162004d13565b9091929395620209e98383015162004cef565b51518710156202057d5762020a4090841562020a4b57620095139062020a246103e862020a1c8b6200743f8c5162004cef565b511062023605565b6201b57562020a398a6200743f8b5162004cef565b5162005e1c565b9392919083620209bc565b620095139062020a686103e862020a1c8b6200743f8c5162004cef565b6201b57562020a7d8a6200743f8b5162004cef565b5162005e52565b7f43452049445f38383a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f38383a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b6059810362020cae5750602084019260028451510362020c56576001928362020b5d865162004d13565b51510362020bff575090829160009586945b62020b895750505050506200680d620168cd915162004d13565b909192939562020b9c8383015162004cef565b5151871015620207005762020bd790841562020be257620095139062020a246103e862020bcf8b6200743f8c5162004cef565b511062023677565b939291908362020b6f565b620095139062020a686103e862020bcf8b6200743f8c5162004cef565b7f43452049445f38393a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f38393a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b91949091605a810362020e3a5750602084019460028651510362020de157600262020cda875162004d13565b51510362020d895750600092835b62020cf68287015162004cef565b515185101562020891579062020d4e8562020cf693898760001462020d58576103e862020d31620092e0946200743f62020d39945162004cef565b5110620236e9565b6201b57562020a39896200743f8d5162004cef565b9490915062020ce8565b6103e862020d31620092e0946200743f62020d74945162004cef565b6201b57562020a7d896200743f8d5162004cef565b6084907f43452049445f39303a20414444524553535f324441525241595b305d206d757385519162461bcd60e51b835260206004840152603160248401528201526000805160206203392c8339815191526064820152fd5b6084907f43452049445f39303a20414444524553535f32444152524159206d757374206885519162461bcd60e51b835260206004840152602d60248401528201526c185d99480c88195b195b595b9d609a1b6064820152fd5b90949190605b8103620210135750602084019260028451510362020fbb576001928362020e68865162004d13565b51510362020f64575090829160009586945b62020e945750505050506200680d620167cc915162004d13565b909192939562020ea78383015162004cef565b51518710156202057d57831562020f17576103e862020ed98162020ed18a6200743f8b5162004cef565b51106202375b565b62020eea886200743f895162004cef565b519081101562004cfd5762020f0c916006620095139260031b01549062006200565b939291908362020e7a565b6103e862020f308162020ed18a6200743f8b5162004cef565b62020f41886200743f895162004cef565b519081101562004cfd5762020f0c91611fbe620095139260031b01549062006200565b7f43452049445f39313a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f39313a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b605c8103620211e8575060208401926002845151036202119057600192836202103d865162004d13565b51510362021139575090829160009586945b620210695750505050506200680d620168cd915162004d13565b90919293956202107c8383015162004cef565b515187101562020700578315620210ec576103e8620210ae81620210a68a6200743f8b5162004cef565b5110620237cd565b620210bf886200743f895162004cef565b519081101562004cfd57620210e1916006620095139260031b01549062006200565b93929190836202104f565b6103e86202110581620210a68a6200743f8b5162004cef565b62021116886200743f895162004cef565b519081101562004cfd57620210e191611fbe620095139260031b01549062006200565b7f43452049445f39323a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f39323a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b605d81969293949614600014620213c8575060208401926002845151036202136f57600262021218855162004d13565b515103620213175750600080955b620212348187015162004cef565b515187101562021300578315620212ae576103e89162021267836202125f8a6200743f8a5162004cef565b51106202383f565b62021278886200743f885162004cef565b519283101562004cfd576202129e620212a5916006620212349560031b01549062006200565b9762004cdf565b96915062021226565b6103e891620212c8836202125f8a6200743f8a5162004cef565b620212d9886200743f885162004cef565b519283101562004cfd576202129e620212a591611fbe620212349560031b01549062006200565b50929350935050620208a86200680d835162004d13565b6084907f43452049445f39333a20414444524553535f324441525241595b305d206d757387519162461bcd60e51b835260206004840152603160248401528201526000805160206203392c8339815191526064820152fd5b6084907f43452049445f39333a20414444524553535f32444152524159206d757374206887519162461bcd60e51b835260206004840152602d60248401528201526c185d99480c88195b195b595b9d609a1b6064820152fd5b9094929190605e0362016d86576020840192600284515103620215505760019283620213f5865162004d13565b515103620214f9575090829160009586945b62021422575b50505050506200680d62016afb915162004d13565b9091929395620214358383015162004cef565b5151871015620214f2578315620214a5576103e862021467816202145f8a6200743f8b5162004cef565b5110620238b1565b62021478886200743f895162004cef565b519081101562004cfd576202149a916006620095139260031b01549062006200565b939291908362021407565b6103e8620214be816202145f8a6200743f8b5162004cef565b620214cf886200743f895162004cef565b519081101562004cfd576202149a91611fbe620095139260031b01549062006200565b956202140d565b7f43452049445f39343a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f39343a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b90604081019060018251510362021758576001620215c7835162004cef565b515103620216fe5760200191600183515103620216a4576001620215ec845162004cef565b5151036202164a571562021626576200680d6202161e620167cc926201b3c46200680d60018060a01b03925162004cef565b925162004cef565b6200680d6202161e620167cc926201b43f6200680d60018060a01b03925162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36363a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36363a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36363a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36363a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b9060408101906001825151036202195a576001620217d1835162004cef565b515103620219005760200191600183515103620218a6576001620217f6845162004cef565b5151036202184c571562021828576200680d6202161e620168cd926201b3c46200680d60018060a01b03925162004cef565b6200680d6202161e620168cd926201b43f6200680d60018060a01b03925162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36373a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36373a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36373a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36373a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b604082019160018351510362021bd7576001620219d2845162004cef565b51510362021b7d576020019060018251510362021b23576002620219f7835162004cef565b51510362021ac9571562021a6d5760018060a01b0362021a21816201b3c46200680d865162004cef565b62021a316200680d845162004cef565b511115928362021a415750505090565b62021a61929350620169f0916201b3c46200680d6202161e935162004cef565b51101538808062016d51565b60018060a01b0362021a89816201b43f6200680d865162004cef565b62021a996200680d845162004cef565b511115928362021aa95750505090565b62021a61929350620169f0916201b43f6200680d6202161e935162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f36383a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36383a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36383a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36383a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b90604081019060018251510362021dd957600162021c50835162004cef565b51510362021d7f576020019160018351510362021d2557600162021c75845162004cef565b51510362021ccb571562021ca7576200680d6202161e620167cc926201c2826200680d60018060a01b03925162004cef565b6200680d6202161e620167cc926201c2fd6200680d60018060a01b03925162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36393a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36393a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36393a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36393a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b90604081019060018251510362021fdb57600162021e52835162004cef565b51510362021f81576020019160018351510362021f2757600162021e77845162004cef565b51510362021ecd571562021ea9576200680d6202161e620168cd926201c2826200680d60018060a01b03925162004cef565b6200680d6202161e620168cd926201c2fd6200680d60018060a01b03925162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37303a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37303a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37303a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37303a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60408201916001835151036202224c57600162022053845162004cef565b515103620221f257602001906001825151036202219857600262022078835162004cef565b5151036202213e5715620220e25760018060a01b03620220a2816201c2826200680d865162004cef565b620220b26200680d845162004cef565b5111159283620220c25750505090565b62021a61929350620169f0916201c2826200680d6202161e935162004cef565b60018060a01b03620220fe816201c2fd6200680d865162004cef565b6202210e6200680d845162004cef565b51111592836202211e5750505090565b62021a61929350620169f0916201c2fd6200680d6202161e935162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f37313a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37313a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37313a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37313a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b15620222ae57565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f37323a20746f6b656e436c617373496e6465782028706172616d6044820152600080516020620338ec833981519152606482015266662072616e676560c81b608482015260a490fd5b906040808201916001835151036202255a57600162022338845162004cef565b515103620225015760200192600184515103620224a85760026202235d855162004cef565b5151036202244f5715620223e0576103e8906202238c82620223846200680d875162004cef565b5110620222a6565b6202239c6200680d855162004cef565b519182101562004cfd576003620169f092620167cc94620223c96200680d60018060a01b03925162004cef565b5116600052811b0160205260002054925162004cef565b6103e890620223f982620223846200680d875162004cef565b620224096200680d855162004cef565b519182101562004cfd57611fbb620169f092620167cc94620224376200680d60018060a01b03925162004cef565b511660005260031b0160205260002054925162004cef565b815162461bcd60e51b815260206004820152603160248201527f43452049445f37323a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152602d60248201527f43452049445f37323a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152603060248201527f43452049445f37323a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152602d60248201527f43452049445f37323a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b15620225bb57565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f37333a20746f6b656e436c617373496e6465782028706172616d6044820152600080516020620338ec833981519152606482015266662072616e676560c81b608482015260a490fd5b906040808201916001835151036202283857600162022645845162004cef565b515103620227df5760200192600184515103620227865760026202266a855162004cef565b5151036202272d5715620226d6576103e8906202269982620226916200680d875162004cef565b5110620225b3565b620226a96200680d855162004cef565b519182101562004cfd576003620169f092620168cd94620223c96200680d60018060a01b03925162004cef565b6103e890620226ef82620226916200680d875162004cef565b620226ff6200680d855162004cef565b519182101562004cfd57611fbb620169f092620168cd94620224376200680d60018060a01b03925162004cef565b815162461bcd60e51b815260206004820152603160248201527f43452049445f37333a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152602d60248201527f43452049445f37333a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152603060248201527f43452049445f37333a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152602d60248201527f43452049445f37333a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b156202289957565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f37343a20746f6b656e436c617373496e6465782028706172616d6044820152600080516020620338ec833981519152606482015266662072616e676560c81b608482015260a490fd5b9060408082019260018451510362022c7257600162022923855162004cef565b51510362022c195760208093019260018451510362022bc157600391826202294c865162004cef565b51510362022b63571562022a5f576103e8916202297b83620229736200680d885162004cef565b511062022891565b6202298b6200680d865162004cef565b51928084101562004cfd5760018060a01b038281620229af6200680d8b5162004cef565b5116956000968752811b01845285852054620229d0620169f0895162004cef565b5111159788620229e6575b505050505050505090565b909192939495969750620229ff6200680d895162004cef565b519283101562022a4b57916201d46a95939162022a276200680d62022a3a9997955162004cef565b51168452811b0190522054925162004cef565b5110153880808080808080620229db565b634e487b7160e01b86526032600452602486fd5b6103e862022a7781620229736200680d885162004cef565b62022a876200680d865162004cef565b51908082101562004cfd5760018060a01b03938462022aab6200680d8a5162004cef565b5116946000958652611fbb8094831b0185528686205462022ad1620169f08a5162004cef565b511115988962022ae8575b50505050505050505090565b9091929394959697985062022b026200680d8a5162004cef565b519384101562022b4f579162022b3d9795939162022b2b6200680d6201d46a9997955162004cef565b511685521b0190522054925162004cef565b51101538808080808080808062022adc565b634e487b7160e01b87526032600452602487fd5b835162461bcd60e51b815260048101839052603160248201527f43452049445f37343a2055494e543235365f324441525241595b305d206d7573604482015270742068617665203320656c656d656e747360781b6064820152608490fd5b60849083519062461bcd60e51b82526004820152602d60248201527f43452049445f37343a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152fd5b815162461bcd60e51b815260206004820152603060248201527f43452049445f37343a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152602d60248201527f43452049445f37343a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b906020019060018251510362022d7557600162022ce9835162004cef565b51510362022d1b571562022d0957620167cc6200680d6202161e62022e38565b620167cc6200680d6202161e62022dcf565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37353a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37353a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b6000805b6103e8811062022de1575090565b908160031b60ff611fbf820154161562022e325762022e1f62022e2c9262022e17611fb962022e2594015462005e438762005fe5565b9290620060a1565b62006200565b9162004cdf565b62022dd3565b50905090565b6000805b6103e8811062022e4a575090565b9060ff60078360031b015416156200619f5762022e2562022e70916201b575846200610a565b62022e3c565b906020019060018251510362022f2057600162022e94835162004cef565b51510362022ec6571562022eb457620168cd6200680d6202161e62022e38565b620168cd6200680d6202161e62022dcf565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37363a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37363a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b90602001906001825151036202307857600262022f98835162004cef565b5151036202301e571562022fe25762022fb062022e38565b62022fc06200680d835162004cef565b511115908162022fce575090565b9050620169f7620169f06202161e62022e38565b62022fec62022dcf565b62022ffc6200680d835162004cef565b51111590816202300a575090565b9050620169f7620169f06202161e62022dcf565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f37373a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37373a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b90602001906001825151036202317c576001620230f0835162004cef565b5151036202312257156202311057620167cc6200680d6202161e62023215565b620167cc6200680d6202161e620231d6565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37383a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37383a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b6000805b6103e88110620231e8575090565b9060ff611fbf8360031b015416156200619f5762022e256202320f916201b5758462005e52565b620231da565b6000805b6103e8811062023227575090565b9060ff60078360031b015416156200619f5762022e256202324d916201b5758462005e1c565b62023219565b9060200190600182515103620232fd57600162023271835162004cef565b515103620232a357156202329157620168cd6200680d6202161e62023215565b620168cd6200680d6202161e620231d6565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37393a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37393a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b90602001906001825151036202345557600262023375835162004cef565b515103620233fb5715620233bf576202338d62023215565b6202339d6200680d835162004cef565b5111159081620233ab575090565b9050620169f7620169f06202161e62023215565b620233c9620231d6565b620233d96200680d835162004cef565b5111159081620233e7575090565b9050620169f7620169f06202161e620231d6565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f38303a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f38303a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b15620234b757565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f38353a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202352957565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f38363a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202359b57565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f38373a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202360d57565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f38383a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202367f57565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f38393a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b15620236f157565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f39303a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202376357565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f39313a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b15620237d557565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f39323a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202384757565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f39333a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b15620238b957565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f39343a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b9161019181146202398b5761019281146202397f576101938114620239735761019681146202396757610197146202395c575050600090565b620032d29162023ec1565b50620032d29162023ddc565b50620032d29162023c37565b50620032d29162023af6565b50620032d2919060200190600191828151510362023a9c5782620239b0825162004cef565b51510362023a42576020820151602681101562002a2357600a03620065c757600091835b620239e25750505050600090565b604081019260a093620239f9858251015162004cef565b51518210156201e54057816200743f879662023a189351015162004cef565b5162023a296200680d855162004cef565b5114620051c45762023a3b9062004cdf565b92620239d4565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3430313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3430313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200190600191828151510362023bdd576020820151602681101562002a2357600a03620065c75782916000935b62023b335750505050600090565b6040810160a062023b48818351015162004cef565b51518610156201e54057906000855b62023b73575b50505062023b6c839462004cdf565b9362023b25565b62023b7f855162004cef565b515181101562023bd75762023b9d876200743f858551015162004cef565b5162023baf826200743f885162004cef565b511462023bcd579062023bc486939262004cdf565b90919262023b57565b5050505050905090565b62023b5d565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3430323a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200190600191828151510362023d8257600262023c57825162004cef565b51510362023d28576020820151602681101562002a2357600a03620065c757600091835b62023c895750505050600090565b604081019260a09362023ca0858251015162004cef565b51518210156201e54057818562023cc1826200743f8a998651015162004cef565b5162023cd26200680d885162004cef565b511115928362023cf7575b505050620051c45762023cf09062004cdf565b9262023c7b565b51015162023d0b92506200743f9062004cef565b5162023d1c620169f0855162004cef565b51101581388062023cdd565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3430333a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3430333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b600191828151510362023e68576020820151602681101562002a2357600b03620065c757600091835b62023e135750505050600090565b60408101515192835181101562023e615762023e4a62023e3582879662004d46565b5162023e42855162004cef565b51906203358c565b620051c45762023e5a9062004cdf565b9262023e05565b5062016d86565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3430363a2054686520535452494e475f4152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b600191828151510362023f46576020820151602681101562002a2357600b03620065c757600091835b62023ef85750505050600090565b60408101515192835181101562023e615762023f2f62023f1a82879662004d46565b5162023f27855162004cef565b519062006518565b620051c45762023f3f9062004cdf565b9262023eea565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3430373a2054686520535452494e475f4152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b916097811462023fc35760981462023fb8575050600090565b620032d291620240d4565b50602001805151620032d29290600019016202407b57600162023fe7835162004cef565b515103620240215760200151602681101562002a23576200680d6202161e620240109262033353565b51146202401c57600090565b600190565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3135313a205468652055494e545f324441525241595b305d206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3135313a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b919091602080930160019182825151036202415b57938293946000935b62024100575050505050600090565b6202410c835162004cef565b5151841015620174c9578181015193602685101562002a235762024131869562033353565b62024142826200743f875162004cef565b5114620174c157620241549062004cdf565b93620240f1565b60405162461bcd60e51b815260048101869052602b60248201527f43452049445f3135323a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b926102bd8114620242b7576102be8114620242ab576102bf81146202429f576102c0811462024293576102c1811462024287576102c281146202427b576102c381146202426f576102c4811462024263576102c5811462024257576102c681146202424b576102c781146202423f576102c8146202423457505050600090565b620032d292620254dc565b50620032d292620252e1565b50620032d292620250dc565b50620032d29262024e6c565b50620032d29262024c67565b50620032d29262024a58565b50620032d29262024939565b50620032d29262024812565b50620032d292620246eb565b50620032d29262024591565b50620032d2926202443d565b50620032d292620242d4565b606482101562004cfd570190600090565b91602080910192600184515103620243e3576001620242f4855162004cef565b51510362024389571562024350576202161e62024342620167cc936202433b620076a16200680d9560018060a01b03845116600052611f4981526040600020930162007387565b90620242c3565b90549060031b1c426200620e565b6202161e62024342620167cc936202433b620076a16200680d9560018060a01b03845116600052613f0181526040600020930162007387565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3730313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3730313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b91602080910192600184515103620245375760016202445d855162004cef565b515103620244dd5715620244a4576202161e62024342620168cd936202433b620076a16200680d9560018060a01b03845116600052611f4981526040600020930162007387565b6202161e62024342620168cd936202433b620076a16200680d9560018060a01b03845116600052611f4981526040600020930162007387565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3730323a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3730323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9160208091019260018451510362024691576002620245b1855162004cef565b515103620246375715620246035781516001600160a01b03166000908152611f49825260409020620245f39262024342926202433b91620076a1910162007387565b620169cd6200680d835162004cef565b81516001600160a01b03166000908152611f49825260409020620245f39262024342926202433b91620076a1910162007387565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3730333a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3730333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9160200191600183515103620247b857600162024709845162004cef565b5151036202475e57156202474c57620076a1602062024729920162007387565b606481101562004cfd576200680d6202161e620167cc92611f4b0154426200620e565b620076a1602062024729920162007387565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3730343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3730343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9160200191600183515103620248df57600162024830845162004cef565b5151036202488557156202487357620076a1602062024850920162007387565b606481101562004cfd576200680d6202161e620168cd92611f4b0154426200620e565b620076a1602062024850920162007387565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3730353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3730353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9160200191600183515103620249fe57600262024957845162004cef565b515103620249a457156202499257620076a1602062024977920162007387565b606481101562004cfd57620245f390611f4b0154426200620e565b620076a1602062024977920162007387565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3730363a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3730363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909291604093848201600193848251510362024c0e578462024a7b835162004cef565b51510362024bb5579584959660001462024b27576000945b62024aa357505050505050600090565b62024aaf825162004cef565b51518510156201adf757859460018060a01b0362024ad3826200743f865162004cef565b51166000526020611f49815262024b0e6200680d62024b0462024342866000206202433b620076a1878c0162007387565b9288015162004cef565b51106201adee5762024b209062004cdf565b9462024a93565b6000945b62024b3b57505050505050600090565b62024b47825162004cef565b51518510156201adf757859460018060a01b0362024b6b826200743f865162004cef565b51166000526020611f49815262024b9c6200680d62024b0462024342866000206202433b620076a1878c0162007387565b51106201adee5762024bae9062004cdf565b9462024b2b565b865162461bcd60e51b815260206004820152603160248201527f43452049445f3730373a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b865162461bcd60e51b815260206004820152602e60248201527f43452049445f3730373a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909291604093848201600193848251510362024e13578462024c8a835162004cef565b51510362024dba579584959660001462024d2c576000945b62024cb257505050505050600090565b62024cbe825162004cef565b51518510156201adf757859460018060a01b0362024ce2826200743f865162004cef565b51166000526020611f49815262024d136200680d62024b0462024342866000206202433b620076a1878c0162007387565b51116201adee5762024d259062004cdf565b9462024ca2565b6000945b62024d4057505050505050600090565b62024d4c825162004cef565b51518510156201adf757859460018060a01b0362024d70826200743f865162004cef565b51166000526020611f49815262024da16200680d62024b0462024342866000206202433b620076a1878c0162007387565b51116201adee5762024db39062004cdf565b9462024d30565b865162461bcd60e51b815260206004820152603160248201527f43452049445f3730383a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b865162461bcd60e51b815260206004820152602e60248201527f43452049445f3730383a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b929160408082019260019384815151036202508357600262024e8f825162004cef565b5151036202502a5784959660001462024f66576000945b62024eb657505050505050600090565b62024ec2815162004cef565b51518510156201adf757859460018060a01b0362024ee6826200743f855162004cef565b51166000526020611f49815262024f0f62024342866000206202433b620076a185890162007387565b9086019062024f236200680d835162004cef565b51811015918262024f48575b50506201adee5762024f419062004cdf565b9462024ea6565b62024f5b919250620169f0905162004cef565b511015388062024f2f565b6000945b62024f7a57505050505050600090565b62024f86815162004cef565b51518510156201adf757859460018060a01b0362024faa826200743f855162004cef565b51166000526020611f49815262024fd362024342866000206202433b620076a185890162007387565b9086019062024fe76200680d835162004cef565b5181101591826202500c575b50506201adee57620250059062004cdf565b9462024f6a565b6202501f919250620169f0905162004cef565b511015388062024ff3565b825162461bcd60e51b815260206004820152603160248201527f43452049445f3730393a2054686520414444524553535f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b825162461bcd60e51b815260206004820152602e60248201527f43452049445f3730393a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b92916040808201926001938481515103620252885784620250fe825162004cef565b5151036202522f57849596600014620251a5576000945b6202512257505050505090565b6202512e815162004cef565b51518510156201d47c5760018060a01b0362025150866200743f845162004cef565b51166000526020611f4981526202518b6200680d6202518162024342876000206202433b620076a1878a0162007387565b9287015162004cef565b51116201ad8c576202519e869562004cdf565b9462025115565b6000945b620251b657505050505090565b620251c2815162004cef565b51518510156201d47c5760018060a01b03620251e4866200743f845162004cef565b51166000526020611f498152620252156200680d6202518162024342876000206202433b620076a1878a0162007387565b51116201ad8c5762025228869562004cdf565b94620251a9565b825162461bcd60e51b815260206004820152603160248201527f43452049445f3731303a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b825162461bcd60e51b815260206004820152602e60248201527f43452049445f3731303a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9291604080820192600193848151510362025483578462025303825162004cef565b5151036202542a57849596600014620253a0576000945b6202532757505050505090565b62025333815162004cef565b51518510156201d47c5760018060a01b0362025355866200743f845162004cef565b51166000526020611f498152620253866200680d6202518162024342876000206202433b620076a1878a0162007387565b51106201ad8c5762025399869562004cdf565b946202531a565b6000945b620253b157505050505090565b620253bd815162004cef565b51518510156201d47c5760018060a01b03620253df866200743f845162004cef565b51166000526020611f498152620254106200680d6202518162024342876000206202433b620076a1878a0162007387565b51106201ad8c5762025423869562004cdf565b94620253a4565b825162461bcd60e51b815260206004820152603160248201527f43452049445f3731313a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b825162461bcd60e51b815260206004820152602e60248201527f43452049445f3731313a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b92916040808201926001938481515103620256e9576002620254ff825162004cef565b5151036202569057849596600014620255d1576000945b6202552357505050505090565b6202552f815162004cef565b51518510156201d47c5760018060a01b0362025551866200743f845162004cef565b51166000526020611f4981526202557a62024342856000206202433b620076a185880162007387565b908501906202558e6200680d835162004cef565b518110918215620255b4575b50506201ad8c57620255ad869562004cdf565b9462025516565b620255c7919250620169f0905162004cef565b511038806202559a565b6000945b620255e257505050505090565b620255ee815162004cef565b51518510156201d47c5760018060a01b0362025610866200743f845162004cef565b51166000526020613f0181526202563962024342856000206202433b620076a185880162007387565b908501906202564d6200680d835162004cef565b51811091821562025673575b50506201ad8c576202566c869562004cdf565b94620255d5565b62025686919250620169f0905162004cef565b5110388062025659565b825162461bcd60e51b815260206004820152603160248201527f43452049445f3731323a2054686520414444524553535f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b825162461bcd60e51b815260206004820152602e60248201527f43452049445f3731323a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b6001938085036202575a5750620032d2935062025e2a565b60028103620257705750620032d2935062025f14565b600381036202587a575050906040019180835151036202581e5762025796835162004cef565b515103620257bf57620257b96200680d60018060a01b0380935116935162004cef565b51161490565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f333a20414444524553535f324441525241595b305d206d757374604482015270081a185d99481bdb9948195b195b595b9d607a1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f333a20414444524553535f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b60049080820362025893575050620032d2935062026059565b60058103620258aa575050620032d293506202619e565b60068103620258c1575050620032d29350620262e3565b60078103620258d8575050620032d293506202651f565b60088103620258ef575050620032d293506202677d565b6009810362025906575050620032d29350620269bd565b600a81036202591d575050620032d2935062026bf1565b600b810362025934575050620032d2935062026ef3565b600c81036202594b575050620032d293506202711f565b600d810362025962575050620032d293506202736f565b600e810362025979575050620032d2935062027568565b600f810362025990575050620032d29350620278b8565b60108103620259a7575050620032d2935062027ab1565b60118103620259be575050620032d2935062027bd1565b60128103620259d5575050620032d2935062027cf1565b60138103620259ec575050620032d2935062027e87565b6014810362025a03575050620032d2935062027fa7565b6015810362025a1a575050620032d29350620280c7565b6019810362025a31575050620032d2935062028250565b601a810362025a48575050620032d2935062028388565b601b810362025a5f575050620032d29350620284c0565b601c8195929394951460001462025ba2575060200193808551510362025b495762025a8b855162004cef565b51510362025af057506000901562025aca5750516001600160a01b03166000908152611f47602052604090205490620167cc906200680d905162004cef565b90516001600160a01b03168152613eff602052604090205490620167cc906200680d9081565b60849060206040519162461bcd60e51b8352820152603260248201527f43452049445f32383a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152fd5b60405162461bcd60e51b8152602081840152602f60248201527f43452049445f32383a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b601d810362025cdd575060200193808551510362025c845762025bc6855162004cef565b51510362025c2b57506000901562025c055750516001600160a01b03166000908152611f47602052604090205490620168cd906200680d905162004cef565b90516001600160a01b03168152613eff602052604090205490620168cd906200680d9081565b60849060206040519162461bcd60e51b8352820152603260248201527f43452049445f32393a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152fd5b60405162461bcd60e51b8152602081840152602f60248201527f43452049445f32393a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b601e810362025e0f5750602001938451510362025db657600262025d02855162004cef565b51510362025d5d57506000901562025d3f5750516001600160a01b03166000908152611f476020526040902054620169cd6200680d835162004cef565b90516001600160a01b03168152613eff6020526040902054620245f3565b60849060206040519162461bcd60e51b8352820152603360248201527f43452049445f33303a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152fd5b60849060206040519162461bcd60e51b8352820152602f60248201527f43452049445f33303a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152fd5b9294509291601f14159050620065c757620032d2926202862f565b91909160018251510362025ebb571562025e8757620032d29160018060a01b03905116600052611f406020526200116462025e8162025e726001604060002001935162004cef565b51926040519283809262002cb6565b6203358c565b620032d29160018060a01b03905116600052613ef86020526200116462025e8162025e726001604060002001935162004cef565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f313a20535452494e475f4152524159206d75737420686176652060448201526a1bdb9948195b195b595b9d60aa1b6064820152608490fd5b916020019160018351510362025ffd57600162025f32845162004cef565b51510362025f9e571562025f6f57516001600160a01b03166000908152611f406020526040902060020154905162016afb906200680d9062004cef565b516001600160a01b03166000908152613ef86020526040902060020154905162016afb906200680d9062004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f323a2055494e543235365f324441525241595b305d206d757374604482015270081a185d99481bdb9948195b195b595b9d607a1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f323a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b91602001916001835151036202614257600162026077845162004cef565b515103620260e35715620260b457516001600160a01b03166000908152611f4060205260409020600201549051620167cc906200680d9062004cef565b516001600160a01b03166000908152613ef860205260409020600201549051620167cc906200680d9062004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f343a2055494e543235365f324441525241595b305d206d757374604482015270081a185d99481bdb9948195b195b595b9d607a1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f343a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b916020019160018351510362026287576001620261bc845162004cef565b515103620262285715620261f957516001600160a01b03166000908152611f4060205260409020600201549051620168cd906200680d9062004cef565b516001600160a01b03166000908152613ef860205260409020600201549051620168cd906200680d9062004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f353a2055494e543235365f324441525241595b305d206d757374604482015270081a185d99481bdb9948195b195b595b9d607a1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f353a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b9091602080910191600183515103620264c357600262026304845162004cef565b51510362026463576202631c6200680d845162004cef565b516202632d620169f0855162004cef565b5110620263dd5715620263ae5760018060a01b039081845116600052611f4091828252600260406000200154620263696200680d865162004cef565b51111594856202637b57505050505090565b909192939450511660005252620263a0620169f0600260406000200154925162004cef565b5110153880808080620174c1565b60018060a01b039081845116600052613ef891828252600260406000200154620263696200680d865162004cef565b60405162461bcd60e51b815260048101839052605260248201527f43452049445f363a2055494e543235365f324441525241595b305d5b305d206d60448201527f757374206265206c657373207468616e206f7220657175616c20746f2055494e606482015271543235365f324441525241595b305d5b315d60701b608482015260a490fd5b60405162461bcd60e51b815260048101839052603260248201527f43452049445f363a2055494e543235365f324441525241595b305d206d75737460448201527120686176652074776f20656c656d656e747360701b6064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f363a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b9092919260208094019060019283835151036202669e5762026542835162004cef565b515115620266365794839495600014620265c6576000935b62026569575050505050600090565b62026575835162004cef565b5151841015620174c957849360018060a01b03835116600052611f408252600260406000200154620265ad826200743f875162004cef565b5114620174c157620265bf9062004cdf565b936202655a565b6000935b620265d9575050505050600090565b620265e5835162004cef565b5151841015620174c957849360018060a01b03835116600052613ef882526002604060002001546202661d826200743f875162004cef565b5114620174c1576202662f9062004cdf565b93620265ca565b60405162461bcd60e51b815260048101879052603a60248201527f43452049445f373a2055494e543235365f324441525241595b305d206d757374604482015279081a185d9948185d081b19585cdd081bdb9948195b195b595b9d60321b6064820152608490fd5b60405162461bcd60e51b815260048101879052602e60248201527f43452049445f373a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b156202670257565b60405162461bcd60e51b815260206004820152605860248201527f43452049445f383a2055494e543235365f324441525241595b305d5b305d2028604482015260008051602062033a8c833981519152606482015277081d1a19481b195b99dd1a081bd9881d1bdad95b931a5cdd60421b608482015260a490fd5b9160200191600183515103620268de5760026202679b845162004cef565b5151036202687e5780156202686157620267c96103e8620267c16200680d865162004cef565b5110620266fa565b156202681757620267df6200680d835162004cef565b516103e881101562004cfd5760039160018060a01b03905116600052811b01602052620167cc620169f0604060002054925162004cef565b620268276200680d835162004cef565b516103e881101562004cfd57611fbb9160018060a01b0390511660005260031b01602052620167cc620169f0604060002054925162004cef565b620268786103e8620267c16200680d865162004cef565b620267c9565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f383a2055494e543235365f324441525241595b305d206d75737460448201527120686176652074776f20656c656d656e747360701b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f383a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b156202694257565b60405162461bcd60e51b815260206004820152605860248201527f43452049445f393a2055494e543235365f324441525241595b305d5b305d2028604482015260008051602062033a8c833981519152606482015277081d1a19481b195b99dd1a081bd9881d1bdad95b931a5cdd60421b608482015260a490fd5b916020019160018351510362026b1e576002620269db845162004cef565b51510362026abe57801562026aa15762026a096103e862026a016200680d865162004cef565b51106202693a565b1562026a575762026a1f6200680d835162004cef565b516103e881101562004cfd5760039160018060a01b03905116600052811b01602052620168cd620169f0604060002054925162004cef565b62026a676200680d835162004cef565b516103e881101562004cfd57611fbb9160018060a01b0390511660005260031b01602052620168cd620169f0604060002054925162004cef565b62026ab86103e862026a016200680d865162004cef565b62026a09565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f393a2055494e543235365f324441525241595b305d206d75737460448201527120686176652074776f20656c656d656e747360701b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f393a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b1562026b8257565b60405162461bcd60e51b815260206004820152605960248201527f43452049445f31303a2055494e543235365f324441525241595b305d5b305d20604482015260008051602062033aac83398151915260648201526000805160206203380c833981519152608482015260a490fd5b91909160208092019160018351510362026e23576003918262026c15855162004cef565b51510362026dc057801562026da35762026c436103e862026c3b6200680d875162004cef565b511062026b7a565b1562026cfe5762026c596200680d845162004cef565b51916103e88084101562004cfd5785516001600160a01b03908116600090815294831b830184526040852054865162026c9790620169f09062004cef565b511115968762026cac575b5050505050505090565b909192939495965062026cc46200680d885162004cef565b519283101562022a4b5751168452811b0190526040902054905162026cee906201d46a9062004cef565b5110153880808080808062026ca2565b62026d0e6200680d845162004cef565b516103e88082101562004cfd5760018060a01b039384875116946000958652611fbb8094831b018552604086205462026d4c620169f0895162004cef565b511115978862026d6157505050505050505090565b90919293949596975062026d7a6200680d895162004cef565b519384101562022b4f57511685521b0190526040902054905162022a3a906201d46a9062004cef565b62026dba6103e862026c3b6200680d875162004cef565b62026c43565b60405162461bcd60e51b815260048101839052603560248201527f43452049445f31303a2055494e543235365f324441525241595b305d206d757360448201527474206861766520746872656520656c656d656e747360581b6064820152608490fd5b6084906040519062461bcd60e51b82526004820152602f60248201527f43452049445f31303a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152fd5b1562026e8457565b60405162461bcd60e51b815260206004820152605960248201527f43452049445f31313a2055494e543235365f324441525241595b305d5b305d20604482015260008051602062033aac83398151915260648201526000805160206203380c833981519152608482015260a490fd5b91602001916001835151036202704e57600262026f11845162004cef565b51510362026ff457801562026fd75762026f3f6103e862026f376200680d865162004cef565b511062026e7c565b1562026f8d5762026f556200680d835162004cef565b516103e881101562004cfd5760039160018060a01b03905116600052811b0160205262016afb620169f0604060002054925162004cef565b62026f9d6200680d835162004cef565b516103e881101562004cfd57611fbb9160018060a01b0390511660005260031b0160205262016afb620169f0604060002054925162004cef565b62026fee6103e862026f376200680d865162004cef565b62026f3f565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f31313a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31313a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b15620270b057565b60405162461bcd60e51b815260206004820152605960248201527f43452049445f31323a2055494e543235365f324441525241595b305d5b305d20604482015260008051602062033aac83398151915260648201526000805160206203380c833981519152608482015260a490fd5b9160200191600183515103620273155760026202713d845162004cef565b515103620272bb5780156202729e576202716b6103e8620271636200680d865162004cef565b5110620270a8565b156202721057620271816200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b03166000908152600392831b90920160205260408220546064808202939180159085049091141715620271fc57620271d56200680d855162004cef565b5191821015620014ce57506202161e620167cc926006620169f09360031b015490620050d4565b634e487b7160e01b81526011600452602490fd5b620272206200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b0316600090815260039290921b611fbb0160205260408220546064808202939180159085049091141715620271fc57620272766200680d855162004cef565b5191821015620014ce57506202161e620167cc92611fbe620169f09360031b015490620050d4565b620272b56103e8620271636200680d865162004cef565b6202716b565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f31323a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31323a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b91602001916001835151036202750e5760026202738d845162004cef565b515103620274b457156202742657620273ab6200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b03166000908152600392831b90920160205260408220546064808202939180159085049091141715620271fc57620273ff6200680d855162004cef565b5191821015620014ce57506202161e620168cd926006620169f09360031b015490620050d4565b620274366200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b0316600090815260039290921b611fbb0160205260408220546064808202939180159085049091141715620271fc576202748c6200680d855162004cef565b5191821015620014ce57506202161e620168cd92611fbe620169f09360031b015490620050d4565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f31333a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31333a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b906020809301916001835151036202785e57600262027588845162004cef565b515103620278045715620276c857620275a66200680d835162004cef565b516103e8908181101562004cfd5760018060a01b03948584511693600094855260038093811b0182526040852054606481029080820460641490151715620276b457620275f86200680d885162004cef565b518581101562022b4f57841b600601546202761391620050d4565b62027623620169f0885162004cef565b511115968762027637575050505050505090565b90919293949596506202764f6200680d885162004cef565b51918583101562022b4f5751168552821b8201905260408320546064808202949180159086049091141715620271fc576202768f6200680d865162004cef565b5192831015620014ce57501b6006015462026cee916201d46a916202161e91620050d4565b634e487b7160e01b86526011600452602486fd5b620276d86200680d835162004cef565b51906103e88083101562004cfd5760018060a01b039485835116936000948552611fbb809160031b018252604085205493606485029480860460641490151715620276b4576202772d6200680d885162004cef565b51948486101562022b4f576202774e90611fbe809760031b015490620050d4565b6202775e620169f0895162004cef565b51111597886202777357505050505050505090565b9091929394959697506202778c6200680d895162004cef565b519185831015620277f0575116865260031b019052604083205492606484029380850460641490151715620271fc57620277cb6200680d865162004cef565b5191821015620014ce575060031b015462022a3a916201d46a916202161e91620050d4565b634e487b7160e01b88526032600452602488fd5b60405162461bcd60e51b815260048101859052603360248201527f43452049445f31343a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260048101859052602f60248201527f43452049445f31343a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b916020019160018351510362027a57576002620278d6845162004cef565b515103620279fd57156202796f57620278f46200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b03166000908152600392831b90920160205260408220546064808202939180159085049091141715620271fc57620279486200680d855162004cef565b5191821015620014ce57506202161e62016afb926006620169f09360031b015490620050d4565b6202797f6200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b0316600090815260039290921b611fbb0160205260408220546064808202939180159085049091141715620271fc57620279d56200680d855162004cef565b5191821015620014ce57506202161e62016afb92611fbe620169f09360031b015490620050d4565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f31353a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31353a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b916020019160018351510362027b7757600162027acf845162004cef565b51510362027b1d57801562027afd576202161e6200680d91620167cc9360018060a01b03905116906201b5d7565b5051620167cc906200680d906202161e906001600160a01b03166201b583565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f31363a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31363a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b916020019160018351510362027c9757600162027bef845162004cef565b51510362027c3d57801562027c1d576202161e6200680d91620168cd9360018060a01b03905116906201b5d7565b5051620168cd906200680d906202161e906001600160a01b03166201b583565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f31373a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31373a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b90916020019060018251510362027e2d57600262027d10835162004cef565b51510362027dd357801562027d815782516001600160a01b039062027d38908216836201b5d7565b62027d486200680d855162004cef565b511115938462027d59575050505090565b62027d74939450916202161e91620169f0935116906201b5d7565b51101538808080620051c4565b5081516001600160a01b039062027d9a9082166201b583565b62027daa6200680d845162004cef565b511115928362027dba5750505090565b62021a61929350620169f0916202161e9151166201b583565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f31383a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31383a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b916020019160018351510362027f4d57600162027ea5845162004cef565b51510362027ef357801562027ed3576202161e6200680d91620167cc9360018060a01b03905116906201c48e565b5051620167cc906200680d906202161e906001600160a01b03166201c43a565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f31393a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31393a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b91602001916001835151036202806d57600162027fc5845162004cef565b5151036202801357801562027ff3576202161e6200680d91620168cd9360018060a01b03905116906201c48e565b5051620168cd906200680d906202161e906001600160a01b03166201c43a565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f32303a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f32303a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b909160200190600182515103620281f6576002620280e6835162004cef565b5151036202819c5780156202814a5782516001600160a01b03906202810e908216836201c48e565b6202811e6200680d855162004cef565b51111593846202812f575050505090565b62027d74939450916202161e91620169f0935116906201c48e565b5081516001600160a01b0390620281639082166201c43a565b620281736200680d845162004cef565b5111159283620281835750505090565b62021a61929350620169f0916202161e9151166201c43a565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f32313a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f32313a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b91602001916001835151036202832e5760016202826e845162004cef565b515103620282d45715620282a857516001600160a01b03166000908152611f4560205260409020549051620167cc906200680d9062004cef565b516001600160a01b03166000908152613efd60205260409020549051620167cc906200680d9062004cef565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f32353a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f32353a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b916020019160018351510362028466576001620283a6845162004cef565b5151036202840c5715620283e057516001600160a01b03166000908152611f4560205260409020549051620168cd906200680d9062004cef565b516001600160a01b03166000908152613efd60205260409020549051620168cd906200680d9062004cef565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f32363a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f32363a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b9091602080910191600183515103620285d5576002620284e1845162004cef565b5151036202857b57156202854f5760018060a01b039081845116600052611f45918282526040600020546202851b6200680d865162004cef565b51111594856202852d57505050505090565b909192939450511660005252620263a0620169f0604060002054925162004cef565b60018060a01b039081845116600052613efd918282526040600020546202851b6200680d865162004cef565b60405162461bcd60e51b815260048101839052603360248201527f43452049445f32373a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602f60248201527f43452049445f32373a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b909160400160019283825151036202870b57839215620286aa576000925b6202865b5750505050600090565b62028667825162004cef565b51518310156201719057839260018060a01b03808351169062028690836200743f875162004cef565b511614620051c457620286a39062004cdf565b926202864d565b6000925b620286bc5750505050600090565b620286c8825162004cef565b51518310156201719057839260018060a01b038083511690620286f1836200743f875162004cef565b511614620051c457620287049062004cdf565b92620286ae565b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f33313a20414444524553535f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b9161012d8114620289f85761012e8114620289ec5761012f8114620289e0576101308114620289d4576101318114620289c8576101328114620289bc576101338114620289b0576101348114620289a4576101358114620289985761013681146202898c5761013781146202898057610138811462028974576101398114620289685761013a81146202895c5761013b8114620289505761013c8114620289445761013d8114620289375761013e81146202892a5761013f81146202891d5761014081146202891057610141811462028904576101428114620288f8576101438114620288ec576101448114620288e0576101458114620288d4576101468114620288c8576101478114620288bc576101738114620288af576101748114620288a3576101751462028898575050600090565b620032d2916202b213565b50620032d2916202b050565b5050620032d2906202aff4565b50620032d2916202aea6565b50620032d2916202ab5c565b50620032d2916202a9e2565b50620032d2916202a861565b50620032d2916202a69c565b50620032d2916202a53a565b50620032d2916202a3bf565b5050620032d2906202a2b8565b5050620032d2906202a1a3565b5050620032d2906202a0a1565b5050620032d29062029f99565b50620032d29162029e18565b50620032d29162029c97565b50620032d29162029b14565b50620032d29162029991565b50620032d29162029810565b50620032d2916202968f565b50620032d2916202950c565b50620032d29162029389565b50620032d2916202924a565b50620032d2916202910b565b50620032d29162028fe6565b50620032d29162028ec2565b50620032d29162028d84565b50620032d29162028c46565b50620032d29162028b22565b50620032d2919060200190600191828151510362028ac9576020820151602681101562002a2357600d03620065c75762028a3383926202b3bf565b6000935b62028a455750505050600090565b62028a51825162004cef565b515184101562017190576000835b62028a79575b5062028a72839462004cdf565b9362028a37565b939291815185101562028ac05762028a97846200743f835162004cef565b5162028aa4868462004d46565b511462016c4d5762028ab883949562004cdf565b909262028a5f565b91929362028a65565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3330313a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b9060200190600191828151510362028bed576020820151602681101562002a2357600d03620065c75762028b5783926202b3bf565b6000935b62028b695750505050600090565b62028b75825162004cef565b515184101562017190576000835b62028b9d575b5062028b96839462004cdf565b9362028b5b565b939291815185101562028be45762028bbb846200743f835162004cef565b5162028bc8868462004d46565b511462016c4d5762028bdc83949562004cdf565b909262028b83565b91929362028b89565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3330323a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b9060200190600191828151510362028d2b576020820151602681101562002a2357600d03620065c75762028c7b83926202b3bf565b6000925b62028c8a5750505090565b62028c96825162004cef565b515183101562016e0d57600080855b62028cc5575b501562016d865762028cbe849362004cdf565b9262028c7f565b8295939194955181101562028d205762028ce5866200743f845162004cef565b5162028cf2828562004d46565b511462028d13579062028d0784939262004cdf565b90939594919262028ca5565b5091809493503862028cab565b949390929462028cab565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3330333a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b9060200190600191828151510362028e69576020820151602681101562002a2357600d03620065c75762028db983926202b3bf565b6000925b62028dc85750505090565b62028dd4825162004cef565b515183101562016e0d57600080855b62028e03575b501562016d865762028dfc849362004cdf565b9262028dbd565b8295939194955181101562028e5e5762028e23866200743f845162004cef565b5162028e30828562004d46565b511462028e51579062028e4584939262004cdf565b90939594919262028de3565b5091809493503862028de9565b949390929462028de9565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3330343a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b9060200190600191828151510362028f8d576020820151602681101562002a2357600e03620065c75762028ef783926202b3bf565b6000935b62028f095750505050600090565b62028f15825162004cef565b515184101562017190576000835b62028f3d575b5062028f36839462004cdf565b9362028efb565b939291815185101562028f845762028f5b846200743f835162004cef565b5162028f68868462004d46565b511462016c4d5762028f7c83949562004cdf565b909262028f23565b91929362028f29565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3330353a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b90602001906001918281515103620290b1576020820151602681101562002a2357600e03620065c7576202901b83926202b3bf565b6000935b6202902d5750505050600090565b62029039825162004cef565b515184101562017190576000835b62029061575b506202905a839462004cdf565b936202901f565b9392918151851015620290a8576202907f846200743f835162004cef565b516202908c868462004d46565b511462016c4d57620290a083949562004cdf565b909262029047565b9192936202904d565b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3330363a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b90602001906001918281515103620291f0576020820151602681101562002a2357600e03620065c7576202914083926202b3bf565b6000925b6202914f5750505090565b6202915b825162004cef565b515183101562016e0d57600080855b6202918a575b501562016d865762029183849362004cdf565b9262029144565b82959391949551811015620291e557620291aa866200743f845162004cef565b51620291b7828562004d46565b5114620291d85790620291cc84939262004cdf565b9093959491926202916a565b5091809493503862029170565b949390929462029170565b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3330373a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b906020019060019182815151036202932f576020820151602681101562002a2357600e03620065c7576202927f83926202b3bf565b6000925b6202928e5750505090565b6202929a825162004cef565b515183101562016e0d57600080855b620292c9575b501562016d8657620292c2849362004cdf565b9262029283565b829593919495518110156202932457620292e9866200743f845162004cef565b51620292f6828562004d46565b51146202931757906202930b84939262004cdf565b909395949192620292a9565b50918094935038620292af565b9493909294620292af565b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3330383a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b90602001906001918281515103620294b2576002620293a9825162004cef565b51510362029458576020820151602681101562002a2357600d03620065c757620293d483926202b3bf565b906000925b620293e75750505050600090565b8151831015620171905782620293ff85948462004d46565b51620294106200680d845162004cef565b5111158062029431575b620051c4576202942a9062004cdf565b92620293d9565b506202943e818462004d46565b516202944f620169f0845162004cef565b5110156202941a565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3330393a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3330393a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b90602001906001918281515103620296355760026202952c825162004cef565b515103620295db576020820151602681101562002a2357600d03620065c7576202955783926202b3bf565b906000925b6202956a5750505050600090565b81518310156201719057826202958285948462004d46565b51620295936200680d845162004cef565b51111580620295b4575b620051c457620295ad9062004cdf565b926202955c565b50620295c1818462004d46565b51620295d2620169f0845162004cef565b5110156202959d565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331303a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331303a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b90602001906001918281515103620297b6576002620296af825162004cef565b5151036202975c576020820151602681101562002a2357600d03620065c757620296da83926202b3bf565b60009182945b620296ed57505050905090565b815185101562016c555762029703858362004d46565b51620297146200680d835162004cef565b5111801562029736575b62016c4d576202972f849562004cdf565b94620296e0565b5062029743858362004d46565b5162029754620169f0835162004cef565b51106202971e565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331313a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331313a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b906020019060019182815151036202993757600262029830825162004cef565b515103620298dd576020820151602681101562002a2357600d03620065c7576202985b83926202b3bf565b60009182945b6202986e57505050905090565b815185101562016c555762029884858362004d46565b51620298956200680d835162004cef565b51118015620298b7575b62016c4d57620298b0849562004cdf565b9462029861565b50620298c4858362004d46565b51620298d5620169f0835162004cef565b51106202989f565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331323a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331323a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b9060200190600191828151510362029aba576002620299b1825162004cef565b51510362029a60576020820151602681101562002a2357600e03620065c757620299dc83926202b3bf565b906000925b620299ef5750505050600090565b815183101562017190578262029a0785948462004d46565b5162029a186200680d845162004cef565b5111158062029a39575b620051c45762029a329062004cdf565b92620299e1565b5062029a46818462004d46565b5162029a57620169f0845162004cef565b51101562029a22565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331333a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331333a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b9060200190600191828151510362029c3d57600262029b34825162004cef565b51510362029be3576020820151602681101562002a2357600e03620065c75762029b5f83926202b3bf565b906000925b62029b725750505050600090565b815183101562017190578262029b8a85948462004d46565b5162029b9b6200680d845162004cef565b5111158062029bbc575b620051c45762029bb59062004cdf565b9262029b64565b5062029bc9818462004d46565b5162029bda620169f0845162004cef565b51101562029ba5565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331343a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331343a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b9060200190600191828151510362029dbe57600262029cb7825162004cef565b51510362029d64576020820151602681101562002a2357600e03620065c75762029ce283926202b3bf565b60009182945b62029cf557505050905090565b815185101562016c555762029d0b858362004d46565b5162029d1c6200680d835162004cef565b5111801562029d3e575b62016c4d5762029d37849562004cdf565b9462029ce8565b5062029d4b858362004d46565b5162029d5c620169f0835162004cef565b511062029d26565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331353a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331353a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b9060200190600191828151510362029f3f57600262029e38825162004cef565b51510362029ee5576020820151602681101562002a2357600e03620065c75762029e6383926202b3bf565b60009182945b62029e7657505050905090565b815185101562016c555762029e8c858362004d46565b5162029e9d6200680d835162004cef565b5111801562029ebf575b62016c4d5762029eb8849562004cdf565b9462029e69565b5062029ecc858362004d46565b5162029edd620169f0835162004cef565b511062029ea7565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331363a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331363a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b6020808201908151602681101562002a2357600d1480156202a08b575b6202a03d57508051602681101562002a2357600f149081156202a026575b5062029fe05750600090565b6000805b606060408401510151805182101562017689576202a0058260c09262004d46565b5101511562022e325760406202a01d60609262004cdf565b91505062029fe4565b905051602681101562002a2357600c143862029fd4565b60009150815b816040850151015180518210156202a081576202a0638260019262004d46565b5115150362017682576202a07960409162004cdf565b90506202a043565b5050505050600190565b508151602681101562002a2357600e1462029fb6565b6020808201908151602681101562002a2357600d1480156202a18d575b6202a14957508051602681101562002a2357600f149081156202a132575b506202a0e85750600090565b6000805b6060604084015101518051821015620176895760c06202a10f8360019362004d46565b51015115151462022e325760406202a12960609262004cdf565b9150506202a0ec565b905051602681101562002a2357600c14386202a0dc565b60009150815b816040850151015180518210156202a081576202a16f8260019262004d46565b5115151462017682576202a18560409162004cdf565b90506202a14f565b508151602681101562002a2357600e146202a0be565b6020808201908151602681101562002a2357600d1480156202a2a2575b6202a25457508051602681101562002a2357600f149081156202a23d575b506202a1ea5750600090565b60005b6060604083015101518051821015620065c757819060c06202a213600193849362004d46565b5101511515146202a237575060406202a22e60609262004cdf565b9150506202a1ed565b91505090565b905051602681101562002a2357600c14386202a1de565b905060005b8160408401510151805182101562016d865781906202a27c600192839262004d46565b511515146202a29b57506202a29360409162004cdf565b90506202a259565b9250505090565b508151602681101562002a2357600e146202a1c0565b6020808201908151602681101562002a2357600d1480156202a3a9575b6202a36257508051602681101562002a2357600f149081156202a34b575b506202a2ff5750600090565b60005b6060604083015101518051821015620065c7576202a3238260c09262004d46565b510151156202a3445760406202a33b60609262004cdf565b9150506202a302565b5050600190565b905051602681101562002a2357600c14386202a2f3565b905060005b8160408401510151805182101562016d865781906202a38a600192839262004d46565b511515036202a29b57506202a3a160409162004cdf565b90506202a367565b508151602681101562002a2357600e146202a2d5565b60208092019160019283815151036202a4e0576202a3df84915162004cef565b5151036202a487578082018051602681101562002a2357600f141590816202a46f575b50620065c757600091835b6202a41b5750505050600090565b60408101926060845101519384518210156201e540576202a4566200680d60a0866202a449868b9a62004d46565b5101519351015162004cef565b5114620051c4576202a4689062004cdf565b926202a40d565b905051602681101562002a2357600c1415386202a402565b6084906040519062461bcd60e51b82526004820152603260248201527f43452049445f3332313a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152fd5b60405162461bcd60e51b815260048101839052602f60248201527f43452049445f3332313a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b60208092019160019283815151036202a642578183018051602681101562002a2357600f141590816202a62a575b5062016d865783926000945b6202a583575050505050600090565b6040810160608082510151518710156202a62257906000865b6202a5b8575b5050506202a5b1849562004cdf565b946202a574565b6202a5c4855162004cef565b51518110156202a61c57856202a5df89858551015162004d46565b5101516202a5f3826200743f885162004cef565b51146202a61157906202a60887939262004cdf565b9091926202a59c565b505050505050905090565b6202a5a2565b505062016f9a565b905051602681101562002a2357600c1415386202a568565b60405162461bcd60e51b815260048101839052602f60248201527f43452049445f3332323a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b60208092019160019283815151036202a8075760026202a6bd825162004cef565b5151036202a7ad578183018051602681101562002a2357600f141590816202a795575b5062016d8657600092845b6202a6fa575050505050600090565b604081019360609485815101519586518310156202a78c57828691826202a723838c9b62004d46565b5101516202a7366200680d895162004cef565b51111593846202a75c575b50505050620174c1576202a7559062004cdf565b936202a6eb565b6202a76c93945051015162004d46565b5101516202a77f620169f0855162004cef565b511015848238806202a741565b50505062016f9a565b905051602681101562002a2357600c1415386202a6e0565b60405162461bcd60e51b815260048101839052603260248201527f43452049445f3332333a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602f60248201527f43452049445f3332333a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b602080920160019283825151036202a98957836202a880835162004cef565b5151036202a92a578083018051602681101562002a2357600f141590816202a912575b5062016d8657600092845b6202a8bd575050505050600090565b6060604082015101519384518110156202a90b57826202a8df82889762004d46565b5101516202a8f26200680d865162004cef565b5110620174c1576202a9049062004cdf565b936202a8ae565b5062016f9a565b905051602681101562002a2357600c1415386202a8a3565b6084906040519062461bcd60e51b82526004820152603260248201527f43452049445f3332343a205468652055494e545f3235365f324441525241595b604482015271305d206c656e677468206973206e6f74203160701b6064820152fd5b6084906040519062461bcd60e51b82526004820152602f60248201527f43452049445f3332343a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152fd5b602080920160019283825151036202ab0357836202aa01835162004cef565b5151036202aaa4578083018051602681101562002a2357600f141590816202aa8c575b5062016d8657600092845b6202aa3e575050505050600090565b6060604082015101519384518110156202a90b57826202aa6082889762004d46565b5101516202aa736200680d865162004cef565b5111620174c1576202aa859062004cdf565b936202aa2f565b905051602681101562002a2357600c1415386202aa24565b6084906040519062461bcd60e51b82526004820152603260248201527f43452049445f3332353a205468652055494e545f3235365f324441525241595b604482015271305d206c656e677468206973206e6f74203160701b6064820152fd5b6084906040519062461bcd60e51b82526004820152602f60248201527f43452049445f3332353a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152fd5b906020019060019182815151036202ae4c57826202ab7b825162004cef565b5151036202adec57602082018051602681101562002a2357600f141590816202add4575b50620065c7576000939291825b6202abbb575b50600093505050565b60408101946060808751015180518310156202adcb576202abe1836202abe89262004d46565b5162005673565b906006918281101562002a235715806202adb2575b6202ad58576202ac166202abe184838b51015162004d46565b8281101562002a23578614806202ad98575b6202ad58576202ac416202abe184838b51015162004d46565b8281101562002a2357600280911490816202ad7d575b506202ad58576202ac716202abe184838b51015162004d46565b8281101562002a2357600380911490816202ad62575b506202ad58576202aca16202abe184838b51015162004d46565b978289101562002a23576004809914806202ad3e575b6202ad3357836202acd0926202abe19251015162004d46565b908110156202ad1e5784959650600580911490816202ad03575b50620051c4576202acfb9062004cdf565b94936202abac565b90506202ad156200680d855162004cef565b5114386202acea565b602187634e487b7160e01b6000525260246000fd5b509496505050505050565b50886202ad506200680d885162004cef565b51146202acb7565b5093955050505050565b90506202ad746200680d875162004cef565b5114386202ac87565b90506202ad8f6200680d875162004cef565b5114386202ac57565b50856202adaa6200680d875162004cef565b51146202ac28565b506202adc36200680d865162004cef565b51156202abfd565b5050506202abb2565b905051602681101562002a2357600c1415386202ab9f565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3332363a205468652055494e545f3235365f324441525241595b604482015271305d206c656e677468206973206e6f74203160701b6064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3332363a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b906020019060019182815151036202af9a57602082018051602681101562002a2357600f141590816202af82575b50620065c75782916000935b6202aeee5750505050600090565b6040810160608082510151518610156201e54057906000855b6202af23575b5050506202af1c839462004cdf565b936202aee0565b6202af2f855162004cef565b51518110156202af7c57826202af4a88828551015162004d46565b5101516202af5e826200743f885162004cef565b511462023bcd57906202af7386939262004cdf565b9091926202af07565b6202af0d565b905051602681101562002a2357600c1415386202aed4565b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3332373a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b6020810151602681101562002a2357601303620074b25760005b60408083015101518051821015620065c757819060c06202b033600193849362004d46565b5101511515146202a23757506202b04a9062004cdf565b6202b00e565b6020918201805151600094936001939091600019016202b1b95760026202b078845162004cef565b5151036202b15f5781810151602681101562002a23576013036202b155576000959493929190835b6202b0af575b50505050909150565b604080820190808251015180518a10156202b14c578491826202b0d48c809462004d46565b5101516202b0e76200680d895162004cef565b51111593846202b11c575b505050506202b112576202b1098495969762004cdf565b9695946202b0a0565b5050509150915090565b6202b12c93945051015162004d46565b5101516202b13f620169f0855162004cef565b511015828838806202b0f2565b5050506202b0a6565b5060009450505050565b60405162461bcd60e51b815260048101839052603260248201527f43452049445f3337323a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602f60248201527f43452049445f3337323a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b9060200160019182825151036202b36457826202b231835162004cef565b5151036202b306576020810151602681101562002a2357601303620065c75782916000935b6202b2645750505050600090565b6040808301908082510151518610156201e54057906000855b6202b299575b5050506202b292839462004cdf565b936202b256565b6202b2a987848451015162004d46565b5151518110156202b300576202b2d1816202b2c989868651015162004d46565b515162004d46565b516202b2e26200680d865162004cef565b511462023bcd57906202b2f786939262004cdf565b9091926202b27d565b6202b283565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f3337333a2054686520535452494e475f324441525241595b305d60448201526f206c656e677468206973206e6f74203160801b6064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f3337333a2054686520535452494e475f32444152524159206c6560448201526c6e677468206973206e6f74203160981b6064820152608490fd5b6020908181018051602681101562002a2357600d149081156202b4da575b506202b3ff5750506040516202b3f38162002b3f565b60008152600036813790565b6040019160a0916202b4216202b419848651015162004cef565b515162004e62565b93600092835b6202b436868451015162004cef565b51518110156202b493576202b45081858551015162004d46565b516202b46e575b6202b4666202b4369162004cdf565b90506202b427565b936202b4666202b489828762001ac76202b436958c62004d46565b959150506202b457565b50935050506202b4a38162004e62565b9060005b8181106202b4b6575090925050565b806202b4c76202b4d4928762004d46565b5162001ac7828662004d46565b6202b4a7565b905051602681101562002a2357600e14386202b3dd565b9161025981146202b86d5761025a81146202b77d5761025b81146202b68d5761025c81146202b5775761025d81146202b56b5761025e81146202b55f5761025f81146202b55357610260146202b548575050600090565b620032d2916202bd2b565b50620032d2916202bbb1565b50620032d2916202baa0565b50620032d2916202b95d565b50602001906001825151036202b6335760026202b595835162004cef565b5151036202b5d957602001908151516202b5b46200680d835162004cef565b51111591826202b5c357505090565b620169f7919250620169f0905151925162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3630343a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3630343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b50602001906001825151036202b7235760016202b6ab835162004cef565b5151036202b6c9576200680d602062016afb92015151925162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3630333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3630333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b50602001906001825151036202b8135760016202b79b835162004cef565b5151036202b7b9576200680d6020620168cd92015151925162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3630323a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3630323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b50602001906001825151036202b9035760016202b88b835162004cef565b5151036202b8a9576200680d6020620167cc92015151925162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3630313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3630313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b919091602080930160019182825151036202ba4657826202b97f835162004cef565b5151036202b9ec57938293946000935b6202b99e575050505050600090565b818101519384518110156202a90b576202b9c3620076a184620067a7848a9962004d46565b6202b9d36200680d865162004cef565b5114620174c1576202b9e59062004cdf565b936202b98f565b60405162461bcd60e51b815260048101869052603160248201527f43452049445f3630353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101869052602e60248201527f43452049445f3630353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b919060208091019060019182815151036202bb57578293946000945b6202bacb575050505050600090565b8281018051518610156202a90b576000855b6202baf8575b50506202baf1849562004cdf565b946202babc565b6202bb04845162004cef565b51518110156202bb51576202bb24620076a186620067a78a865162004d46565b6202bb35826200743f875162004cef565b511462023bcd57906202bb49869262004cdf565b90916202badd565b6202bae3565b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3630363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b91909160208093019060019182815151036202bcd157846202bbd4825162004cef565b5151920191825151036202bc565782939460009283955b6202bbfa575b50505050905090565b805180518710156202bc4f57620076a183620067a7896202bc1b9462004d46565b6202bc2c876200743f865162004cef565b51036202bc46576202bc3f859662004cdf565b956202bbeb565b50505091505090565b506202bbf1565b60405162461bcd60e51b815260048101869052604760248201527f43452049445f3630373a205468652055494e543235365f324441525241595b3060448201527f5d206c656e677468206973206e6f7420657175616c20746f2070726f6772616d606482015266040d8cadccee8d60cb1b608482015260a490fd5b60405162461bcd60e51b815260048101869052602e60248201527f43452049445f3630373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b919060208091019060019182815151036202bdfb578293946000935b6202bd53575050505090565b8281018051518510156202bdf457856000918183905b6202bd8b575b5050501562016f9a576202bd84859462004cdf565b936202bd47565b6202bd97865162004cef565b51518110156202bdee576202bdb7620076a188620067a78b865162004d46565b6202bdc8826200743f895162004cef565b51146202bde1576202bdda9062004cdf565b826202bd69565b505090508538806202bd6f565b6202bd6f565b50620051c4565b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3630383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916101cd81146202bea7576101ce81146202be9b576101cf81146202be8f576101d0146202be84575050600090565b620032d2916202c4b5565b50620032d2916202c293565b50620032d2916202c0a0565b50620032d2919060200160019182825151036202c0465760026202becc835162004cef565b5151036202bfec576202bedf816202c6a8565b15620065c7576202bef0906202c705565b9180939150518251036202bf8157600092845b6202bf12575050505050600090565b8051841015620174c957836202bf2a86958362004d46565b516202bf3b6200680d855162004cef565b5114806202bf5b575b620174c1576202bf549062004cdf565b936202bf03565b506202bf68818562004d46565b516202bf79620169f0855162004cef565b51106202bf44565b60405162461bcd60e51b815260206004820152604860248201527f43452049445f3436313a2054686520746f6b656e20636c617373206c6973742060448201526000805160206203382c8339815191526064820152670e840d8cadccee8d60c31b608482015260a490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3436313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3436313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036202c2395760026202c0bf835162004cef565b5151036202c1df576202c0d2816202c6a8565b15620065c7576202c0e3906202c705565b9180939150518251036202c17457600092845b6202c105575050505050600090565b8051841015620174c957836202c11d86958362004d46565b516202c12e6200680d855162004cef565b5114806202c14e575b620174c1576202c1479062004cdf565b936202c0f6565b506202c15b818562004d46565b516202c16c620169f0855162004cef565b51116202c137565b60405162461bcd60e51b815260206004820152604860248201527f43452049445f3436323a2054686520746f6b656e20636c617373206c6973742060448201526000805160206203382c8339815191526064820152670e840d8cadccee8d60c31b608482015260a490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3436323a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3436323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036202c45b5760036202c2b2835162004cef565b5151036202c401576202c2c5816202c6a8565b15620065c7576202c2d6906202c705565b9180939150518251036202c39657600092845b6202c2f8575050505050600090565b8051841015620174c957836202c31086958362004d46565b516202c3216200680d855162004cef565b5114806202c36f575b806202c348575b620174c1576202c3419062004cdf565b936202c2e9565b506202c355818562004d46565b516202c3666201d46a855162004cef565b5110156202c331565b506202c37c818562004d46565b516202c38d620169f0855162004cef565b5111156202c32a565b60405162461bcd60e51b815260206004820152604860248201527f43452049445f3436333a2054686520746f6b656e20636c617373206c6973742060448201526000805160206203382c8339815191526064820152670e840d8cadccee8d60c31b608482015260a490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3436333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3436333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036202c64e5760026202c4d4835162004cef565b5151036202c5f4576202c4e7816202c6a8565b15620065c7576202c4f8906202c705565b9180939150518251036202c58957600092845b6202c51a575050505050600090565b8051841015620174c957836202c53286958362004d46565b516202c5436200680d855162004cef565b5114806202c563575b620174c1576202c55c9062004cdf565b936202c50b565b506202c570818562004d46565b516202c581620169f0855162004cef565b51146202c54c565b60405162461bcd60e51b815260206004820152604860248201527f43452049445f3436343a2054686520746f6b656e20636c617373206c6973742060448201526000805160206203382c8339815191526064820152670e840d8cadccee8d60c31b608482015260a490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3436343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3436343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b6020018051602681101562002a23576014149081156202c6ed575b81156202c6d6575b506202401c57600090565b905051602681101562002a2357601e14386202c6cb565b80915051602681101562002a2357601514906202c6c3565b6202c710816202c6a8565b156202c81657602081018051602681101562002a23576014146202c801578051602681101562002a23576015146202c7ca5751602681101562002a2357601e146202c79857506040516202c7648162002b3f565b60008152604051916202c7778362002b3f565b60008352604051916202c78a8362002b3f565b600083526000368137929190565b604001906202c7ac60a08351015162004cef565b51906202c7c360a062007446818651015162004d13565b5191929190565b50604001906202c7df60a08351015162004cef565b51906202c7c360a06202c7f6818651015162004d24565b519451015162004d35565b50604001906202c7ac60a08351015162004cef565b60405162461bcd60e51b815260206004820152606860248201527f43452049445f3436313a20546865206f7065726174696f6e206973206e6f742060448201527f746f6b656e206f7065726174696f6e20776974682063617368287061792d746f60648201527f2d6d696e742c207061792d746f2d7472616e736665722c206275726e2d616e646084820152672d726566756e642960c01b60a482015260c490fd5b916101af81146202c962576101b081146202c956576101b181146202c94a576101b281146202c93e576101b381146202c932576101b481146202c926576101b581146202c91a576101b6146202c90f575050600090565b620032d2916202d3ab565b50620032d2916202d206565b50620032d2916202d0a1565b50620032d2916202cf3c565b50620032d2916202cdd7565b50620032d2916202cc32565b50620032d2916202cacd565b50620032d291906020019060019182815151036202ca7357826202c987825162004cef565b5151036202ca19576020820151602681101562002a2357601103620065c757600091835b6202c9b95750505050600090565b604081019260a0936202c9d0858251015162004cef565b51518210156201e54057816200743f87966202c9ef9351015162004cef565b516202ca006200680d855162004cef565b5110620051c4576202ca129062004cdf565b926202c9ab565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202cbd857826202caec825162004cef565b5151036202cb7e576020820151602681101562002a2357601103620065c757600091835b6202cb1e5750505050600090565b604081019260a0936202cb35858251015162004cef565b51518210156201e54057816200743f87966202cb549351015162004cef565b516202cb656200680d855162004cef565b5111620051c4576202cb779062004cdf565b926202cb10565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433323a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202cd7d5760026202cc52825162004cef565b5151036202cd23576020820151602681101562002a2357601103620065c757600091835b6202cc845750505050600090565b604081019260a0936202cc9b858251015162004cef565b51518210156201e5405781856202ccbc826200743f8a998651015162004cef565b516202cccd6200680d885162004cef565b51111592836202ccf2575b505050620051c4576202cceb9062004cdf565b926202cc76565b5101516202cd0692506200743f9062004cef565b516202cd17620169f0855162004cef565b5110158138806202ccd8565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433333a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202cee257826202cdf6825162004cef565b5151036202ce88576020820151602681101562002a2357601103620065c757600091835b6202ce285750505050600090565b604081019260a0936202ce3f858251015162004cef565b51518210156201e54057816200743f87966202ce5e9351015162004cef565b516202ce6f6200680d855162004cef565b5114620051c4576202ce819062004cdf565b926202ce1a565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202d04757826202cf5b825162004cef565b5151036202cfed576020820151602681101562002a2357601203620065c757600091835b6202cf8d5750505050600090565b604081019260a0936202cfa4858251015162004cef565b51518210156201e54057816200743f87966202cfc39351015162004cef565b516202cfd46200680d855162004cef565b5110620051c4576202cfe69062004cdf565b926202cf7f565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202d1ac57826202d0c0825162004cef565b5151036202d152576020820151602681101562002a2357601203620065c757600091835b6202d0f25750505050600090565b604081019260a0936202d109858251015162004cef565b51518210156201e54057816200743f87966202d1289351015162004cef565b516202d1396200680d855162004cef565b5111620051c4576202d14b9062004cdf565b926202d0e4565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433363a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202d3515760026202d226825162004cef565b5151036202d2f7576020820151602681101562002a2357601203620065c757600091835b6202d2585750505050600090565b604081019260a0936202d26f858251015162004cef565b51518210156201e5405781856202d290826200743f8a998651015162004cef565b516202d2a16200680d885162004cef565b51111592836202d2c6575b505050620051c4576202d2bf9062004cdf565b926202d24a565b5101516202d2da92506200743f9062004cef565b516202d2eb620169f0855162004cef565b5110158138806202d2ac565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433373a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202d4b657826202d3ca825162004cef565b5151036202d45c576020820151602681101562002a2357601203620065c757600091835b6202d3fc5750505050600090565b604081019260a0936202d413858251015162004cef565b51518210156201e54057816200743f87966202d4329351015162004cef565b516202d4436200680d855162004cef565b5114620051c4576202d4559062004cdf565b926202d3ee565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433383a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b156202d51857565b60405162461bcd60e51b815260206004820152601c60248201527b496e76616c6964206e756d626572206f6620706172616d657465727360201b6044820152606490fd5b6202d5678162002fc4565b6202d5756200e52e620332ea565b6202d5808162002fc4565b600181036202d59e57506202d5986200e55a620332ea565b611faf55565b6202d5a98162002fc4565b600281036202d5b95750611fb055565b6202d5c48162002fc4565b600381036202d5d45750611fb155565b806202d5e260049262002fc4565b146202d5eb5750565b611fb255565b60609060208152601e60208201527f496e76616c69642072657475726e20747970653a20554e444546494e4544000060408201520190565b7f496e76616c69642061667465722d6f7020706c7567696e206c6576656c2e204c815264032bb32b6160dd1b602082015260250190565b7f496e76616c6964206265666f72652d6f7020706c7567696e206c6576656c2e2081526502632bb32b6160d51b602082015260260190565b9060005b8251811015620115b15760c06202d6b4828562004d46565b510151156202da6b576202d6cd6202abe1828562004d46565b60068082101562002a235760049182036202d818575060209060016003836202d6f7868962004d46565b51015106036202d7145750506202d70e9062004cdf565b6202d69c565b62004cdb82846202d7fd60636202d7456202d73e856202d735868e62004d46565b510151620050f5565b93620050f5565b92847f20697320776974682072657475726e2074797065205945535f414e445f534b4960409586519788946202d78162004db08388016202d660565b016000805160206203388c83398151915281526202d7aa82518093601396878501910162002e01565b01918201527f505f53414e44424f582c2073686f756c64206265206f6e206c6576656c205b3160338201526f2c20342c20372c2031302c202e2e2e5d60801b605382015203604381018552018362002b94565b5193849362461bcd60e51b8552840152602483019062002e26565b6202d8286202abe1848762004d46565b818110156201e0f6576001036202d938575060209060026003836202d84e868962004d46565b51015106036202d8655750506202d70e9062004cdf565b62004cdb82846202d7fd605d6202d8866202d73e856202d735868e62004d46565b92847f20697320776974682072657475726e20747970652053414e44424f585f4e454560409586519788946202d8c262004db08388016202d660565b016000805160206203388c83398151915281526202d8eb82518093601396878501910162002e01565b01918201527f4445442c2073686f756c64206265206f6e206c6576656c205b322c20352c20386033820152692c2031312c202e2e2e5d60b01b605382015203603d81018552018362002b94565b6202d9486202abe1848762004d46565b9081101562015501576002036202da4f576020906003826202d96b858862004d46565b510151066202d9815750506202d70e9062004cdf565b62004cdb82846202d7fd6202d9a76202d9a0846202d735858d62004d46565b92620050f5565b916202da4060409384519586936202d9c562004db08387016202d660565b016000805160206203388c83398151915281528151906202d9ef826013948d868501910162002e01565b01017f20697320776974682072657475726e2074797065204e4f2c2073686f756c642081527f6265206f6e206c6576656c205b332c20362c20392c2031322c202e2e2e5d00006020820152603e0190565b03601f19810184528362002b94565b60405162461bcd60e51b815290819062004cdb9082016202d5f1565b6202da7b6202abe1828562004d46565b6006908181101562002a23576005036202db965750602060016003826202daa3858862004d46565b51015106036202dab957506202d70e9062004cdf565b62004cdb826202db7960526202dada6202d73e866202d73581998c62004d46565b926040937f20697320776974682072657475726e2074797065205945532c2073686f756c6485519889936202db1562004db08387016202d629565b016000805160206203388c83398151915281528251906202db3f826013958c878501910162002e01565b01918201527f206265206f6e206c6576656c205b312c20342c20372c2031302c202e2e2e5d00603382015203603281018752018562002b94565b5192839262461bcd60e51b84526004840152602483019062002e26565b6202dba66202abe1838662004d46565b908082101562002a235760039182036202dcb557506002602091826202dbcd858862004d46565b51015106036202dbe357506202d70e9062004cdf565b62004cdb826202db79605c6202dc046202d73e866202d73581998c62004d46565b926040937f20697320776974682072657475726e207479706520564f54494e475f4e45454485519889936202dc3f62004db08387016202d629565b016000805160206203388c83398151915281528251906202dc69826013958c878501910162002e01565b01918201527f45442c2073686f756c64206265206f6e206c6576656c205b322c20352c20382c6033820152682031312c202e2e2e5d60b81b605382015203603c81018752018562002b94565b6202dcc56202abe1848762004d46565b9081101562002a23576002036202dd7157602090816202dce6848762004d46565b510151066202dcfb57506202d70e9062004cdf565b62004cdb826202db796202dd1a6202d9a0856202d73581988b62004d46565b916202dd6260409384519788936202dd3862004db08387016202d629565b016000805160206203388c83398151915281528151906202d9ef826013948b868501910162002e01565b03601f19810186528562002b94565b60405162461bcd60e51b81528062004cdb600482016202d5f1565b156202dd9457565b60405162461bcd60e51b815260206004820152604d60248201527f546865206c656e677468206f662074686520706c7567696e20696e646578657360448201527f20617272617920616e642074686520626f6f6c65616e206172726179206d757360648201526c74206265207468652073616d6560981b608482015260a490fd5b156202de1d57565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c696420706c7567696e20696e64657820746f20626520656e61626c604482015261195960f21b6064820152608490fd5b156202de7557565b60405162461bcd60e51b815260206004820152602b60248201527f54686520706c7567696e20746f20626520656e61626c656420697320616c726560448201526a18591e48195b98589b195960aa1b6064820152608490fd5b156202ded657565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c696420706c7567696e20696e64657820746f2062652064697361626044820152621b195960ea1b6064820152608490fd5b156202df2f57565b60405162461bcd60e51b815260206004820152602d60248201527f54686520706c7567696e20746f2062652064697361626c656420697320616c7260448201526c1958591e48191a5cd8589b1959609a1b6064820152608490fd5b156202df9257565b60405162461bcd60e51b815260206004820152603060248201527f546865206c656e677468206f662074617267657420616e6420746f6b656e436c60448201526f185cdcc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b156202dff857565b60405162461bcd60e51b815260206004820152602c60248201527f546865206c656e677468206f662074617267657420616e6420616d6f756e742060448201526b1a5cc81b9bdd08195c5d585b60a21b6064820152608490fd5b156202e05a57565b60405162461bcd60e51b815260206004820152602260248201527f54686520746f6b656e20636c617373206973206e6f7420696e697469616c697a604482015261195960f21b6064820152608490fd5b156202e0b257565b60405162461bcd60e51b815260206004820152602960248201527f54686520746f74616c20737570706c79206f662074686520746f6b656e206973604482015268206f766572666c6f7760b81b6064820152608490fd5b156202e11157565b60405162461bcd60e51b8152602060048201526024808201527f5468652062616c616e6365206f662074686520746f6b656e206973206f766572604482015263666c6f7760e01b6064820152608490fd5b156202e16a57565b606460405162461bcd60e51b815260206004820152602060248201527f54686520746f6b656e20697320616c726561647920696e697469616c697a65646044820152fd5b60408101906202e1c360c08351015162004cef565b51916202e1e560a06202e1da818451015162004cef565b519251015162004d13565b51936202e1fa845183511462000fa3620331b7565b6202e20d845186511462000fa3620331b7565b60005b84518110156202e26a576202e226818462004d46565b51906103e882101562004cfd576202e2649160018060a01b03865116600052600390811b0160205262000faa60406000205462007ce9838a62004d46565b6202e210565b5092919360005b83518110156202e395576202e287818462004d46565b51906103e8918281101562004cfd5760018060a01b03908189511660005260039081602091811b0181526202e2c760406000205462007d56868962004d46565b906202e2d4868a62004d46565b51918783101562004cfd57846202e30193878f5116600052811b01845260406000205562000fa3620332bb565b6202e30d848862004d46565b518581101562004cfd578290846202e326878c62004d46565b5116600052811b0181526202e34660406000205462006814868962004d46565b9190926202e355868a62004d46565b519687101562004cfd576202e38f9662000faa956202e375888d62004d46565b5116600052811b01905260406000205562000fa362033320565b6202e271565b5050620121cd6202e3a69162032f53565b90604051936202e3b68562002b78565b60018552602036818701376001600160a01b03610ba08190529051166202e3dd8562004cef565b526000935b81518510156202e700576202e3f8858362004d46565b51946202e406845162004e62565b916000936202e416825162004e62565b610b80528496855b87518110156202e4bf576202e445610ba0516202e43c838b62004d46565b51168b62032d3b565b15806202e487575b6202e464575b6202e45e9062004cdf565b6202e41e565b956202e47e6202e45e91610ba0516200a36b8a8c62004d46565b9690506202e453565b506103e88a101562004cfd57610ba0516202e4a3828a62004d46565b511660005260038a811b0160205260406000205415156202e44d565b509793929096949195976000986103e88610159560031b9860038a019a5b89518110156202e559578762004cfd57610ba0516202e4fd828c62004d46565b51166000528b602052604060002054156202e524575b6202e51e9062004cdf565b6202e4dd565b976202e5506202e51e918b6202e53f8c610ba0519262004d46565b511662001ac782610b805162004d46565b9890506202e513565b5094959193965098509690959680610b405262004cfd5760040180610b005254956202e58a62008068868962006200565b610b605260009788610b20525b610b405162004cfd57610b2051888110156202e635576202e5c66202e5dc916000610b4052610b005162004f5e565b610ba05191549060031b1c16610b805162032dea565b156202e5fb575b6202e5f1610b205162004cdf565b610b20526202e597565b976202e62e906202e613610b2051610b005162004f5e565b610ba05191549060031b1c1662001ac782610b605162004d46565b976202e5e3565b5095939096509690969391936000915b8383106202e6cf5750505050610b405162004cfd57610b6051516001600160401b03811162002a9b576202e67d81610b00516200509a565b6020610b605101610b005160005260206000206000610ba051905b8481106202e6b85750505050506202e6b09062004cdf565b93926202e3e2565b60019060208386511695019481850155016202e698565b620081fe6202e6f991610ba0516202e6e8868662004d46565b511662001ac782610b605162004d46565b916202e645565b5050509050565b60408101906202e71c60c08351015162004cef565b51916202e73360a06202e1da818451015162004cef565b51936202e748845183511462000fa3620331b7565b6202e75b845186511462000fa3620331b7565b60005b84518110156202e7b8576202e774818462004d46565b51906103e882101562004cfd576202e7b29160018060a01b03865116600052600390811b0160205262000faa60406000205462007ce9838a62004d46565b6202e75e565b5092919360005b83518110156202e8c9576202e7d5818462004d46565b51906103e8918281101562004cfd5760018060a01b03908189511660005260039081602091811b0181526202e81560406000205462007d56868962004d46565b906202e822868a62004d46565b51918783101562004cfd57846202e84f93878f5116600052811b01845260406000205562000fa3620332bb565b6202e85b848862004d46565b518581101562004cfd578290846202e874878c62004d46565b5116600052811b0181526202e89460406000205462006814868962004d46565b9190926202e8a3868a62004d46565b519687101562004cfd576202e8c39662000faa956202e375888d62004d46565b6202e7bf565b5050620121cd6202e8da9162032f53565b90604051936202e8ea8562002b78565b60018552602036818701376001600160a01b03610b008190529051166202e9118562004cef565b526000935b81518510156202e700576202e92c858362004d46565b51946202e93a845162004e62565b916000936202e94a825162004e62565b610b60528496855b87518110156202e9ea576202e970610b00516202e43c838b62004d46565b15806202e9b2575b6202e98f575b6202e9899062004cdf565b6202e952565b956202e9a96202e98991610b00516200a36b8a8c62004d46565b9690506202e97e565b506103e88a101562004cfd57610b00516202e9ce828a62004d46565b511660005260038a811b0160205260406000205415156202e978565b509793929096949195976000986103e88610159560031b9860038a019a5b89518110156202ea73578762004cfd57610b00516202ea28828c62004d46565b51166000528b602052604060002054156202ea4f575b6202ea499062004cdf565b6202ea08565b976202ea6a6202ea49918b6202e6e88c610b00519262004d46565b9890506202ea3e565b5094959193965098509690959680610ba05262004cfd5760040180610b405254956202eaa462008068868962006200565b610b205260009788610b80525b610ba05162004cfd57610b8051888110156202eb4f576202eae06202eaf6916000610ba052610b405162004f5e565b610b005191549060031b1c16610b605162032dea565b156202eb15575b6202eb0b610b805162004cdf565b610b80526202eab1565b976202eb48906202eb2d610b8051610b405162004f5e565b610b005191549060031b1c1662001ac782610b205162004d46565b976202eafd565b5095939096509690969391936000915b8383106202ebe95750505050610ba05162004cfd57610b2051516001600160401b03811162002a9b576202eb9781610b40516200509a565b6020610b205101610b405160005260206000206000610b0051905b8481106202ebd25750505050506202ebca9062004cdf565b93926202e916565b60019060208386511695019481850155016202ebb2565b620081fe6202ec1391610b00516202ec02868662004d46565b511662001ac782610b205162004d46565b916202eb5f565b9060408201916202ec3560a06200779b818651015162004cef565b519280518451036200ad0a5760005b81518110156202ec9e576202ec5a818362004d46565b51906103e882101562004cfd576202ec989160018060a01b03855116600052600390811b0160205262000faa60406000205462007ce9838962004d46565b6202ec44565b5060005b81518110156202ed3c576202ecb8818362004d46565b51906103e8918281101562004cfd5760018060a01b03908186511660005260039081602091811b0181526202ecf860406000205462007d56868c62004d46565b9190926202ed07868962004d46565b519687101562004cfd576202ed369662000faa958a5116600052811b01905260406000205562000fa3620332bb565b6202eca2565b506202ed4a91935062032f53565b604051926202ed598462002b78565b60018452602036818601376001600160a01b03610b008190529051166202ed808462004cef565b52604051906202ed908262002b3f565b6000825260003681376000935b81518510156202e700576202edb3858362004d46565b51946202edc1845162004e62565b916000936202edd1825162004e62565b610b60528496855b87518110156202ee71576202edf7610b00516202e43c838b62004d46565b15806202ee39575b6202ee16575b6202ee109062004cdf565b6202edd9565b956202ee306202ee1091610b00516200a36b8a8c62004d46565b9690506202ee05565b506103e88a101562004cfd57610b00516202ee55828a62004d46565b511660005260038a811b0160205260406000205415156202edff565b509793929096949195976000986103e88610159560031b9860038a019a5b89518110156202eefa578762004cfd57610b00516202eeaf828c62004d46565b51166000528b602052604060002054156202eed6575b6202eed09062004cdf565b6202ee8f565b976202eef16202eed0918b6202e6e88c610b00519262004d46565b9890506202eec5565b5094959193965098509690959680610ba05262004cfd5760040180610b205254956202ef2b62008068868962006200565b610b805260009788610b40525b610ba05162004cfd57610b4051888110156202efc0576202eae06202ef67916000610ba052610b205162004f5e565b156202ef86575b6202ef7c610b405162004cdf565b610b40526202ef38565b976202efb9906202ef9e610b4051610b205162004f5e565b610b005191549060031b1c1662001ac782610b805162004d46565b976202ef6e565b5095939096509690969391936000915b8383106202f05a5750505050610ba05162004cfd57610b8051516001600160401b03811162002a9b576202f00881610b20516200509a565b6020610b805101610b205160005260206000206000610b0051905b8481106202f0435750505050506202f03b9062004cdf565b93926202ed9d565b60019060208386511695019481850155016202f023565b620081fe6202f07391610b00516202e53f868662004d46565b916202efd0565b156202f08257565b60405162461bcd60e51b815260206004820152601d60248201527f54686520726566756e6420616d6f756e74206973206f766572666c6f770000006044820152606490fd5b156202f0cf57565b60405162461bcd60e51b815260206004820152602360248201527f54686520746f74616c20726566756e6420616d6f756e74206973206f766572666044820152626c6f7760e81b6064820152608490fd5b156202f12857565b60405162461bcd60e51b815260206004820152602960248201527f54686520746f74616c20776974686472617761626c6520616d6f756e74206973604482015268206f766572666c6f7760b81b6064820152608490fd5b611f44805482101562004cfd576000526007602060002091020190600090565b815180519192916001600160401b03811162002a9b576202f1c181856200509a565b6020809201846000528260002060005b8381106202f238575050505060c08260069262002c3b95940151600185015560408101516002850155606081015160038501556202f2196080820151151560048601620057f2565b6202f22c60a0820151600586016200571f565b015115159101620057f2565b825182820155918401916001016202f1d1565b611f448054600160401b81101562002a9b576202f26e916001820190556202f17f565b91909162005d305762002c3b916202f19f565b611fb4908154600160401b81101562002a9b576001810180845581101562004cfd5762002c3b926000526020600020016200571f565b620069d06202f2c691620074f5565b613f78805480600052613f76908160205260ff60096040600020015460081c16620322fb57613f73600160ff19825416179055600052602052600960406000200161010061ff0019825416179055546000526202f32760406000206200370e565b90600080611f4a54905b818110620322b4575b50501562032298575b60005b60208301519081518110156202f37e5762000faa620076c162011f56620076a16020620067a7866202f3789862004d46565b6202f346565b505060005b602083015180518210156202f3cb57620076a16020620067a7846202f3a89462004d46565b90606482101562004cfd576202f3c5914290611f4b015562004cdf565b6202f383565b50506000905b602083015180518310156200b07257826202f3ec9162004d46565b516020810151602681101562002a2357156200b02f576020810151602681101562002a23576001036202f5fd57604001906202f42d60c08351015162004cef565b51936202f44460a06200779b818651015162004cef565b51916202f45586518551146202df8a565b6202f46486518451146202dff0565b60005b86518110156202f58b576202f47d818662004d46565b516103e881101562004cfd57600160ff60076202f4a39360031b0154161515146202e052565b6202f4af818562004d46565b516202f4bc828762004d46565b51906103e882101562004cfd576202f4de906006809360031b0154906200608f565b6202f4ea848962004d46565b51926103e884101562004cfd576202f5079360031b01556202e0aa565b6202f513818562004d46565b516202f520828762004d46565b51906103e882101562004cfd576202f549916003906001600160a01b0362012148868d62004d46565b91906202f557828862004d46565b51906103e882101562004cfd576202f5859362000faa926003906001600160a01b036201219c878f62004d46565b6202f467565b5094915091620121cd6202f59f9162032f53565b93604051926202f5af8462002b3f565b60008452600036813760005b83518110156202f5e0578062000faa620079626202f5da938762004d46565b6202f5bb565b50945092602092506202f5f4915062004cdf565b9190506202f3d1565b602081949293940151602681101562002a23576002036202f895576040018051928351906202f635620079c260a08097015162004cef565b519382518651036202f8405782518451036202f7ea5782518551036202f7915760005b86518110156202f77b576202f66e818862004d46565b516103e881101562004cfd5760ff60076202f6909260031b015416156202e162565b6202f69c818862004d46565b516103e881101562004cfd5760031b600701805460ff191660011790556202f6c5818562004d46565b516202f6d2828962004d46565b51906103e882101562004cfd5760056202f6f09260031b016200571f565b6202f6fc818662004d46565b516202f709828962004d46565b516103e881101562004cfd5760031b600101556202f728818762004d46565b516202f735828962004d46565b516103e881101562004cfd5760031b600201556202f754818862004d46565b51906103e882101562004cfd57600060066202f7759360031b015562004cdf565b6202f658565b509591509350602092506202f5f4915062004cdf565b60405162461bcd60e51b815260206004820152603c6024820152600080516020620337ec83398151915260448201527b1b911a5d9a59195b9915d95a59da1d081a5cc81b9bdd08195c5d585b60221b6064820152608490fd5b60405162461bcd60e51b81526020600482015260396024820152600080516020620337ec8339815191526044820152781b959bdd1a5b99d41bddd95c881a5cc81b9bdd08195c5d585b603a1b6064820152608490fd5b60405162461bcd60e51b81526020600482015260386024820152600080516020620337ec8339815191526044820152771b925b99195e105c9c985e481a5cc81b9bdd08195c5d585b60421b6064820152608490fd5b602081949392940151602681101562002a23576003036202f8c3576020919262000faa6202f5f4926202e707565b6020810151602681101562002a23576004036202faf95760400160c0936202f8f36200ca5c868451015162004cef565b51906202f90a60a06200779b818651015162004cef565b51936202f91f875184511462000fa3620331b7565b6202f932875185511462000fa3620331b7565b6202f945875186511462000fa3620331b7565b60005b87518110156202f98d576202f95e818662004d46565b51906103e882101562004cfd576202f987916003906001600160a01b03620124d9848d62004d46565b6202f948565b509095919593929360005b83518110156202fab6576202f9ae818762004d46565b516103e881101562004cfd576003906001600160a01b036202f9d1848862004d46565b5116600052811b016020526202f9f260406000205462007d56838862004d46565b906202f9ff838962004d46565b51916103e883101562004cfd576202fa28926003906001600160a01b036201259b878b62004d46565b6202fa34818762004d46565b516103e881101562004cfd576003906001600160a01b036202fa57848c62004d46565b5116600052811b016020526202fa7860406000205462006814838862004d46565b9190506202fa87818862004d46565b51916103e883101562004cfd576202fab0926003906001600160a01b036201263e858e62004d46565b6202f998565b50936202fad091929693506200847962007e479162032f53565b9260005b83518110156202f5e0578062000faa620079626202faf3938762004d46565b6202fad4565b92906020840151602681101562002a2357600503620300585760408401906202fb2c60a06200851e818551015162004cef565b519282518451036200ad0a5760005b83518110156202fb94576202fb51818562004d46565b51906103e882101562004cfd5760036202fb8e9260018060a01b038a5116600052811b0160205262000faa60406000205462007ce9838962004d46565b6202fb3b565b509060005b83518110156202fc37576202fbaf818562004d46565b516103e881101562004cfd5760039060018060a01b03895116600052811b016020526202fbe760406000205462007d56838862004d46565b91906202fbf5828762004d46565b51906103e882101562004cfd576202fc3193600362000faa9360018060a01b038d5116600052811b0160205260406000205562000fa3620332bb565b6202fb99565b50916202fc48919495935062032f53565b92604051926202fc588462002b78565b6001845260203681860137516001600160a01b03166202fc788462004cef565b52604051926202fc888462002b3f565b6000845260003681376000945b805186101562030044576202fcab868262004d46565b516109e0526202fcbc855162004e62565b966000946202fccc845162004e62565b6109005260009460005b88518110156202fd9c578a896202fd066001600160a01b036202fcfa858462004d46565b51166109e05162032d3b565b15806202fd56575b6202fd27575b50506202fd219062004cdf565b6202fcd6565b986202fd4b9162001ac782859c62007f376202fd219760018060a01b039262004d46565b9790508a896202fd14565b5050506103e86109e051101562004cfd576001600160a01b036202fd7b828b62004d46565b511660005260036109e051811b016020528a8960406000205415156202fd0e565b50909895979498969291939660005b88518110156202fe3f576103e86109e051101562004cfd576001600160a01b036202fdd7828b62004d46565b511660005260036109e051811b01602052604060002054156202fe06575b6202fe009062004cdf565b6202fdab565b996202fe00906202fe36906001600160a01b036202fe258e8d62004d46565b511662001ac7826109005162004d46565b9a90506202fdf5565b509850969592919093966109e0516103e881101580610ac05262004cfd5760031b60040154986202fe7562008068898c62006200565b610940526000610ae05260006108e0525b610ac05162004cfd576108e0518a8110156202ff4f576202febb6202fed8916000610ac05260046109e05160031b0162004f5e565b90546109005160039290921b1c6001600160a01b03169062032dea565b156202fef7575b6202feed6108e05162004cdf565b6108e0526202fe86565b6000610ac0526202ff156108e05160046109e05160031b0162004f5e565b60018060a01b0391549060031b1c166202ff36610ae0516109405162004d46565b526202ff45610ae05162004cdf565b610ae0526202fedf565b50979294959093985095909560005b8281106202fff857505050610ac05162004cfd5761094051516001600160401b03811162002a9b576202ff9b8160046109e05160031b016200509a565b6020610940510160046109e05160031b01600052602060002060005b8381106202ffda57505050506202ffce9062004cdf565b9492959091956202fc95565b82516001600160a01b0316818301556020909201916001016202ffb7565b6203003e906001600160a01b0362030011828562004d46565b511662030025610ae0516109405162004d46565b5262030034610ae05162004cdf565b610ae05262004cdf565b6202ff5e565b5050936202f5f49193506020925062004cdf565b90926020810151602681101562002a2357600603620301f0576040016203008460c08251015162004cef565b51936203009b60a06200851e818551015162004cef565b519285518351036200db485785518451036200dafb5760005b8651811015620300f957620300ca818562004d46565b51906103e882101562004cfd57620300f3916003906001600160a01b0362012771848c62004d46565b620300b4565b509060005b86518110156203019a5762030114818562004d46565b516103e881101562004cfd576003906001600160a01b0362030137848b62004d46565b5116600052811b016020526203015860406000205462007d56838862004d46565b919062030166828762004d46565b51906103e882101562004cfd57620301949362000faa926003906001600160a01b036201259b878f62004d46565b620300fe565b509491620301af919350620121cd9062032f53565b9160405194620301bf8662002b3f565b60008652600036813760005b83518110156202f5e0578062000faa62007962620301ea938762004d46565b620301cb565b6020810151602681101562002a23576007036203027657604001926203021b60c08551015162004cef565b51916203022d60a08651015162004cef565b519451519162030245845187511462000fa3620331b7565b60005b84518110156202f5e057620302709062000faa6001600160a01b03806201290f848a62004d46565b62030248565b6020819493940151602681101562002a2357600803620302e45760c06040620302a3920151015162004cef565b519160005b8351811015620302d257620302cc906001600160a01b0380620129f7838862004d46565b620302a8565b509260209192506202f5f49062004cdf565b6020810151602681101562002a23576009036203033d5760c060406203030e920151015162004cef565b519160005b8351811015620302d25762030337906001600160a01b038062012a8b838862004d46565b62030313565b6020810151602681101562002a2357600a03620303c357604001906203036e60a06200df3360c08551015162004cef565b519262030383835185511462000fa3620331b7565b60005b8351811015620303b057620303aa906001600160a01b038062012b27838862004d46565b62030386565b50936202f5f49193506020925062004cdf565b602081949392940151602681101562002a2357600b036203044e5760400192620303f260c08551015162004cef565b51935151916203040a855184511462000fa3620331b7565b60005b85518110156203043b57620304359062000faa6001600160a01b038062012bda848b62004d46565b6203040d565b50935091602091506202f5f49062004cdf565b9091926020820151602681101562002a2357600c036203052b57606060408301510151926203047d846202d698565b60005b8451811015620303b05760c0620304a08260606040880151015162004d46565b51015115620304ed57620304c162008c808260606040880151015162004d46565b611f4254908160001981011162001e0757600562008ca9620304e7936000190162005cba565b62030480565b6203050562008cd38260606040880151015162004d46565b611f4254908160001981011162001e0757600562008ca9620304e7936000190162005c7a565b9291906020810151602681101562002a2357600d0362030594576040019260206203055b60a08651015162004cef565b5194510151916203057085518451146202dd8c565b60005b85518110156203043b578062012d5b6203058e928662004d46565b62030573565b6020819492940151602681101562002a2357600e03620305fd57604001906020620305c460a08451015162004cef565b519251015193620305d983518651146202dd8c565b60005b83518110156203043b578062012e3f620305f7928862004d46565b620305dc565b906020829493940151602681101562002a2357600f03620306db57606060408301510151926203062d846202d698565b60005b8451811015620303b05760c0620306508260606040880151015162004d46565b510151156203069d576203067162008c808260606040880151015162004d46565b611f4254908160001981011162001e0757600562008dd262030697936000190162005cba565b62030630565b620306b562008cd38260606040880151015162004d46565b611f4254908160001981011162001e0757600562008dd262030697936000190162005c7a565b906020819493940151602681101562002a23576010036203074c5760400151906203070f60a0608084015193015162004cef565b519362030724835186511462000fa3620331b7565b60005b83518110156203043b578062000faa6200902b62030746938762004d46565b62030727565b6020819492940151602681101562002a23576011036203096557604001906203078060a06200df3360c08551015162004cef565b51936203079183518651146202d510565b60005b8351811015620307c257620307bc9062000faa6001600160a01b03806201304a848962004d46565b62030794565b50935090620307d19062032e37565b90611f465493620307e86200806884518762006200565b9060009260005b8781106203094a575060005b8551811015620308a2576000805b89811062030853575b50156203082b575b620308259062004cdf565b620307fb565b9362030825906203084a906001600160a01b036200e724888a62004d46565b9490506203081a565b6203085e8162004eb6565b90546001600160a01b0360039290921b1c8116906203087e858b62004d46565b5116146203089757620308919062004cdf565b62030809565b505060013862030812565b509550939250620308b38262004e62565b8051906001600160401b03821162002a9b57602090620308d38362004ff7565b01611f46600052602060002060005b8381106203092c575050505060005b82811062030909575050506202f5f460209162004cdf565b620309269062000faa6001600160a01b03620019fb838662004d46565b620308f1565b82516001600160a01b031681830155602090920191600101620308e2565b936200e8706203095f916200e8528762004eb6565b620307ef565b6020819492940151602681101562002a235760120362030b8857604001906203099960a06200df3360c08551015162004cef565b5193620309aa83518651146202d510565b60005b8351811015620309db57620309d59062000faa6001600160a01b0380620132ac848962004d46565b620309ad565b5093509190620309eb9062032e37565b611f4654620309fa8162004e62565b906000926000915b80831062030aaf5750505062030a188262004e62565b8051906001600160401b03821162002a9b5760209062030a388362004ff7565b01611f46600052602060002060005b83811062030a91575050505060005b82811062030a6e575050506202f5f460209162004cdf565b62030a8b9062000faa6001600160a01b03620019fb838662004d46565b62030a56565b82516001600160a01b03168183015560209092019160010162030a47565b91956000959193959760005b855181101562030b795762030ad08962004eb6565b90546001600160a01b0360039290921b1c81169062030af0838962004d46565b51161462030b095762030b039062004cdf565b62030abb565b509750956001959391955b8062030b48575b1562030b335762030b2c9062004cdf565b9162030a02565b936200e87062030b2c916200e8528762004eb6565b5062030b548162004eb6565b60018060a01b0391549060031b1c16600052611f456020526040600020541562030b1b565b50979690969593919562030b14565b6020810151602681101562002a235760130362030be15760408091015101519260005b845181101562030bd0578062000faa6200959f62030bca938862004d46565b62030bab565b509250906202f5f460209162004cdf565b6020810151602681101562002a235760140362030d8e576040019062030c0c60c08351015162004cef565b519362030c2360a06200779b818651015162004cef565b519162030c3486518551146202df8a565b62030c4386518451146202dff0565b60005b865181101562030d395762030c5c818562004d46565b5162030c69828762004d46565b51906103e882101562004cfd57600662030c899260031b0154906200608f565b9062030c96838862004d46565b51916103e883101562004cfd57600662030cb59360031b01556202e0aa565b62030cc1818562004d46565b5162030cce828762004d46565b51906103e882101562004cfd5762030cf7916003906001600160a01b0362012148868d62004d46565b919062030d05828862004d46565b51906103e882101562004cfd5762030d339362000faa926003906001600160a01b036201219c878f62004d46565b62030c46565b5094915091620121cd62030d4d9162032f53565b936040519262030d5d8462002b3f565b60008452600036813760005b83518110156202f5e0578062000faa6200796262030d88938762004d46565b62030d69565b6020810151602681101562002a235760150362030db8576020919262000faa6202f5f4926202e707565b6020810151602681101562002a235760160362030e145760c0604062030de2920151015162004cef565b519260005b845181101562030bd05762030e0e9062000faa6001600160a01b0362009d36838962004d46565b62030de7565b6020810151602681101562002a235760170362030e715760405162461bcd60e51b81526020600482015260296024820152600080516020620339cc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a235760180362030edb5760c0604062030e9b920151015162004cef565b51611fb6805460ff191660011790559260005b845181101562030bd05762030ed59062000faa6001600160a01b0362009e02838962004d46565b62030eae565b6020819392930151602681101562002a235760190362030fc25760008091604082910160a08082510151805162030f89575b5050519060e08201519162030f316200680d60c060018060a01b0393015162004cef565b511690602083519301915af13d1562030f80573d9062030f518262002f5b565b9162030f61604051938462002b94565b82523d6000602084013e5b156201387a57506202f5f460209162004cdf565b60609062030f6c565b62030f949062004cef565b515162030fa3575b8062030f0d565b8192506200680d9062030fb99251015162004cef565b51903862030f9c565b6020810151602681101562002a2357601a03620310445760a0604062030fec920151015162004cef565b5162030ffc60038251146202d510565b620310078162004cef565b519162031018620139a08362004d13565b51916200f9d5576020926202f5f4926001036200a043576200a023906200a016611fb19182546200608f565b6020810151602681101562002a2357601b036203142f5750919062031074611faf546200225a6200a0b962033044565b50506203108062033108565b506000805b6103e88110620313e3575b50506203109c62006161565b90620310ab613f745462004e62565b906000946000905b6103e8821015620313d7578160031b9260ff60078501541615620311bf57600096600285015415620311a6576000975b62004cfd576004850154881015620311a6576203119f62031198899a62031112620311499b60048a0162004f5e565b60018060a01b0391549060031b1c1680600052600389016020526203113d8b60406000205462005eb0565b9c9062000fa362033108565b6203118c620311706203116460009e60028d01549062005eb0565b919062000fa362033108565b82600052611f476020526200a01660406000209182546200608f565b62001ac7828b62004d46565b9962004cdf565b97620310e3565b92909350620311b791965062004cdf565b9094620310b3565b95969392509350505b620311d38262004e62565b9160009160005b8281106203134157505050611f485491620311fa62008068848462006200565b926000906000905b8082106203132457505060005b8381106203128e5750508251929150506001600160401b03821162002a9b576020906203123c8362004fbc565b01611f48600052602060002060005b8381106203127057505050506202f5f46020916000611fb1556000611fb25562004cdf565b82516001600160a01b0316818301556020909201916001016203124b565b6000805b838110620312dc575b5015620312b4575b620312ae9062004cdf565b6203120f565b90620312ae90620312d3906001600160a01b03620081f0858762004d46565b919050620312a3565b6001600160a01b0380620312f1858862004d46565b51169062031300838a62004d46565b5116146203131957620313139062004cdf565b62031292565b50506001386203129b565b9091620081fe6203133a91620094f58562004e9a565b9062031202565b6000805b8581106203138f575b501562031367575b620313619062004cdf565b620311da565b92620313619062031386906001600160a01b03620081f0878662004d46565b93905062031356565b6001600160a01b0380620313a4858762004d46565b511690620313b3838a62004d46565b511614620313cc57620313c69062004cdf565b62031345565b50506001386203134e565b935050929390620311c8565b8060039594951b9060ff6007830154161562031425576200a4f86200746162000faa946200a4ec6203141c9560026200a4e28762005e1c565b93929362031085565b5093929362031090565b6020810151602681101562002a2357601c036203148c5760405162461bcd60e51b8152602060048201526029602482015260008051602062033acc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a2357601d03620314b2575b506202f5f460209162004cdf565b9290916020840151602681101562002a2357601e0362031bc357604084019060a090620314e3828451015162004cef565b5151620314f4838551015162004d13565b5151036200ade9576203150b828451015162004cef565b51516203151c838551015162004d24565b5151036200ad6d5762031533828451015162004cef565b519462031544838551015162004d13565b5191620315596200a641858751015162004d24565b519585518751036200ad0a5760005b8651811015620315c1576203157e818862004d46565b51906103e882101562004cfd576003620315bb9260018060a01b038d5116600052811b0160205262000faa60406000205462007ce9838c62004d46565b62031568565b5090969192939660005b86518110156203166a57620315e1818862004d46565b516103e881101562004cfd5760039060018060a01b038c5116600052811b016020526203161960406000205462007d56838b62004d46565b919062031627828a62004d46565b51906103e882101562004cfd576203166493600362000faa938f60018060a01b03905116600052811b0160205260406000205562000fa3620332bb565b620315cb565b50939692979550936203167d9062032f53565b96604051966203168d8862002b78565b60018852602036818a013786516001600160a01b0316620316ae8962004cef565b5260405196620316be8862002b3f565b600088526000610a60525b8951610a60519081101562031a6a57620316e4908b62004d46565b51610a4052620316f5885162004e62565b99600097620317058b5162004e62565b6109c05260009760005b8b51811015620317d5578d8c6203173f6001600160a01b0362031733858462004d46565b5116610a405162032d3b565b15806203178f575b62031760575b50506203175a9062004cdf565b6203170f565b9b620317849162001ac782859f62007f376203175a9760018060a01b039262004d46565b9a90508d8c6203174d565b5050506103e8610a4051101562004cfd576001600160a01b03620317b4828e62004d46565b51166000526003610a4051811b016020528d8c604060002054151562031747565b50909b989a99949691929395979b60005b8b5181101562031869576103e8610a4051101562004cfd576001600160a01b0362031812828e62004d46565b51166000526003610a4051811b016020526040600020541562031841575b6203183b9062004cdf565b620317e6565b9c620318606203183b918f6200d8da8f9160018060a01b039262004d46565b9d905062031830565b509b50989590929496919396610a4051996103e88b10159c8d62004cfd57620318a06200806860048f9e60031b01549e8f62006200565b610960526000610980528d60009e5b62004cfd578d8f10156203196e575060009d620318f7620318da826004610a405160031b0162004f5e565b90546109c05160039290921b1c6001600160a01b03169062032dea565b1562031911575b6203190a8f9162004cdf565b9e620318af565b6203190a9e5060009e8f9162031931816004610a405160031b0162004f5e565b60018060a01b0391549060031b1c1662031952610980516109605162004d46565b52620319616109805162004cdf565b61098052915050620318fe565b9396999b929d509396999094979b5060005b82811062031a1e5750505062004cfd5761096051516001600160401b03811162002a9b57620319b9816004610a405160031b016200509a565b60206109605101906004610a405160031b0160005260206000209160005b82811062031a005750505050620319f1610a605162004cdf565b610a60529598909498620316c9565b81516001600160a01b031681850155602090910190600101620319d7565b62031a64906001600160a01b0362031a37828562004d46565b511662031a4b610980516109605162004d46565b5262031a5a6109805162004cdf565b6109805262004cdf565b62031980565b509492975094955091965060009460005b875181101562031ace5762031a996200abc66200abb9838962004d46565b8062031ab2575b5062031aac9062004cdf565b62031a7b565b906200abfc62031ac79862031aac936200608f565b9062031aa0565b5096509450929091508062031af0575b50506202f5f46020915b9150620314a4565b62031b1b9060018060a01b038351166000526200ac5a611f459182602052604060002054906200608f565b60018060a01b03835116600052602052604060002055600080611f4654905b81811062031b79575b5050916202f5f4916020931562031b5d575b509162031ade565b5162031b72906001600160a01b0316620065d6565b3862031b55565b62031b848162004eb6565b9054855160039290921b1c6001600160a01b0390811691161462031bb35762031bad9062004cdf565b62031b3a565b5060019150829050602062031b43565b9190926020810151602681101562002a2357601f0362031bfe5760209162031bf86200ae9d60406202f5f49401515162004cef565b62031ae8565b6020810151602681101562002a235760200362031c24575b506202f5f460209162031ae8565b6020810151602681101562002a2357602180910362031c45575b5062031c16565b602082015160268110156200b01a5760220362031c815750506202f5f4602091611fb660ff19815416905562031c7a62005087565b9162031c3e565b602082015160268110156200b01a5760230362031ca8575b50506202f5f460209162031c7a565b602082015160268110156200b01a5760241462031c9957602082015160268110156200b01a5760251462031c99576020829593949201519060268210156201478c575060150362010ee557604084019062031d0860c08351015162004cef565b519062031d1f60a06200779b818651015162004cef565b519362031d34835185511462000fa3620331b7565b62031d47835186511462000fa3620331b7565b60005b835181101562031da35762031d60818662004d46565b51906103e882101562004cfd57600362031d9d9260018060a01b038b5116600052811b0160205262000faa60406000205462007ce9838a62004d46565b62031d4a565b509095919560005b875181101562031ece5762031dc1818662004d46565b516103e881101562004cfd5760039060018060a01b03865116600052811b0160205262031df960406000205462007d56838962004d46565b9062031e06838862004d46565b51916103e883101562004cfd57600362031e3d9360018060a01b03895116600052811b0160205260406000205562000fa3620332bb565b62031e49818662004d46565b516103e881101562004cfd576003906001600160a01b0362031e6c848c62004d46565b5116600052811b0160205262031e8d60406000205462006814838962004d46565b919062031e9b828862004d46565b51906103e882101562004cfd5762031ec893600362000faa938d62007e0f8760018060a01b039262004d46565b62031dab565b509262031ee6919294506200c6369096959662032f53565b926040519062031ef68262002b78565b6001825260203681840137516001600160a01b031662031f168262004cef565b526000945b8051861015620322835762031f31868262004d46565b51610aa05262031f42855162004e62565b9660009462031f52845162004e62565b6109205260009460005b885181101562032022578a8962031f8c6001600160a01b0362031f80858462004d46565b5116610aa05162032d3b565b158062031fdc575b62031fad575b505062031fa79062004cdf565b62031f5c565b9862031fd19162001ac782859c62007f3762031fa79760018060a01b039262004d46565b9790508a8962031f9a565b5050506103e8610aa051101562004cfd576001600160a01b0362032001828b62004d46565b51166000526003610aa051811b016020528a89604060002054151562031f94565b50909895979498969291939660005b8851811015620320b4576103e8610aa051101562004cfd576001600160a01b036203205d828b62004d46565b51166000526003610aa051811b01602052604060002054156203208c575b620320869062004cdf565b62032031565b996203208690620320ab906001600160a01b036200a9638e8d62004d46565b9a90506203207b565b50985096959291909396610aa0516103e881101580610a205262004cfd5760031b6004015498620320ea62008068898c62006200565b610a00526000610a805260006109a0525b610a205162004cfd576109a0518a811015620321a7576200a9ff62032130916000610a20526004610aa05160031b0162004f5e565b156203214f575b620321456109a05162004cdf565b6109a052620320fb565b6000610a20526203216d6109a0516004610aa05160031b0162004f5e565b60018060a01b0391549060031b1c166203218e610a8051610a005162004d46565b526203219d610a805162004cdf565b610a805262032137565b50979294959093985095909560005b8281106203225057505050610a205162004cfd57610a0051516001600160401b03811162002a9b57620321f3816004610aa05160031b016200509a565b6020610a0051016004610aa05160031b01600052602060002060005b838110620322325750505050620322269062004cdf565b94929590919562031f1b565b82516001600160a01b0316818301556020909201916001016203220f565b6203227d906001600160a01b0362032269828562004d46565b51166200c214610a8051610a005162004d46565b620321b6565b5050936202f5f4919350602092509162031c99565b8151620322ae906001600160a01b031662006600565b6202f343565b620322bf8162004f0a565b9054865160039290921b1c6001600160a01b03908116911614620322ee57620322e89062004cdf565b6202f331565b505050600138806202f33a565b60405162461bcd60e51b815260206004820152604860248201527f5468652070656e64696e672070726f6772616d20686173206265656e2065786560448201527f63757465642c20616e642073686f756c64206e6f742062652065786563757465606482015267321030b3b0b4b71760c11b608482015260a490fd5b908062032382575050565b62002c3b91600052601f6020600020910160051c81019062004fa3565b90600160401b811162002a9b578154818355808210620323be57505050565b62002c3b92600052601f6020600020918180850160051c8401941680620323ed575b500160051c019062004fa3565b600019908186019182549160200360031b1c16905538620323e0565b9060ff809160031b9316831b921b19161790565b620324356203242e6000936202f17f565b506200356f565b92825b845180518210156203252b5781620324509162004d46565b516103e881101562004cfd57600390811b9460018060a01b038516600052602091860182526203248d604096600188600020549101549062005eb0565b919015620324f65790620324a1916200608f565b959015620324bc575050620324b69062004cdf565b62032438565b60649250519062461bcd60e51b825260048201526014602482015273746f74616c20706f776572206f766572666c6f7760601b6044820152fd5b865162461bcd60e51b815260048101849052600e60248201526d706f776572206f766572666c6f7760901b6044820152606490fd5b505092505090565b60005b613f78549081600052613f7691602092808452600393604092858460002001805486101562032694576203256f866203257b9262004f5e565b905490881b1c6202f17f565b509560ff60068098015416620325a3575b50505050506203259d915062004cdf565b62032536565b81600052838352620325cb620325bf8783886000200162004f5e565b905490831b1c6202f17f565b5096620325eb876001809a01549285600052878752886000200162004f5e565b905490831b1c91836000528585526203260b886005896000200162004f5e565b9054911b1c90600092606492838102938185041490151715620326805790620326349162004f77565b1062032678575b6203264757806203258c565b6009945060005252600020019060ff19918183825416179055613f73918254161790556000613f71556000613f7255565b50856203263b565b634e487b7160e01b84526011600452602484fd5b505050505050506000613f7854905b81600052613f76602052600380604060002001805483101562032719576006620326e0620326d48560ff9462004f5e565b905490851b1c6202f17f565b50015416156203271457620326f58262032929565b9081101562002a235762014d61576203270e9062004cdf565b620326a3565b505050565b50505060ff1990613f73600383825416179055600052613f766020526009604060002001908154169055565b613f785490600090828252613f769160209280845260039060409082828520015495620327728762002c61565b96620327818451988962002b94565b80885262032792601f199162002c61565b013682890137845b888652828252848487200154811015620327e35790620327d88262000faa620327c68897969562032929565b620327d2838d62004d46565b620052db565b90919293506203279a565b5050505090919350815b83518110156203285a5762032803818562004d46565b518281101562032846576001809114620328295750620328239062004cdf565b620327ed565b613f73805460ff191690911790555050613f71819055613f725550565b634e487b7160e01b84526021600452602484fd5b50909150613f7280544210600014620328815750613f739060ff19825416179055613f7155565b9050613f73600160ff1982541617905581613f715555565b15620328a157565b60405162461bcd60e51b815260206004820152601e60248201527f766f74696e672072756c6520696e646578206f7574206f662072616e676500006044820152606490fd5b15620328ee57565b60405162461bcd60e51b815260206004820152601360248201527263757272656e74596573206f766572666c6f7760681b6044820152606490fd5b613f785490600091808352613f76806020528260408520600301906203294f9162004f5e565b90549060031b1c62032961816202f17f565b50600101549383865282602052806040872060040190620329829162004f5e565b90549060031b1c9284875280602052816040882060050190620329a59162004f5e565b90549060031b1c9487526020526040862060060190620329c59162004f5e565b90549060031b1c90620329d8906202f17f565b506006015460ff1662032a24575062032a149262005e4362022e1f938362032a0462032a0c9562005e7a565b9690620328e6565b9290620328e6565b111562032a1e5790565b50600190565b6200fab9925062032a149362032a3e62032a0c9362005e7a565b9490620328e6565b9092919262032a56825162004e62565b60009162032a65815162004e62565b8390845b865181101562032b00576001600160a01b0362032a8c816202e43c848b62004d46565b158062032acb575b62032aac575b5062032aa69062004cdf565b62032a69565b819662032ac391620081f062032aa6948b62004d46565b959062032a9a565b506103e88a101562004cfd578062032ae4838a62004d46565b511660005260038a811b01602052604060002054151562032a94565b509295919694509260005b875181101562032b81576103e886101562004cfd576001600160a01b038062032b35838b62004d46565b5116600052600387811b016020526040600020541562032b62575b5062032b5c9062004cdf565b62032b0b565b819562032b79916200e72462032b5c948c62004d46565b949062032b50565b5092509450926103e8831015938462004cfd5760049586600395861b019687549462032bb262008068828862006200565b9460009689889a5b62032d2657818b101562032c5b57506000998b62032bf562032bdd838362004f5e565b90546001600160a01b0392918e1b1c82168a62032dea565b1562032c18575b50509062032c0d8b94939262004cdf565b9a9091929362032bba565b91998c95949392909162032c2e908c9062004f5e565b9054908d1b1c1662032c41828b62004d46565b5262032c4d9062004cdf565b9890919293508b3862032bfc565b9697949a98505091975092506000915b83831062032d01575050505062032cec578051926001600160401b03841162032cd7575062032c9b83836200509a565b602080910191600052806000209060005b84811062032cbb575050505050565b83516001600160a01b0316838201559281019260010162032cac565b604190634e487b7160e01b6000525260246000fd5b603283634e487b7160e01b6000525260246000fd5b62032d1f90620081fe906001600160a01b036200a36b868662004d46565b9162032c6b565b603285634e487b7160e01b6000525260246000fd5b9060005b6103e883101562004cfd576003600484821b01805483101562016f9a578262032d689162004f5e565b9054911b1c6001600160a01b0390811690831614620065b45762032d8c9062004cdf565b62032d3f565b9060005b6103e883101562004cfd576003611fbc84821b01805483101562016f9a578262032dc09162004f5e565b9054911b1c6001600160a01b0390811690831614620065b45762032de49062004cdf565b62032d96565b9060005b8251811015620065c7576001600160a01b038062032e0d838662004d46565b511690831614620065b45762032e239062004cdf565b62032dee565b801562001e07576000190190565b9081519060005b60001983810184811162001e075782101562032f05576001820180831162001e07575b84811062032e7c57505062032e769062004cdf565b62032e3e565b6001600160a01b038062032e91858962004d46565b51168162032ea0848a62004d46565b51161462032ebb575b5062032eb59062004cdf565b62032e61565b828692960182811162001e075762032eb59262032efe9262032ee262032ef7938b62004d46565b511662032ef0898b62004d46565b5262032e29565b9562032e29565b9062032ea9565b50509062032f138162004e62565b9060005b81811062032f26575090925050565b62032f4d906001600160a01b0362032f3f828862004d46565b511662001ac7828662004d46565b62032f17565b80519160005b60001984810185811162001e07578210156203300b576001820180831162001e07575b85811062032f9757505062032f919062004cdf565b62032f59565b62032fa3838662004d46565b5162032fb0828762004d46565b511462032fc9575b62032fc39062004cdf565b62032f7c565b948181019080821162001e075762032ffc620330039162032fef62032fc3948962004d46565b5162032ef08a8a62004d46565b9662032e29565b905062032fb8565b505090916203301a8162004e62565b9060005b8181106203302d575090925050565b806202b4c76203303e928762004d46565b6203301e565b604051620330528162002a7f565b604481527f496e76616c6964206469766964656e64207065726d797269616420706572207460208201527f72616e73616374696f6e2e2053686f756c64206265206c657373207468616e206040820152630313030360e41b606082015290565b604051620330c08162002b06565b603281527f4e6f20656e6f756768206e756d626572206f66207472616e73616374696f6e7360208201527108199bdc88191a5d9a59195b991cc81e595d60721b604082015290565b604051620331168162002b78565b601c81527b6469766964656e6473206f7065726174696f6e206f766572666c6f7760201b602082015290565b604051620331508162002b78565b600d81526c2ab735b737bbb71022b93937b960991b602082015290565b6040516203317b8162002b06565b602681527f4572726f7220696e20776974686472617761626c6520636173682063616c63756020820152653630ba34b7b760d11b604082015290565b604051620331c58162002b78565b6012815271496e76616c696420506172616d657465727360701b602082015290565b604051620331f58162002b78565b601581527413595b58995c88191bd95cc81b9bdd08195e1a5cdd605a1b602082015290565b604051620332288162002b78565b601781527613595b58995c881a5cc81b9bdd081cdd5cdc195b991959604a1b602082015290565b6040516203325d8162002b78565b601b81527a13595b58995c881a5cc8185b1c9958591e481cdd5cdc195b991959602a1b602082015290565b604051620332968162002b78565b60158152744d656d62657220616c72656164792065786973747360581b602082015290565b604051620332c98162002b78565b60118152704e6f20656e6f7567682062616c616e636560781b602082015290565b604051620332f88162002b78565b6018815277125b9d985b1a59081c185c985b595d195c881d1bc81cd95d60421b602082015290565b6040516203332e8162002b78565b6015815274546f6b656e20616d6f756e74206f766572666c6f7760581b602082015290565b602681101562002a23578015620074b2576001811462032a1e57600281146203358657600381146203358057600481146203357a57600581146203357457600681146203356e57600781146203356857600881146203356257600981146203355c57600a81146203355657600b81146203355057600c81146203354a57600d81146203354457600e81146203353e57600f81146203353857601081146203353257601181146203352c57601281146203352657601381146203352057601481146203351a57601581146203351457601681146203350e5760178114620335085760188114620335025760198114620334fc57601a8114620334f657601b8114620334f057601c8114620334ea57601d8114620334e457601e8114620334de57601f8114620334d85760208114620334d25760218114620334cc5760228114620334c65760238114620334c05760248114620334ba57602514620334b557600090565b602590565b50602490565b50602390565b50602290565b50602190565b50602090565b50601f90565b50601e90565b50601d90565b50601c90565b50601b90565b50601a90565b50601990565b50601890565b50601790565b50601690565b50601590565b50601490565b50601390565b50601290565b50601190565b50601090565b50600f90565b50600e90565b50600d90565b50600c90565b50600b90565b50600a90565b50600990565b50600890565b50600790565b50600690565b50600590565b50600490565b50600390565b50600290565b908151815103620065cf57600090815b835181101562017689576001600160f81b031980620335bc838762006506565b511690620335cb838562006506565b5116036201768257620335de9062004cdf565b6203359c565b60405190620335f38262002b06565b60288252604036602084013760005b601481106203361057505090565b60139080820391821162001e0757600382901b916001600160fd1b0381160362001e075760ff80831162001e0757600192620336599084901b6001600160a01b038616620050d4565b60f081168282160391821162001e07576203367d9060f41b600f60f81b16620336e6565b82841b916001600160ff1b038416840362001e0757620336ba9160001a620336a6848962006506565b5360f81b6001600160f81b031916620336e6565b92810180911162001e0757620336d9620336e09360001a918662006506565b5362004cdf565b62033602565b60f81c600a8110156203370f5760300160ff811162001e075760f81b6001600160f81b03191690565b60570160ff811162001e075760f81b6001600160f81b0319169056fe546865206c656e677468206f662061646472657373657320616e6420746f6b65305d206c656e677468206973206e6f742032000000000000000000000000000034dd862f2dd4c33543972cb453e26b9cc23a6eb518176c0de5db12d08007dc6d617665203120656c656d656e7400000000000000000000000000000000000000dd388e0eb473c306304080e96aea031c0fb4686a37f7b1a3c8a2301cd0627f0b7420686176652074776f20656c656d656e747300000000000000000000000000546865206c656e677468206f6620746f6b656e496e666f20616e6420746f6b656e20746865206c656e677468206f6620746f6b656e4c697374000000000000006c656e677468206973206e6f7420657175616c20746f207072696365206c69735d206c656e677468206973206e6f742031000000000000000000000000000000742068617665206f6e6520656c656d656e74000000000000000000000000000020706c7567696e207769746820696e6465782000000000000000000000000000656e677468206973206e6f7420310000000000000000000000000000000000005468652063616c6c20746f2074686520636f6e7472616374206973206e6f74202e55494e543235365f324441525241595b305d5b305d29206973206f7574206f2e55494e543235365f324441525241595b305d5b695d29206973206f7574206f742068617665203220656c656d656e7473000000000000000000000000000000546865206265666f7265206f7065726174696f6e20706c7567696e20737973748b3bb33683ac4daad017d30a0e9972b15e6854cd1f296e14295598f57ce03d506470626d4cb7d88e800a628455fe3f45216f254e8294f25d17ea4ac7e2f4f0a35d206c656e677468206973206e6f7420320000000000000000000000000000005265736572766564206f70636f6465206964203233206973206e6f7420696d70546865206c656e677468206f6620746f6b656e436c617373417272617920616e6c656e677468206973206e6f74203100000000000000000000000000000000005d206c656e677468206973206e6f742067726561746572207468616e20310000617665206f6e6520656c656d656e740000000000000000000000000000000000742068617665203120656c656d656e7400000000000000000000000000000000746f6b656e206c6576656c205829206d757374206265206c657373207468616e28746f6b656e206c6576656c205829206d757374206265206c657373207468615265736572766564206f70636f6465206964203238206973206e6f7420696d70546865206c656e677468206f662061646472657373657320616e6420616d6f75a26469706673582212200b7dff630712f4e35e13cd6b52bb4915fdb7f860f9ed94b9e17edff45824d9ad64736f6c63430008130033",
+ "deployedBytecode": "0x610bc08060405260043610156200001557600080fd5b600090813560e01c908163036ee850146200299d575080630fda3e1e146200290557806310ade3ea14620028d65780631797631d146200284f5780631c75255a14620027e957806323b65c7814620027625780632514a6b4146200253c5780632eeb063b146200236c5780633fb18aec146200230257806356424cf414620022235780635c00d98714620022005780635d0b184914620002055780635f1231ea14620021165780635f5d5f00146200208f578063681ece9d146200204a5780636c0d4fa41462001eb75780637daa10ce1462001e9a5780638129fc1c1462001ad757806383e4cccf146200186e578063864f9f7a146200183057806386ad77e214620014e25780638c7a63ae1462001451578063942d59fa146200126e5780639f36145f14620011e8578063a064c4f114620011bd578063acf80bc4146200117f578063aec266871462001095578063aefca42a1462001074578063c41f9482146200102c578063c591aa981462000fde578063cab847f714620002a4578063d5a172f21462000278578063d6a93c511462000226578063f179f23b14620002055763f8ce8bdc14620001c757600080fd5b346200020257806003193601126200020257620001e3620052e8565b50610c80620001f162002bb8565b620002006040518092620029ed565bf35b80fd5b503462000202578060031936011262000202576020613f7854604051908152f35b503462000202578060031936011262000202575b6103e8811062000250575b602090604051908152f35b60ff60078260031b0154161562000272576200026c9062004cdf565b6200023a565b62000245565b50346200020257806003193601126200020257613f70546040516001600160a01b039091168152602090f35b5060031960203682011262000ca5576001600160401b036004351162000ca557606090600435360301126200020257604051620002e18162002b06565b620002f1600435600401620029d8565b8152600435602401356101608190526001600160401b03811162000ca957600435013660238201121562000ca957600462000333910135806101805262002c61565b9062000343604051928362002b94565b610180518252602082016101c052610180516101605160043501906024369160051b8301011162000ca15760240160e052825b6101805160051b610160516004350190602460e0519183010181101562000ebd57356101e08190526001600160401b03811162000ca95760609101360360231901126200020257620003cf604051806101205262002b06565b620003e960246101e05161016051600435010101620029d8565b610120515260446101e0516101605160043501010135602681101562000ca55760206101205101526101e0516101605160043501016064810135806101005260018060401b03811162000ca957610100910136036023190112620002025762000459604051806101405262002b22565b610100516101e051610160516004350101016001600160401b0360248201351162000ca55762000493906024369181810135010162004925565b6101405152610100516101e05161016051600435010101916001600160401b0360448401351162000ca5573660436044850135850101121562000ca557620004e5602460448501358501013562002c61565b90620004f5604051928362002b94565b6024604485013585010135825260208201906044850135610100516101e05161016051600435010101013660446024818901358901013560051b8301011162000db457604401915b60446024818801358801013560051b81880135610100516101e051610160516004350101010101018310156200058857602080916200057c85620049b0565b8152019201916200053d565b50610140516020019290925250610100516101e051610160519395600435909401010192506001600160401b0360648401351162000ca1573660436064850135850101121562000ca157602460648401358401013590620005e98262002c61565b90620005f9604051928362002b94565b828252602082016064860135610100516101e05161016051600435010101013660448660051b8301011162000bb157604401905b6064870135610100516101e051610160516004350101010160448660051b8201018310156200074f576001600160401b038335116200074b5760e083358201360360431901126200074b5760405191620006878362002acd565b6001600160401b038435830160440135116200074757620006b436604486358501818101350101620049be565b835283358201606481013560208501526084810135604085015260a48101356060850152620006e69060c401620049b0565b60808401526001600160401b038435830160e40135116200074757602092839262000736906101049062000727368935830160e48101350160440162002f77565b60a085015287350101620049b0565b60c08201528152019101906200062d565b8980fd5b8880fd5b50505092935090506040610140510152610100516101e05161016051600435010101608481013560c05260018060401b0360848201351162000ca1573660436084830135830101121562000ca157608481013501602401356080819052620007ca90620007bc9062002c61565b604051806101a05262002b94565b6101a051608051905260206101a051019160805160051b60c051610100516101e051610160516004350101010190604436918301011162000db45760440160a052929091905b60805160051b60c051610100516101e0516101605160043501010101604460a0519282010182101562000cad576001600160401b0382351162000ca95760e082359091013603604319011262000ca557604051926200086f8462002acd565b6044823560c051610100516101e0516101605160043501010101010135600681101562000ca15784526064823560c051610100516101e05161016051600435010101010101356020850152813560c051610100516101e0516101605160043501010101019360018060401b0360848601351162000ca1573660636084870135870101121562000ca1576200090d604460848701358701013562002c61565b956200091d604051978862002b94565b6044608487013587010135875260208701906084870135853560c051610100516101e05161016051600435010101010101366064604460848b01358b01013560051b8301011162000c9d57606401915b60c051610100516101e051610160516004350101010186350160848901359081019089016044013560051b810160640184101562000bb5576001600160401b0384351162000bb15760c0843582013603606319011262000bb15760405190620009d68262002ab1565b8435810160648101358352600560849091013510156200074b578435810160848101356020840152600460a49091013510156200074b578435810160a4810135604084015260c481013560608401526001600160401b0360e490910135116200074b5762000a51368635830160e481013501606401620049be565b60808301526001600160401b03853582016101040135116200074b5760808535820161010481013501360360631901126200074b576040519062000a958262002a7f565b6001600160401b0386358201610104810135016064013511620007475762000ad136606461010489358501908101350181810135010162004925565b82526001600160401b0386358201610104810135016084013511620007475762000b0f36873583016101048101350160848101350160640162004a24565b60208301526001600160401b03863582016101048101350160a4013511620007475762000b5036873583016101048101350160a48101350160640162004aaf565b60408301526001600160401b03863582016101048101350160c4013511620007475760209384939092909162000b9b9036908935016101048101350160c48101350160640162002f77565b606082015260a08201528152019201916200096d565b8780fd5b50509550509091929594604082015260a4833560c051610100516101e05161016051600435010101010101356060820152823560c051610100516101e0516101605160043501010101019260018060401b0360c48501351162000c9d5761010462000c819162000c326020966044369160c4810135010162002f77565b608085015262000c5d60e4823560c051610100516101e05161016051600435010101010101620049b0565b60a08501523560c051610100516101e05161016051600435010101010101620049b0565b60c082015281520191602060a0510160a0529291909162000810565b8680fd5b8380fd5b5080fd5b8280fd5b50506101a0516101405160600152610100516101e0516101605194956004359095010101929091506001600160401b0360a48401351162000ca55736604360a4850135850101121562000ca55762000d0f602460a48501358501013562002c61565b9062000d1f604051928362002b94565b602460a4850135850101358252602082019060a4850135610100516101e0516101605160043501010101366044602460a48901358901013560051b8301011162000db457604401915b610100516101e0516101605160043501010160a48701359081019087016024013560051b0160440183101562000db85760058335101562000db457823581526020928301920162000d68565b8480fd5b509350509290926080610140510152610100516101e0516101605160043501010160018060401b0360c48201351162000ca15762000e01906024369160c4810135010162004a24565b6101405160a00152610100516101e051610160516004350101016001600160401b0360e48201351162000ca15762000e44906024369160e4810135010162004aaf565b60c0610140510152610100516101e051610160516004350101016101048101359060018060401b03821162000db457602462000e84923692010162002f77565b60e0610140510152610140516040610120510152610120516101c0515260206101c051016101c052602060e0510160e052909162000376565b60208401858152849084600435604401356001600160401b03811162000ca55762000ef090600436918135010162002f77565b604084015282516001600160a01b03919062000f4990831662000f4062000f2162000f1b33620335e4565b62004ba8565b62000f3962000f33878a5116620335e4565b62004c0e565b9062004c65565b90331462004cac565b8251805182101562000fb6579062000faa62000fb0928462000f6d84339362004d46565b5151161462000fa362000f8462000f1b33620335e4565b62000f3962000f338862000f9a888c5162004d46565b515116620335e4565b9062004cac565b62004cdf565b62000f49565b62000fda62000fc5866200677e565b60405191829160208352602083019062002e26565b0390f35b503462000202576040366003190112620002025760209060ff906040906001600160a01b036200100d620029bc565b168152613f778452818120602435825284522054166040519015158152f35b503462000202576020366003190112620002025760c06200104f6004356200621c565b93604093919351958652602086015260408501526060840152608083015260a0820152f35b503462000202578060031936011262000202576020613f7254604051908152f35b50346200020257806003193601126200020257613f7590815491620010ba8362002c61565b91620010ca604051938462002b94565b8383526020938484018093835285832083915b838310620011475750505050604051928484019085855251809152604084019460408260051b8601019392955b828710620011185785850386f35b90919293828062001136600193603f198a8203018652885162002e26565b96019201960195929190926200110a565b600188819260409a99979a516200116c8162001164818962002cb6565b038262002b94565b81520192019201919096939596620010dd565b50346200020257602036600319011262000202576020906040906001600160a01b03620011ab620029bc565b168152611f4783522054604051908152f35b50346200020257602036600319011262000202576020620011e06004356200610a565b604051908152f35b5034620002025760203660031901126200020257604062001243916004358152613f76602052206200121a816200370e565b9060ff600782015491600960088201549101549060405195869560a0875260a087019062003273565b93602086015260408501526200125f606085018383166200350e565b60081c16151560808301520390f35b5034620002025760208060031936011262000ca557604051620012918162002ae9565b60405192620012a08462002b06565b80845260609384848201528460408201528252838383015283604083015283808301528360808301528060a08301528060c08301528060e083015280610100809301526004358152613f768352604090209160405192620013018462002ae9565b6200130c816200370e565b84526200131c600382016200351c565b8483019081529262001331600483016200351c565b604086019081529562001347600584016200351c565b868201908152926200135c600682016200351c565b956080880196875260078201549660a0890197885260088301549260c08a01938452600901549560e08a019460ff8816620013989087620052db565b868b019760081c60ff16151588526040519b8c9b8a8d52518c6101209b8c9101526101408d01620013c99162003273565b9451601f198d8703810160408f015295620013e49162002fcf565b905191858d830301908d0152620013fb9162002fcf565b905190838b82030160808c0152620014139162002fcf565b9051918982030160a08a01526200142a9162002fcf565b955160c08801525160e08701525190850162001446916200350e565b511515908301520390f35b5034620002025760203660031901126200020257600435906103e8821015620014ce575060031b6001810154600282015491620014c46005620014a560068401549362001164604051809481930162002cb6565b6040519485948552602085015260806040850152608084019062002e26565b9060608301520390f35b634e487b7160e01b81526032600452602490fd5b50346200020257806003193601126200020257611f42805490620015068262002c61565b9162001516604051938462002b94565b808352602083019184526020842084925b828410620016e4578585611f43805490620015428262002c61565b9362001552604051958662002b94565b82855260208501918152602081209080925b8484106200159a576200158b8662000fda89604051938493604085526040850190620030b7565b908382036020850152620030b7565b604051620015a88162002acd565b620015b860ff85541682620035e5565b60018401546020820152600284018054620015d38162002c61565b91620015e3604051938462002b94565b81835285526020808620869184015b8383106200165d57505050506001928260209260406006950152600387015460608201526040516200162d81620011648160048c0162002cb6565b608082015260ff6005880154818116151560a084015260081c16151560c082015281520193019301929162001564565b600190602060405191620016718362002ab1565b84548352838501549260ff8416620016898162002fc4565b8382015260ff600894851c16620016a08162002a18565b604082015260028601546060820152620016bd600387016200351c565b6080820152620016d060048701620036ac565b60a0820152815201920192019190620015f2565b604051620016f28162002acd565b6200170260ff84541682620035e5565b6001808401546020830152600284019081546200171f8162002c61565b926200172f604051948562002b94565b8184528a526020808b208b9185015b838310620017aa5750505050506001928260209260406006950152600386015460608201526040516200177a81620011648160048b0162002cb6565b608082015260ff6005870154818116151560a084015260081c16151560c082015281520192019301929062001527565b8490602060405191620017bd8362002ab1565b84548352838501549260ff8416620017d58162002fc4565b8382015260ff600894851c16620017ec8162002a18565b60408201526002860154606082015262001809600387016200351c565b60808201526200181c60048701620036ac565b60a08201528152019201920191906200173e565b50346200020257602036600319011262000202576020906040906001600160a01b036200185c620029bc565b168152611f4583522054604051908152f35b5034620002025760208060031936011262000ca5578160043591620018b14784111562000fa36200189f86620050f5565b620018aa47620050f5565b9062004d8e565b3382526200191c611f45808352620018f5604085205486111562000fa3620018d988620050f5565b338852848752620018ee6040892054620050f5565b9062004dfa565b3384528083526200190b856040862054620050ba565b929062000fa3620018d988620050f5565b3384528252806040842055156200195e575b508080809381811562001954575b3390f115620019485780f35b604051903d90823e3d90fd5b506108fc6200193c565b9050611f46805491620019718362004e62565b918593865b81811062001a645750506200198b8462004e62565b805192906001600160401b03841162001a50579080849392620019b18a98979662004ff7565b0191865280862090865b84811062001a31575050505050825b828110620019da5750506200192e565b9192509062001a279062000faa6001600160a01b03620019fb838662004d46565b511662001a088362004eb6565b90919082549060031b9160018060a01b03809116831b921b1916179055565b90849291620019ca565b83516001600160a01b03168184015589975092810192600101620019bb565b634e487b7160e01b88526041600452602488fd5b62001a6f8162004eb6565b90546001600160a01b03916003913391831b1c83160362001a9e575b505062001a989062004cdf565b62001976565b9662001ace91839862001ab562001a989562004eb6565b9054911b1c1662001ac7828962004d46565b5262004cdf565b95903862001a8b565b50346200020257806003193601126200020257613f7080546001600160a01b03191633179055613f73805460ff19166001908117909155604051909190819062001b218162002b3f565b5290611f428054600082558062001e31575b508252818060405162001b468162002b3f565b5262001e1d57611f438054600082558062001d9e575b508252612710613f745562001d9062001b7462005bee565b836040519162001b848362002b3f565b81835262001c866040519162001b9a8362002b3f565b8383526040519462001bac8662002b3f565b8486526040519362001bbe8562002b3f565b8585526040519462001bd08662002b3f565b8686526040519162001be28362002a7f565b8252602097888301526040820152606094858201526040519162001c068362002ab1565b8683526003888401528660408401528686840152608083015260a082015262001c2f8262004cef565b5262001c3b8162004cef565b506040519062001c4b8262002acd565b6004825287868301526040820152838382015260405162001c6c8162002b3f565b84815260808201528660a08201528660c082015262005cfa565b62001c9062005bee565b60405162001c9e8162002b3f565b83815260405162001caf8162002b3f565b84815260405162001cc08162002b3f565b85815260405162001cd18162002b3f565b8681526040519162001ce38362002b3f565b8783526040519362001cf58562002a7f565b8452888401526040830152848201526040519162001d138362002ab1565b8583526003878401528560408401528585840152608083015260a082015262001d3c8262004cef565b5262001d488162004cef565b50856040519462001d598662002acd565b60058652850152604084015282015260405162001d768162002b3f565b84815260808201528260a08201528360c082015262005d46565b611388611faf55611fb05580f35b92506006838102938185040362001e075760009382855260208520908101905b81811062001dce57505062001b5c565b8086849255868682015562001de66002820162005504565b86600382015562001dfa6004820162005399565b8660058201550162001dbe565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b82526041600452602482fd5b92506006838102938185040362001e075760009382855260208520908101905b81811062001e6157505062001b33565b8086849255868682015562001e796002820162005504565b86600382015562001e8d6004820162005399565b8660058201550162001e51565b503462000202578060031936011262000202576020604051338152f35b5034620002025780600319360112620002025762001ed462002bb8565b6040519162001ee38362002b22565b611faf548352611fb0549060209182850152611fb1546040850152611fb254606085015260405180611fb390848254918281520191845284842090845b8181106200202c575050508162001f3991038262002b94565b6080850152611fb4805462001f4e8162002c61565b9162001f5e604051938462002b94565b818352835283832083908584015b83831062001ffe575050505060a085015260405180928391611fb591808354928381520192855280852094905b82821062001fda5750505062001fb29250038262002b94565b60c083015260ff611fb65416151560e083015262000fda611fb7546040519384938462002ead565b85546001600160a01b03168452600195860195879550938101939091019062001f99565b60018781926040999899516200201a8162001164818962002cb6565b81520192019201919095949562001f6c565b82546001600160a01b03168452928601926001928301920162001f20565b5034620002025760203660031901126200020257600435906103e8821015620014ce5762000fda6200208260048460031b0162002c03565b6040519182918262002a39565b50346200020257806003193601126200020257604051611f4180548083529083526020808301937f68ffef30f3d6829c9938575e8bc340aa2a3398e927d767947dd5024d1581d59292915b828210620020f55762000fda85620020828189038262002b94565b83546001600160a01b031686529485019460019384019390910190620020da565b5034620002025760209081600319360112620002025760409062002139620029bc565b8160608451620021498162002a7f565b82815286810183905285810182905201526001600160a01b03168152611f40835220604051906200217a8262002a7f565b620021f581549160ff83161515845260ff8585019360081c1615158352600260405191620021b983620021b1816001850162002cb6565b038462002b94565b6040860192835201549260608501938452604051958695818752511515908601525115156040850152516080606085015260a084019062002e26565b905160808301520390f35b50346200020257602036600319011262000202576020620011e060043562005e1c565b50346200020257806003193601126200020257611faf546200227c6200224862033044565b916200225a6127109384831062004cac565b62002272611fb254611fb054111562000fa3620330b2565b611fb15462005eb0565b90506200228862033108565b50825b6103e88110620022b0575b6020620022a685858504620061de565b9050604051908152f35b909260ff60078360031b01541615620022fa5781620022e4620022f092620022dd62000faa969562005e1c565b906200608f565b949062000fa362033108565b929091926200228b565b929062002296565b50346200020257604036600319011262000202576001600160401b0360043581811162000ca9576200233990369060040162002f77565b916024359182116200020257602062002362846200235b366004870162002f77565b9062006518565b6040519015158152f35b503462000202578060031936011262000202576040516200238d8162002b3f565b604051613f0383825b606482106200252557505050620023ad8162002b5b565b815260405191620023be8362002b22565b613f67548352613f68549060209182850152613f69546040850152613f6a54606085015260405180613f6b90848254918281520191845284842090845b8181106200250757505050816200241491038262002b94565b6080850152613f6c8054620024298162002c61565b9162002439604051938462002b94565b818352835283832083908584015b838310620024d9575050505060a085015260405180928391613f6d91808354928381520192855280852094905b828210620024b5575050506200248d9250038262002b94565b60c083015260ff613f6e5416151560e083015262000fda613f6f546040519384938462002ead565b85546001600160a01b03168452600195860195879550938101939091019062002474565b6001878192604099989951620024f58162001164818962002cb6565b81520192019201919095949562002447565b82546001600160a01b031684529286019260019283019201620023fb565b600160208192855481520193019101909162002396565b5034620002025760208060031936011262000ca5576004356200256b4782111562000fa36200189f84620050f5565b33835282808080611f4794858752620025b0604083205482111562000fa36200259484620050f5565b338652898b52620025a96040872054620050f5565b906200526f565b338252858752620025f0620025ca826040852054620050ba565b919062000fa3620025db85620050f5565b3387528a8c52620025a96040882054620050f5565b338352868852604083205581811562002758575b3390f1156200274d57338352815260408220541562002621575080f35b611f48805491620026328362004e62565b918493855b818110620026f35750506200264c8462004e62565b805192906001600160401b038411620026df5781906200266c8562004fbc565b0191865280862090865b848110620026c3575050505050825b828110620026935750505080f35b620026bd9062000faa6001600160a01b03620026b0838662004d46565b511662001a088362004e9a565b62002685565b83516001600160a01b0316838201559281019260010162002676565b634e487b7160e01b87526041600452602487fd5b620026fe8162004e9a565b90546001600160a01b03916003913391831b1c8316036200272d575b5050620027279062004cdf565b62002637565b966200274491839862001ab5620027279562004e9a565b9590386200271a565b6040513d84823e3d90fd5b506108fc62002604565b50346200020257806003193601126200020257604051611f4680548083529083526020808301937f721f0813146d89d6f0f0dbb1451dd10acd9dadea7c30d73459c3079bc665b9a892915b828210620027c85762000fda85620020828189038262002b94565b83546001600160a01b031686529485019460019384019390910190620027ad565b50346200020257604036600319011262000202576004356024356001600160a01b0381169081900362000ca9576103e88210156200283b579160036040926020948352811b0183522054604051908152f35b634e487b7160e01b83526032600452602483fd5b50346200020257806003193601126200020257604051611f4880548083529083526020808301937f54b856f7ae688db523226c6d190d6c3f1578f46968ba7de0cc9e487420dbf24c92915b828210620028b55762000fda85620020828189038262002b94565b83546001600160a01b0316865294850194600193840193909101906200289a565b50346200020257806003193601126200020257602060ff613f73541660405190620029018162002a18565b8152f35b5034620002025760209081600319360112620002025762002925620029bc565b6200292f620052e8565b506001600160a01b03168152611f498252604080822090519190620029548362002b3f565b60405193849192915b606483106200298757610c808587620029768162002b5b565b8152620002006040518092620029ed565b600182819286548152019401920191926200295d565b90503462000ca5578160031936011262000ca557602090613f71548152f35b600435906001600160a01b0382168203620029d357565b600080fd5b35906001600160a01b0382168203620029d357565b516000915b6064831062002a0057505050565b600190825181526020809101920192019190620029f2565b6004111562002a2357565b634e487b7160e01b600052602160045260246000fd5b6020908160408183019282815285518094520193019160005b82811062002a61575050505090565b83516001600160a01b03168552938101939281019260010162002a52565b608081019081106001600160401b0382111762002a9b57604052565b634e487b7160e01b600052604160045260246000fd5b60c081019081106001600160401b0382111762002a9b57604052565b60e081019081106001600160401b0382111762002a9b57604052565b61012081019081106001600160401b0382111762002a9b57604052565b606081019081106001600160401b0382111762002a9b57604052565b61010081019081106001600160401b0382111762002a9b57604052565b602081019081106001600160401b0382111762002a9b57604052565b610c8081019081106001600160401b0382111762002a9b57604052565b604081019081106001600160401b0382111762002a9b57604052565b601f909101601f19168101906001600160401b0382119082101762002a9b57604052565b6040519062002bc78262002b3f565b60405182611f4b6000835b6064821062002bec5750505062002be98262002b5b565b52565b600160208192855481520193019101909162002bd2565b9060405191828154918282526020928383019160005283600020936000905b82821062002c3d5750505062002c3b9250038362002b94565b565b85546001600160a01b03168452600195860195889550938101939091019062002c22565b6001600160401b03811162002a9b5760051b60200190565b90600182811c9216801562002cab575b602083101462002c9557565b634e487b7160e01b600052602260045260246000fd5b91607f169162002c89565b906000929180549162002cc98362002c79565b91828252600193848116908160001462002d30575060011462002ced575b50505050565b90919394506000526020928360002092846000945b83861062002d1b57505050500101903880808062002ce7565b80548587018301529401938590820162002d02565b9294505050602093945060ff191683830152151560051b0101903880808062002ce7565b90815462002d628162002c61565b9260409362002d748551918262002b94565b828152809460208092019260005281600020906000935b85851062002d9b57505050505050565b6001848192845162002db38162001164818a62002cb6565b81520193019401939162002d8b565b90815180825260208080930193019160005b82811062002de3575050505090565b83516001600160a01b03168552938101939281019260010162002dd4565b60005b83811062002e155750506000910152565b818101518382015260200162002e04565b9060209162002e418151809281855285808601910162002e01565b601f01601f1916010190565b908082519081815260208091019281808460051b8301019501936000915b84831062002e7c5750505050505090565b909192939495848062002e9c600193601f198682030187528a5162002e26565b980193019301919493929062002e6b565b93929162002ebf85610ca093620029ed565b610cc080610c808701528151908601526020810151610ce08601526040810151610d008601526060810151610d2086015260e062002f4b62002f146080840151610100610d408a0152610dc089019062002dc2565b62002f3460a085015191610cbf1992838b830301610d608c015262002e4d565b9060c08501519089830301610d808a015262002dc2565b9101511515610da0860152930152565b6001600160401b03811162002a9b57601f01601f191660200190565b81601f82011215620029d35780359062002f918262002f5b565b9262002fa1604051948562002b94565b82845260208383010111620029d357816000926020809301838601378301015290565b6005111562002a2357565b90815180825260208080930193019160005b82811062002ff0575050505090565b83518552938101939281019260010162002fe1565b90815180825260208092019182818360051b82019501936000915b848310620030315750505050505090565b90919293949584806200304d83856001950387528a5162002fcf565b980193019301919493929062003020565b90815180825260208092019182818360051b82019501936000915b8483106200308a5750505050505090565b9091929394958480620030a683856001950387528a5162002dc2565b980193019301919493929062003079565b90815180825260208092019081926005928183851b82019601946000915b848310620030e7575050505050505090565b90919293949596818103835287519060e0808201835190600682101562002a235783929189945283850151848401528a60409182870151938386015283518091528561010082818801941b87010194019260005b8281106200319a5750505050509282916200317060019560608085015190840152608080850151908483039085015262002e26565b9160a08082015115159083015260c0809101511515910152990193019301919594939290620030d5565b91939596806200325f600193959760ff198b82030189528951908151815283820151620031c78162002fc4565b8482015287820151620031da8162002a18565b888201526060908183015182820152816200324f6200323e6200322d6080620032108189015160c080848a015288019062002fcf565b9560a0809901519881880391015287519080875286019062002e4d565b888701518582038a87015262003005565b8b8601518482038d8601526200305e565b9301519181840391015262002e26565b970195019101918b9695949391926200313b565b90606081019160018060a01b03815116825260208101519260606020840152835180915260808301602060808360051b86010195019160005b818110620032d55750505050906040620032d29392015190604081840391015262002e26565b90565b858703607f19018352835180516001600160a01b031688526020810151949793949293919290602682101562002a2357604091602084015201519060606040820152620033318251610100606084015261016083019062002e4d565b602083810151838303605f190160808501528051808452928201929101906000905b808210620034f3575050506040830151605f198383030160a0840152805180835260208301906020808260051b86010193019360005b8281106200346e57505050506060840151838203605f190160c0850152620033b29250620030b7565b608083015190605f198382030160e0840152602080835192838152019201906000905b8082106200344a575050506200343d8360209360e0620034266200340e879660a060019a0151605f198683030161010087015262003005565b60c0850151848203605f19016101208601526200305e565b92015190610140605f198285030191015262002e26565b98019401929101620032ac565b9091926020806001928651620034608162002fc4565b8152019401920190620033d5565b90919293602080600192601f19868203018852885190620034d76200349c835160e080855284019062002fcf565b8484015185840152604084015160408401526060840151606084015260808401511515608084015260a084015183820360a085015262002e26565b60c0928301511515919092015297019695019392910162003389565b90919260208060019286511515815201940192019062003353565b90600382101562002a235752565b9060405191828154918282526020928383019160005283600020936000905b828210620035545750505062002c3b9250038362002b94565b8554845260019586019588955093810193909101906200353b565b906040516200357e8162002acd565b60c060ff6006839562003591816200351c565b85526001810154602086015260028101546040860152600381015460608601528260048201541615156080860152604051620035d68162001164816005860162002cb6565b60a08601520154161515910152565b600682101562002a235752565b908154620036008162002c61565b9262003610604051948562002b94565b818452600090815260208082208186015b84841062003630575050505050565b600183819262003640856200351c565b81520192019301929062003621565b9081546200365d8162002c61565b926200366d604051948562002b94565b818452600090815260208082208186015b8484106200368d575050505050565b60018381926200369d8562002c03565b8152019201930192906200367e565b9060036060604051620036bf8162002a7f565b6200370a8195620036d08162002d54565b8352620036e060018201620035f2565b6020840152620036f3600282016200364f565b6040840152620021b1604051809681930162002cb6565b0152565b906040516200371d8162002b06565b82546001600160a01b03168152600183018054919384929091620037418262002c61565b9162003751604051938462002b94565b80835260208301916000526020600020916000905b828210620037935750505050916200370a6040926002946020840152620021b18451809681930162002cb6565b604051620037a18162002b06565b84546001600160a01b038116825260a01c60ff16602681101562002a23576020820152604051620037d28162002b22565b620037e06001870162002d54565b815260028601604051808260208294549384815201906000526020600020926000905b80601f83011062004753576200393c9454918181106200473c575b81811062004722575b81811062004708575b818110620046ee575b818110620046d5575b818110620046bb575b818110620046a1575b81811062004687575b8181106200466d575b81811062004653575b81811062004639575b8181106200461f575b81811062004605575b818110620045eb575b818110620045d1575b818110620045b7575b8181106200459d575b81811062004583575b81811062004569575b8181106200454f575b81811062004535575b8181106200451b575b81811062004501575b818110620044e7575b818110620044cd575b818110620044b3575b81811062004499575b8181106200447f575b81811062004465575b8181106200444b575b81811062004431575b1062004420575b50038262002b94565b6020820152600386018054620039528162002c61565b9162003962604051938462002b94565b81835260208301906000526020600020906000905b838210620043ff57505050506040820152600486018054620039998162002c61565b91620039a9604051938462002b94565b81835260208301906000526020600020906000905b838210620042af57505050506060820152600586016040519081602082549182815201916000526020600020906000915b81601f84011062003fa65784600997946020979460019a979462003b3594549181811062003f88575b81811062003f67575b81811062003f46575b81811062003f25575b81811062003f05575b81811062003ee4575b81811062003ec3575b81811062003ea2575b81811062003e81575b81811062003e60575b81811062003e3f575b81811062003e1e575b81811062003dfd575b81811062003ddc575b81811062003dbb575b81811062003d9a575b81811062003d79575b81811062003d58575b81811062003d37575b81811062003d16575b81811062003cf5575b81811062003cd4575b81811062003cb3575b81811062003c92575b81811062003c71575b81811062003c50575b81811062003c2f575b81811062003c0e575b81811062003bed575b81811062003bcc575b81811062003bab575b1062003b905750038262002b94565b608082015262003b4860068a01620035f2565b60a082015262003b5b60078a016200364f565b60c082015260405162003b7781620011648160088e0162002cb6565b60e0820152604082015281520194019101909262003766565b90889160f81c62003ba18162002fc4565b8152013862003933565b928a8d9160ff8560f01c1662003bc18162002fc4565b815201930162003b26565b928a8d9160ff8560e81c1662003be28162002fc4565b815201930162003b1d565b928a8d9160ff8560e01c1662003c038162002fc4565b815201930162003b14565b928a8d9160ff8560d81c1662003c248162002fc4565b815201930162003b0b565b928a8d9160ff8560d01c1662003c458162002fc4565b815201930162003b02565b928a8d9160ff8560c81c1662003c668162002fc4565b815201930162003af9565b928a8d9160ff8560c01c1662003c878162002fc4565b815201930162003af0565b928a8d9160ff8560b81c1662003ca88162002fc4565b815201930162003ae7565b928a8d9160ff8560b01c1662003cc98162002fc4565b815201930162003ade565b928a8d9160ff8560a81c1662003cea8162002fc4565b815201930162003ad5565b928a8d9160ff8560a01c1662003d0b8162002fc4565b815201930162003acc565b928a8d9160ff8560981c1662003d2c8162002fc4565b815201930162003ac3565b928a8d9160ff8560901c1662003d4d8162002fc4565b815201930162003aba565b928a8d9160ff8560881c1662003d6e8162002fc4565b815201930162003ab1565b928a8d9160ff8560801c1662003d8f8162002fc4565b815201930162003aa8565b928a8d9160ff8560781c1662003db08162002fc4565b815201930162003a9f565b928a8d9160ff8560701c1662003dd18162002fc4565b815201930162003a96565b928a8d9160ff8560681c1662003df28162002fc4565b815201930162003a8d565b928a8d9160ff8560601c1662003e138162002fc4565b815201930162003a84565b928a8d9160ff8560581c1662003e348162002fc4565b815201930162003a7b565b928a8d9160ff8560501c1662003e558162002fc4565b815201930162003a72565b928a8d9160ff8560481c1662003e768162002fc4565b815201930162003a69565b928a8d9160ff8560401c1662003e978162002fc4565b815201930162003a60565b928a8d9160ff8560381c1662003eb88162002fc4565b815201930162003a57565b928a8d9160ff8560301c1662003ed98162002fc4565b815201930162003a4e565b928a8d9160ff8560281c1662003efa8162002fc4565b815201930162003a45565b928a8d9160ff85831c1662003f1a8162002fc4565b815201930162003a3c565b928a8d9160ff8560181c1662003f3b8162002fc4565b815201930162003a33565b928a8d9160ff8560101c1662003f5c8162002fc4565b815201930162003a2a565b928a8d9160ff8560081c1662003f7d8162002fc4565b815201930162003a21565b928a8d9160ff851662003f9b8162002fc4565b815201930162003a18565b926001610400602092865460ff811662003fc08162002fc4565b825260ff8160081c1662003fd48162002fc4565b8583015260ff8160101c1662003fea8162002fc4565b604083015260ff8160181c16620040018162002fc4565b606083015260ff81861c16620040178162002fc4565b608083015260ff8160281c166200402e8162002fc4565b60a083015260ff8160301c16620040458162002fc4565b60c08301526200405b60ff8260381c1662002fc4565b60ff8160381c1660e083015260ff8160401c16620040798162002fc4565b61010083015260ff8160481c16620040918162002fc4565b61012083015260ff8160501c16620040a98162002fc4565b61014083015260ff8160581c16620040c18162002fc4565b61016083015260ff8160601c16620040d98162002fc4565b61018083015260ff8160681c16620040f18162002fc4565b6101a083015260ff8160701c16620041098162002fc4565b6101c083015260ff8160781c16620041218162002fc4565b6101e083015260ff8160801c16620041398162002fc4565b61020083015260ff8160881c16620041518162002fc4565b61022083015260ff8160901c16620041698162002fc4565b61024083015260ff8160981c16620041818162002fc4565b61026083015260ff8160a01c16620041998162002fc4565b61028083015260ff8160a81c16620041b18162002fc4565b6102a083015260ff8160b01c16620041c98162002fc4565b6102c083015260ff8160b81c16620041e18162002fc4565b6102e083015260ff8160c01c16620041f98162002fc4565b61030083015260ff8160c81c16620042118162002fc4565b61032083015260ff8160d01c16620042298162002fc4565b61034083015260ff8160d81c16620042418162002fc4565b61036083015260ff8160e01c16620042598162002fc4565b61038083015260ff8160e81c16620042718162002fc4565b6103a083015260ff8160f01c16620042898162002fc4565b6103c083015260f81c6200429d8162002fc4565b6103e0820152019401920191620039ef565b604051620042bd8162002acd565b620042cd60ff85541682620035e5565b60018401546020820152600284018054620042e88162002c61565b91620042f8604051938462002b94565b81835260208301906000526020600020906000905b8382106200437857505050506001928260209260406006950152600387015460608201526040516200434881620011648160048c0162002cb6565b608082015260ff6005880154818116151560a084015260081c16151560c0820152815201930191019091620039be565b6001906020604051916200438c8362002ab1565b85548352838601549260ff8416620043a48162002fc4565b8382015260ff600894851c16620043bb8162002a18565b604082015260028701546060820152620043d8600388016200351c565b6080820152620043eb60048801620036ac565b60a08201528152019301910190916200430d565b6007602060019262004411866200356f565b81520193019101909162003977565b60f81c151581526020013862003933565b92602060019160ff8560f01c16151581520193016200392c565b92602060019160ff8560e81c161515815201930162003923565b92602060019160ff8560e01c16151581520193016200391a565b92602060019160ff8560d81c161515815201930162003911565b92602060019160ff8560d01c161515815201930162003908565b92602060019160ff8560c81c1615158152019301620038ff565b92602060019160ff8560c01c1615158152019301620038f6565b92602060019160ff8560b81c1615158152019301620038ed565b92602060019160ff8560b01c1615158152019301620038e4565b92602060019160ff8560a81c1615158152019301620038db565b92602060019160ff8560a01c1615158152019301620038d2565b92602060019160ff8560981c1615158152019301620038c9565b92602060019160ff8560901c1615158152019301620038c0565b92602060019160ff8560881c1615158152019301620038b7565b92602060019160ff8560801c1615158152019301620038ae565b92602060019160ff8560781c1615158152019301620038a5565b92602060019160ff8560701c16151581520193016200389c565b92602060019160ff8560681c161515815201930162003893565b92602060019160ff8560601c16151581520193016200388a565b92602060019160ff8560581c161515815201930162003881565b92602060019160ff8560501c161515815201930162003878565b92602060019160ff8560481c16151581520193016200386f565b92602060019160ff8560401c161515815201930162003866565b92602060019160ff8560381c16151581520193016200385d565b92602060019160ff8560301c161515815201930162003854565b92602060019160ff8560281c16151581520193016200384b565b92602060019160ff85831c161515815201930162003842565b92602060019160ff8560181c161515815201930162003839565b92602060019160ff8560101c161515815201930162003830565b92602060019160ff8560081c161515815201930162003827565b92602060019160ff8516151581520193016200381e565b916020919350610400600191865460ff81161515825260ff8160081c1615158583015260ff8160101c161515604083015260ff816060828260181c161515818601528282608082828c1c16151581890152828260281c16151560a0890152828260c095828260301c161515878c0152828260381c16151560e08c0152828260401c1615156101008c0152828260481c1615156101208c0152828260501c1615156101408c0152828260581c1615156101608c01521c161515610180890152828260681c1615156101a0890152828260701c1615156101c0890152828260781c1615156101e08901521c161515610200860152828260881c161515610220860152828260901c161515610240860152828260981c161515610260860152828260a01c161515610280860152828260a81c1615156102a0860152828260b01c1615156102c0860152828260b81c1615156102e08601521c16151561030083015260ff8160c81c16151561032083015260ff8160d01c16151561034083015260ff8160d81c16151561036083015260ff8160e01c16151561038083015260ff8160e81c1615156103a083015260ff8160f01c1615156103c083015260f81c15156103e082015201940192018492939162003803565b9080601f83011215620029d357813590620049408262002c61565b9262004950604051948562002b94565b828452602092838086019160051b83010192808411620029d357848301915b848310620049805750505050505090565b82356001600160401b038111620029d3578691620049a48484809489010162002f77565b8152019201916200496f565b35908115158203620029d357565b81601f82011215620029d357803591620049d88362002c61565b92620049e8604051948562002b94565b808452602092838086019260051b820101928311620029d3578301905b82821062004a14575050505090565b8135815290830190830162004a05565b9080601f83011215620029d35781359062004a3f8262002c61565b9262004a4f604051948562002b94565b828452602092838086019160051b83010192808411620029d357848301915b84831062004a7f5750505050505090565b82356001600160401b038111620029d357869162004aa384848094890101620049be565b81520192019162004a6e565b9080601f83011215620029d35781359162004aca8362002c61565b9260409262004adc8451958662002b94565b8185526020938486019185600594851b86010194818611620029d357868101935b86851062004b1057505050505050505090565b84356001600160401b038111620029d357820183603f82011215620029d357888101359062004b3f8262002c61565b9162004b4e8751938462002b94565b808352868b8401918a1b83010191868311620029d35791878c94929593015b81811062004b8657505082935081520194019362004afd565b91938091939562004b9784620029d8565b8152019101918b9391949262004b6d565b9062002c3b604560405180947f496e76616c69642070726f6772616d20616464726573732e204d73672e73656e60208301526403232b91d160dd1b604083015262004bfd815180926020868601910162002e01565b810103602581018552018362002b94565b9062002c3b6040805180947f2c20616e642070726f6772616d206f70657261746f7220616464726573733a20602083015262004c54815180926020868601910162002e01565b810103602081018552018362002b94565b602062002c3b91939293604051948162004c89879351809286808701910162002e01565b820162004c9f8251809386808501910162002e01565b0103808552018362002b94565b1562004cb55750565b60405162461bcd60e51b81526020600482015290819062004cdb90602483019062002e26565b0390fd5b600019811462001e075760010190565b80511562004cfd5760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101562004cfd5760400190565b80516002101562004cfd5760600190565b80516003101562004cfd5760800190565b805182101562004cfd5760209160051b010190565b7f496e76616c696420776974686472617720616d6f756e742e20416d6f756e743a8152600160fd1b602082015260210190565b600f62002c3b916020949360405195869262004dbe62004db083860162004d5b565b918281519485920162002e01565b016e0161030b732103130b630b731b29d1608d1b815262004de9825180936020878501910162002e01565b010360101981018552018362002b94565b601962002c3b916020949360405195869262004e1c62004db083860162004d5b565b01780161030b732103bb4ba34323930bbb0b136329031b0b9b41d1603d1b815262004e51825180936020878501910162002e01565b010360061981018552018362002b94565b9062004e6e8262002c61565b62004e7d604051918262002b94565b828152809262004e90601f199162002c61565b0190602036910137565b611f48805482101562004cfd5760005260206000200190600090565b611f46805482101562004cfd5760005260206000200190600090565b611f41805482101562004cfd5760005260206000200190600090565b613f02805482101562004cfd5760005260206000200190600090565b611f4a805482101562004cfd5760005260206000200190600090565b613efe805482101562004cfd5760005260206000200190600090565b613f00805482101562004cfd5760005260206000200190600090565b805482101562004cfd5760005260206000200190600090565b8181029291811591840414171562001e0757565b919082549060031b91821b91600019901b1916179055565b81811062004faf575050565b6000815560010162004fa3565b600160401b811162002a9b57611f489081549080835581811062004fdf57505050565b62002c3b926000526020600020918201910162004fa3565b600160401b811162002a9b57611f469081549080835581811062004fdf57505050565b805460008255806200502a575050565b62002c3b9160005260206000209081019062004fa3565b600160401b811162002a9b57613efe9081549080835581811062004fdf57505050565b600160401b811162002a9b57613f009081549080835581811062004fdf57505050565b611fb5805460008255806200502a575050565b90600160401b811162002a9b5781549080835581811062004fdf57505050565b9190828111620050cb576001920390565b50600091508190565b8115620050df570490565b634e487b7160e01b600052601260045260246000fd5b6000908072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8082101562005260575b506904ee2d6d415b85acef8160201b8083101562005250575b50662386f26fc100008083101562005240575b506305f5e1008083101562005230575b506127108083101562005220575b5060648210156200520f575b600a8092101562005204575b60019081602181860195620051918762002f5b565b96620051a1604051988962002b94565b808852620051b2601f199162002f5b565b01366020890137860101905b620051cb575b5050505090565b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304918215620051fe57919082620051be565b620051c4565b91600101916200517c565b919060646002910491019162005170565b6004919392049101913862005164565b6008919392049101913862005156565b6010919392049101913862005146565b6020919392049101913862005133565b6040935081049150386200511a565b601e62002c3b91602094936040519586926200529162004db083860162004d5b565b017f2c20616e6420776974686472617761626c65206469766964656e64733a2000008152620052ca825180936020878501910162002e01565b010360011981018552018362002b94565b600382101562002a235752565b60405190620052f78262002b3f565b60405182620053068262002b5b565b610c8036833752565b906200531b8262002c61565b6040906200532c8251918262002b94565b83815280936200533f601f199162002c61565b019160005b838110620053525750505050565b6020908251620053628162002acd565b6000815282600081830152606080868401526000818401526080830152600060a0830152600060c083015282860101520162005344565b620053a5815462002c79565b9081620053b0575050565b81601f60009311600114620053c3575055565b908083918252620053e4601f60208420940160051c84016001850162004fa3565b5555565b8054906000815581620053f9575050565b6000526020600020908101905b81811062005412575050565b806200542060019262005399565b0162005406565b90600160401b811162002a9b578154918181558282106200544757505050565b600052602060002091820191015b81811062005461575050565b806200546f60019262005399565b0162005455565b805490600081558162005487575050565b6000526020600020908101905b818110620054a0575050565b80620054ae6001926200501a565b0162005494565b90600160401b811162002a9b57815491818155828210620054d557505050565b600052602060002091820191015b818110620054ef575050565b80620054fd6001926200501a565b01620054e3565b8054600091828155816200551757505050565b6001600160fd1b0382168203620055a45782526020822091600391821b8301925b838110620055465750505050565b808260089255826001820155826002820155620055658482016200501a565b6200557360048201620053e8565b620055816005820162005476565b6200558f6006820162005476565b6200559d6007820162005399565b0162005538565b634e487b7160e01b83526011600452602483fd5b600160401b821162002a9b57805490828155818310620055d757505050565b6001600160fd1b03828116830362001e07578316830362001e0757600090815260208120600392831b810193831b015b838110620056155750505050565b808260089255826001820155826002820155620056348482016200501a565b6200564260048201620053e8565b620056506005820162005476565b6200565e6006820162005476565b6200566c6007820162005399565b0162005607565b51600681101562002a235790565b90600681101562002a235760ff80198354169116179055565b90620056a68162002fc4565b60ff80198354169116179055565b90620056c08162002a18565b61ff0082549160081b169061ff001916179055565b9190601f8111620056e557505050565b62002c3b926000526020600020906020601f840160051c8301931062005714575b601f0160051c019062004fa3565b909150819062005706565b81519192916001600160401b03811162002a9b576200574b8162005744845462002c79565b84620056d5565b602080601f83116001146200578a5750819293946000926200577e575b50508160011b916000199060031b1c1916179055565b01519050388062005768565b90601f198316958460005282600020926000905b888210620057d957505083600195969710620057bf575b505050811b019055565b015160001960f88460031b161c19169055388080620057b5565b806001859682949686015181550195019301906200579e565b9060ff801983541691151516179055565b9061ff00825491151560081b169061ff001916179055565b8151600681101562002a235762005833908262005681565b602082015160018201556002810160408301516020815191620058578385620055b8565b01916000526020600020916000905b828210620058b857505050509060c0600562002c3b9360608401516003820155620058996080850151600483016200571f565b0191620058ad60a0820151151584620057f2565b015115159062005803565b805180518555620058f860018601620058e16020840151620058da8162002fc4565b826200569a565b604083015190620058f28262002a18565b620056b4565b60608101516002860155608081015180519060038701906001600160401b03831162002a9b576020906200592d84846200509a565b0190600052602060002060005b83811062005bd9575050505060a001518051805190600487019060209062005963848462005427565b01906000526020600020906000905b83821062005bb957505050506005850160208201516020815191620059988385620054b5565b019160005260206000206000925b82841062005b5557505050506006850160408201516020815191620059cc8385620054b5565b019160005260206000206000925b82841062005ae85750505050606001518051906001600160401b03821162002a9b5762005a1a8262005a10600789015462002c79565b60078901620056d5565b602090601f831160011462005a6d57928260089360209360019660009262005a61575b5050600019600383901b1c191690851b1760078801555b0194019101909262005866565b01519050388062005a3d565b906007870160005260206000209160005b601f198516811062005acf575083602093600196938793600897601f1981161062005ab5575b505050811b01600788015562005a54565b015160001960f88460031b161c1916905538808062005aa4565b9192602060018192868501518155019401920162005a7e565b80518051906001600160401b03821162002a9b5760209062005b0b83866200509a565b0183600052602060002060005b83811062005b37575050505060016020819201920193019290620059da565b82516001600160a01b03168183015560209092019160010162005b18565b80518051906001600160401b03821162002a9b5760209062005b7883866200509a565b0183600052602060002060005b83811062005ba4575050505060016020819201920193019290620059a6565b60019060208451940193818401550162005b85565b600160208262005bcc839451876200571f565b0193019101909162005972565b6001906020845194019381840155016200593a565b60409081519162005bff8362002b78565b60018352829160005b60208082101562005c725783516020929162005c248262002ab1565b60008252600081830152600086830152606060008184015280608084015286519062005c508262002a7f565b808252808383015280888301528082015260a083015282880101520162005c08565b505091925050565b611f43805482101562004cfd576000526006602060002091020190600090565b613efb805482101562004cfd576000526006602060002091020190600090565b611f42805482101562004cfd576000526006602060002091020190600090565b613efa805482101562004cfd576000526006602060002091020190600090565b611f428054600160401b81101562002a9b5762005d1d9160018201905562005cba565b91909162005d305762002c3b916200581b565b634e487b7160e01b600052600060045260246000fd5b611f438054600160401b81101562002a9b5762005d1d9160018201905562005c7a565b613efb8054600160401b81101562002a9b5762005d1d9160018201905562005c9a565b613efa8054600160401b81101562002a9b5762005d1d9160018201905562005cda565b1562005db757565b60405162461bcd60e51b815260206004820152603760248201527f73756d4469766964656e64576569676874466f72546f6b656e436c6173733a206044820152766469766964656e64576569676874206f766572666c6f7760481b6064820152608490fd5b6103e881101562004cfd5762005e4a8162005e436002620032d29460031b01549162005f36565b9062005eb0565b919062005daf565b6103e881101562004cfd5762005e4a8162005e43611fba620032d29460031b01549162005fe5565b90811562005ea757606462005e938184029384620050d4565b0362005e9f5760019190565b600091508190565b60019150600090565b9190821562005ec85762005e938184029384620050d4565b5060019150600090565b1562005eda57565b60405162461bcd60e51b815260206004820152602e60248201527f746f74616c546f6b656e73506572546f6b656e436c6173733a20746f74616c5460448201526d6f6b656e73206f766572666c6f7760901b6064820152608490fd5b6103e8811015908162004cfd57600390811b906004928383019182549260009582879601935b85871062005f6e575050505050505090565b97969091929394959762005fd05762005fc48862005fbc62005f9662000faa9a9b8762004f5e565b905490881b1c6001600160a01b031660009081526020899052604081205490946200608f565b999062005ed2565b95949392919062005f5c565b603282634e487b7160e01b6000525260246000fd5b6103e8811015908162004cfd5790600391821b90611fbc820190815490600094611fbb869501915b8386106200601e5750505050505090565b9590919293949562004cfd576200607186620060696200604362000faa998962004f5e565b905490861b1c6001600160a01b031660009081526020879052604081205490946200608f565b989062005ed2565b94939291906200600d565b906001820191821062005e9f5760019190565b9190820191821062005e9f5760019190565b15620060a957565b60405162461bcd60e51b815260206004820152603360248201527f73756d566f74696e67576569676874466f72546f6b656e436c6173733a20766f60448201527274696e67576569676874206f766572666c6f7760681b6064820152608490fd5b6103e881101562004cfd57620061318162005e436001620032d29460031b01549162005f36565b9190620060a1565b6103e881101562004cfd57620061318162005e43611fb9620032d29460031b01549162005fe5565b611faf54620061736200224862033044565b9190506200618062033108565b5060009081925b6103e88410620061a4575b6200619f935004620061de565b905090565b9160ff60078560031b01541615620061d75783620022e4620061d092620022dd62000faa969762005e1c565b9262006187565b9162006192565b908015620061f657620061f191620050d4565b600191565b5050600090600090565b9190820180921162001e0757565b9190820391821162001e0757565b906107b2906301e1853e80840483810180821162001e07576001820181811162001e0757604583019082821162001e075760646200625f92049060021c6200620e565b9561017183019682881162001e075762006280906101908099049062006200565b9084840294848604148415171562001e075762015180948583029280840487149015171562001e0757620062c092620062b99162006200565b906200620e565b91600495869108159586620064df575b506040516101a081016001600160401b03811182821017620064ca57604052600c9687825261018080366020850137601f91826200630e8562004cef565b5215620064c05760ff601d5b16620063268462004d13565b5281620063338462004d24565b52601e620063418462004d35565b528251881015620064ab578160a0840152825160051015620064ab57601e60c0840152825160061015620064ab578160e0840152825160071015620064ab5781610100840152825160081015620064ab57601e610120840152825160091015620064ab57816101408401528251600a1015620064ab57601e6101608401528251600b1015620064ab57820152600096905b81881062006426575b50508282049460018601809611620064115760018701809711620064115750949392603c80610e10809585060494840604920690565b601190634e487b7160e01b6000525260246000fd5b90969262006435848362004d46565b51858102908082048714901517156200648e578110620064a3576200645b848362004d46565b5190858202918083048714901517156200648e5762006486916200647f916200620e565b9362004cdf565b9690620063d2565b601188634e487b7160e01b6000525260246000fd5b9296620063db565b603288634e487b7160e01b6000525260246000fd5b60ff601c6200631a565b604187634e487b7160e01b6000525260246000fd5b909550606486061590811591620064fa575b509438620062d0565b905085061538620064f1565b90815181101562004cfd570160200190565b908151815111620065cf576000905b6200653683518251906200620e565b8211620065c75760019260005b8251811015620065bc576001600160f81b0319806200656e62006567848862006200565b8562006506565b5116906200657d838662006506565b5116036200659657620065909062004cdf565b62006543565b5092509060005b620065b457620065ad9062004cdf565b9062006527565b505050600190565b50929190916200659d565b505050600090565b5050600090565b611f4680549190600160401b83101562002a9b578262001a0891600162002c3b9501905562004eb6565b611f4a80549190600160401b83101562002a9b578262001a0891600162002c3b9501905562004f0a565b611fb5805490600160401b82101562002a9b576001820180825582101562004cfd576000908152602090200180546001600160a01b0319166001600160a01b03909216919091179055565b611fb3805490600160401b82101562002a9b576001820180825582101562004cfd576000908152602090200180546001600160a01b0319166001600160a01b03909216919091179055565b611f4180549190600160401b83101562002a9b578262001a0891600162002c3b9501905562004ed2565b60405190620066f98262002b78565b60188252772a343290383937b3b930b69034b99032bc32b1baba32b21760411b6020830152565b604051906200672f8262002b06565b603a82527930b33a32b9103b37ba34b7339030b7321030b8383937bb30b61760311b6040837f5468652070656e64696e672070726f6772616d2069732065786563757465642060208201520152565b90600091825b60208083019081518051871015620069155781620067a788620067af9362004d46565b510162007387565b6026928382101562002a2357601a9182036200686d5787620067d2915162004d46565b5192828401519081101562002a2357036200682b5750936200681c6200682492620068146200680d60a0604062000faa9a0151015162004cef565b5162004cef565b51906200608f565b959062007395565b9262006784565b6064906040519062461bcd60e51b82526004820152601b60248201527a2a34329037b831b7b2329034b9903737ba102820acafa1a0a9a41760291b6044820152fd5b929190506200688681620067a789869a979a5162004d46565b8281101562002a2357601403620068bf575050906200681c62000faa95620022dd620068b88462006824965162004d46565b51620073e2565b620068d190620067a785855162004d46565b9081101562002a2357601514620068ef575b50620068249062004cdf565b906200681c6200690e95620022dd620068b88462006824965162004d46565b90620068e3565b5050509092508034106000146200698b5760405162461bcd60e51b815260206004820152603760248201527f546865207061796d656e74206973206e6f7420656e6f7567682e205468652074604482015276037ba30b6103830bcb6b2b73a1039b437bab6321031329604d1b6064820152608490fd5b8034116200720c575b50613f739182549260ff841693620069ac8562002a18565b600194808603620069e657505050620069dc919250620069d6620069d08262007479565b62007550565b620075da565b620032d2620066ea565b620069f18162002a18565b600281148080620071ff575b1562006e285750505062006a11826200748e565b1562006de95762006a22826200748e565b1562006dad5762006a5b90602080930190600260ff8560018060a01b0362006a4b865162004cef565b5151169460409687915162004cef565b510151015192541662006a6e8162002a18565b0362006d6d5781600052613f778085528360002092613f7880549485600052875260ff86600020541662006d2f5783519480600052613f7693848952600396878960002001540362006cc95783600052885286600020906000528752856000208960ff19825416179055886000905b62006b27575b505050505050742a3432903b37ba329034b99032bc32b1baba32b21760591b9192935062006b1062032533565b519162006b1d8362002b78565b6015835282015290565b845181101562006cc35786825480600052858a5262006b4c8389846000200162004f5e565b905490891b1c908a84888b62006b63838d62004d46565b511562006c2157505050505062006bc662006ba685549283600052888d52620022dd62006b9887600480986000200162004f5e565b9054908d1b1c91896203241d565b9092600052878c5262006bbf85858d6000200162004f5e565b9062004f8b565b1562006bdf575062006bd89062004cdf565b8962006add565b875162461bcd60e51b8152908101899052601c60248201527b766f74696e6720666f7220706f776572596573206f766572666c6f7760201b6044820152606490fd5b9062006c5e62006c7096620022dd87999462006bbf979860005284895262006c5187600580986000200162004f5e565b9054911b1c918d6203241d565b959097600052528c6000200162004f5e565b1562006c815762006bd89062004cdf565b865162461bcd60e51b815260048101899052601b60248201527a766f74696e6720666f7220706f7765724e6f206f766572666c6f7760281b6044820152606490fd5b62006ae3565b875162461bcd60e51b8152600481018a9052603960248201527f746865206e756d626572206f6620766f74657320646f6573206e6f74206d6174604482015278636820746865206e756d626572206f6620706f6c696369657360381b6064820152608490fd5b855162461bcd60e51b81526004810188905260176024820152761d9bdd195c881a185cc8185b1c9958591e481d9bdd1959604a1b6044820152606490fd5b825162461bcd60e51b8152600481018590526019602482015278766f74696e67206973206e6f7420696e2070726f677265737360381b6044820152606490fd5b60405162461bcd60e51b8152602060048201526014602482015273496e76616c696420766f74652070726f6772616d60601b6044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2103b37ba34b73390383937b3b930b69760491b6044820152606490fd5b62006e3882979495969762002a18565b60038214918280620071f2575b1562006ec75750505050505062006e5c81620074f5565b1562006e775762006e6d906202f2b7565b620032d262006720565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c696420657865637574696e672070656e64696e672070726f677261604482015261369760f11b6064820152608490fd5b62006ed28162002a18565b8180620071e4575b80620071d7575b156200710157505050509060ff9062006ef962032745565b54169062006f078262002a18565b810362006fc5575062006f1a8162007479565b1562006f345780620069d6620069d0620069dc9362007479565b60405162461bcd60e51b815260206004820152605f60248201527f54686520766f74696e672069732072656a656374656420616e64206e6f77204460448201527f41524320697320696e2069646c652073746174652e2054686520696e7075742060648201527f70726f6772616d206973206e6f7420612076616c69642070726f6772616d2e00608482015260a490fd5b8062006fd360039262002a18565b146200700c57505b60405162006fe98162002b78565b6013815272283937b3b930b6903a32b936b4b730ba32b21760691b602082015290565b6200701781620074f5565b15620070285762006e6d906202f2b7565b60405162461bcd60e51b815260206004820152609960248201527f54686520766f74696e672069732070617373656420616e64206e6f772044415260448201527f4320697320696e20657865637574696e672070656e64696e672073746174652e60648201527f2054686520696e7075742070726f6772616d206973206e6f7420612076616c6960848201527f6420455845435554455f50454e44494e475f50524f4752414d20746f2065786560a48201527831baba32903a3432903832b73234b73390383937b3b930b69760391b60c482015260e490fd5b6200710c8162002a18565b8215620071c2575b505080620071b4575b6200712c575050505062006fdb565b60ff19161790556200713e8162007479565b15620071585780620069d6620069d0620069dc9362007479565b60405162461bcd60e51b815260206004820152602e60248201527f5b4572726f72203030335d5468652070726f6772616d206973206e6f7420612060448201526d3b30b634b210383937b3b930b69760911b6064820152608490fd5b50613f72544210156200711d565b620071cf91925062002a18565b388062007114565b50613f7254421062006ee1565b50613f715442101562006eda565b50613f7254421062006e45565b50613f71544210620069fd565b60018060a01b039081845116600052611f4590816020526040600020541562007302575b6200723c9034620050ba565b9015620072be576200725f9083865116600052826020526040600020546200608f565b9290156200727d578451166000526020526040600020553862006994565b60405162461bcd60e51b81526020600482015260196024820152782a3432903732bb903130b630b731b29037bb32b9333637bb9760391b6044820152606490fd5b60405162461bcd60e51b815260206004820152601c60248201527b2a3432903830bcb6b2b73a103932ba3ab9371037bb32b9333637bb9760211b6044820152606490fd5b611f4654939291906000805b86811062007344575b506200723c92939495501562007330575b905062007230565b6200733e84875116620065d6565b62007328565b84620073508262004eb6565b919054818b51169260031b1c161462007374576200736e9062004cdf565b6200730e565b5093945084935060016200723c62007317565b51602681101562002a235790565b156200739d57565b60405162461bcd60e51b815260206004820152601f60248201527f54686520746f74616c207061796d656e7420697320746f6f206c617267652e006044820152606490fd5b906000805b6040840160a0620073fc818351015162004d13565b51518410156200747157926200681c62007461604094620074598562007451866200743f8b620074468362000faa9f9e6200743f90620074679e51015162004d13565b5162004d46565b519451015162004d24565b519062005eb0565b929062007395565b6200608f565b91929050620073e7565b509093505050565b6020015151156200748957600190565b600090565b602001516001815103620074b257620074ab620032d29162004cef565b51620074b8565b50600090565b6020810151602681101562002a2357602003620074b2576040015160a081015151620074b25760c081015151620074b25751516200748957600190565b602001516001815103620074b25762007512620032d29162004cef565b516020810151602681101562002a2357602103620074b2576040015160a081015151620074b25760c081015151620074b25751516200748957600190565b156200755857565b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c69642070726f6772616d60881b6044820152606490fd5b60809060208152602a60208201527f5468652070726f6772616d2069732064656e6965642062792074686520706c7560408201526967696e2073797374656d60b01b60608201520190565b620075e58162015182565b5162014c9357600681101562002a23576003811462014c3a5780620076425760405162461bcd60e51b8152602060048201526016602482015275151a19481c1c9bd9dc985b481a5cc81a5b9d985b1a5960521b6044820152606490fd5b600481036200b0db5750600080611f4a54905b8181106200b094575b5050156200b078575b60005b60209081830151918251821015620076cf57620076c181611f49620076a7620076a162000faa95620067a788620076c99a62004d46565b62033353565b9160018060a01b03885116600052526040600020620242c3565b429162004f8b565b6200766a565b50505060005b60208083015180518310156200771d57620076fa91620067a784620076a19362004d46565b90606482101562004cfd5762007717914290611f4b015562004cdf565b620076d5565b505050906000905b602083015180518310156200b0725782620077409162004d46565b516020810180516026908181101562002a2357156200b02f5781518181101562002a23576001036200798e5750506040809101906200778460c08351015162004cef565b5192620077a660a06200779b818651015162004cef565b519451015162004d13565b5195620077b785518551146202df8a565b620077c685518851146202dff0565b60005b85518110156200790c57620077df818662004d46565b516103e8908181101562004cfd57600160ff6007620078079360031b0154161515146202e052565b62007813828a62004d46565b5162007820838862004d46565b51908282101562004cfd5760066200783e9260031b0154906200608f565b906200784b848962004d46565b51918383101562004cfd576006620078689360031b01556202e0aa565b62007874828a62004d46565b519062007882838862004d46565b518181101562004cfd576001600160a01b039392620078c29160039086620078ab878e62004d46565b5116600052811b016020528760002054906200608f565b620078ce848a62004d46565b519283101562004cfd57600362000faa936200790696620078f0878e62004d46565b5116600052811b0160205287600020556202e109565b620077c9565b5093926200792991929650620079229062032f53565b9262032e37565b945192620079378462002b3f565b60008452600036813760005b835181101562007971578062000faa620079626200796b938762004d46565b51878a62032a46565b62007943565b509450926020925062007985915062004cdf565b91905062007725565b81518181101562002a235760020362007c255750506040809101805192835195620079d3620079c260a08097015162004cef565b519562007446818651015162004d13565b5193875186510362007bd257875184510362007b7e57875185510362007b27575060005b855181101562007b115762007a0d818762004d46565b51906103e8918281101562004cfd5762007a3360ff6007809360031b015416156202e162565b62007a3f828962004d46565b518381101562004cfd5760031b01805460ff1916600117905562007a64818a62004d46565b5162007a71828962004d46565b51908382101562004cfd57600562007a8d9260031b016200571f565b62007a99818662004d46565b5162007aa6828962004d46565b518381101562004cfd5760031b6001015562007ac3818762004d46565b5162007ad0828962004d46565b518381101562004cfd5760031b6002015562007aed818862004d46565b519182101562004cfd576000600662007b0b9360031b015562004cdf565b620079f7565b5095509390506020925062007985915062004cdf565b5162461bcd60e51b815260206004820152603c6024820152600080516020620337ec83398151915260448201527b1b911a5d9a59195b9915d95a59da1d081a5cc81b9bdd08195c5d585b60221b6064820152608490fd5b5162461bcd60e51b81526020600482015260396024820152600080516020620337ec8339815191526044820152781b959bdd1a5b99d41bddd95c881a5cc81b9bdd08195c5d585b603a1b6064820152608490fd5b5162461bcd60e51b81526020600482015260386024820152600080516020620337ec8339815191526044820152771b925b99195e105c9c985e481a5cc81b9bdd08195c5d585b60421b6064820152608490fd5b819593949295518181101562002a235760030362008221575050604084019062007c5460c08351015162004cef565b519362007c6b60a06200779b818651015162004cef565b519362007c80865185511462000fa3620331b7565b62007c93865186511462000fa3620331b7565b60005b865181101562007cfc5762007cac818662004d46565b51906103e882101562004cfd57600362007cf69260018060a01b038b5116600052811b0160205262000faa60406000205462007ce9838a62004d46565b51111562000fa3620332bb565b62007c96565b50909493919460005b855181101562007e305762007d1b818662004d46565b51906103e88083101562004cfd57600360018060a01b0393848c5116600052811b0160205262007d5e60406000205462007d56848962004d46565b5190620050ba565b9062007d6b848a62004d46565b51918383101562004cfd57600362007d9a93878f5116600052811b0160205260406000205562000fa3620332bb565b62007da6828862004d46565b518181101562004cfd576003908462007dc0858c62004d46565b5116600052811b0160205262007de160406000205462006814848962004d46565b62007ded848a62004d46565b519283101562004cfd57600362000faa9362007e2a9662007e0f878e62004d46565b5116600052811b0160205260406000205562000fa362033320565b62007d05565b5091509162007e4762007e4e919695949662032f53565b9562032e37565b926040519462007e5e8662002b78565b6001865260203681880137516001600160a01b031662007e7e8662004cef565b526000905b86518210156200820c5762007e99828862004d46565b516104c05262007eaa855162004e62565b9660009462007eba885162004e62565b610ae0528594865b885181101562007f91578a8962007ef26001600160a01b0362007ee6858462004d46565b51166104c05162032d3b565b158062007f4b575b62007f13575b505062007f0d9062004cdf565b62007ec2565b9862007f409162001ac782859c62007f3762007f0d9760018060a01b039262004d46565b51169262004d46565b9790508a8962007f00565b5050506103e86104c051101562004cfd576001600160a01b0362007f70828b62004d46565b511660005260036104c051811b016020528a89604060002054151562007efa565b509098949897969291939760005b885181101562008033576103e86104c051101562004cfd576001600160a01b0362007fcb828b62004d46565b511660005260036104c051811b016020526040600020541562007ffa575b62007ff49062004cdf565b62007f9f565b9962007ff4906200802a906001600160a01b03620080198e8d62004d46565b511662001ac782610ae05162004d46565b9a905062007fe9565b5098509694939291956104c0516103e8811015806107405262004cfd5760031b60040154966200806e62008068878a62006200565b62004e62565b996000998a6104e0525b6107405162004cfd576104e0518a8110156200812d57620080ad620080ca9160006107405260046104c05160031b0162004f5e565b9054610ae05160039290921b1c6001600160a01b03169062032dea565b15620080e9575b620080df6104e05162004cdf565b6104e05262008078565b99808c62001ac762008126936200810d6104e05160046104c05160031b0162004f5e565b905460039190911b1c6001600160a01b03169262004d46565b99620080d1565b509a939794969299919850946000915b838310620081d257505050506107405162004cfd578051906001600160401b03821162002a9b576020906200817c8360046104c05160031b016200509a565b0160046104c05160031b01600052602060002060005b838110620081b45750505050620081a99062004cdf565b909295919562007e83565b82516001600160a01b03168183015560209092019160010162008192565b6200820590620081fe906001600160a01b03620081f0868662004d46565b511662001ac7828962004d46565b9262004cdf565b916200813d565b91945050620079859194506020925062004cdf565b819593949295518181101562002a2357600403620084a9575050604080920160c0946200826262008256878451015162004cef565b51968351015162004d13565b51946200827960a06200779b818651015162004cef565b51936200828e885188511462000fa3620331b7565b620082a1885185511462000fa3620331b7565b620082b4885186511462000fa3620331b7565b60005b88518110156200831c57620082cd818662004d46565b51906103e882101562004cfd5762008316916003906001600160a01b03620082f6848e62004d46565b5116600052811b0160205262000faa886000205462007ce9838a62004d46565b620082b7565b50909691959294939660005b83518110156200845d576200833e818862004d46565b51906103e8918281101562004cfd576001600160a01b03906003908262008366858a62004d46565b5116600052811b01602052620083878b62007d56848b600020549262004d46565b9062008394848c62004d46565b51918583101562004cfd576003620083cd9385620083b3888d62004d46565b5116600052811b016020528a6000205562000fa3620332bb565b620083d9828a62004d46565b518381101562004cfd5760039082620083f3858b62004d46565b5116600052811b01602052620084148b62006814848b600020549262004d46565b91905062008423838b62004d46565b519384101562004cfd57620084579360039162008441858b62004d46565b5116600052811b01602052876000205562004cdf565b62008328565b50946200848092975062007e4791939450620084799062032f53565b9362032e37565b9260005b835181101562007971578062000faa62007962620084a3938762004d46565b62008484565b8195949593929351908082101562002a23576005918203620084db575050506020919262000faa62007985926202ec1a565b82518181101562002a23576006036200874c575050509060408092016200850760c08251015162004cef565b51946200852960a06200851e818551015162004cef565b519351015162004d13565b51928651835103620086fb578651845103620086af5760005b8751811015620085a75762008558818562004d46565b51906103e882101562004cfd57620085a1916003906001600160a01b0362008581848d62004d46565b5116600052811b0160205262000faa876000205462007ce9838962004d46565b62008542565b509092919260005b87518110156200865b57620085c5818662004d46565b516103e88082101562004cfd576001600160a01b03929160039084620085ec858e62004d46565b5116600052811b016020526200860c886000205462007d56848962004d46565b62008618848a62004d46565b519283101562004cfd57600362000faa9362008655966200863b8f889062004d46565b5116600052811b01602052896000205562000fa3620332bb565b620085af565b50959262008670919250620079229062032f53565b9251946200867e8662002b3f565b60008652600036813760005b835181101562007971578062000faa62007962620086a9938762004d46565b6200868a565b845162461bcd60e51b8152602060048201526030602482015260008051602062033aec83398151915260448201526f1b9d1cc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b845162461bcd60e51b815260206004820152603560248201526000805160206203372c8339815191526044820152741b90db185cdcd95cc81a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b82518181101562002a23576007036200889b575050506040809101936200877860c08651015162004cef565b51926200878a60a08751015162004cef565b5195515191620087a2855188511462000fa3620331b7565b60005b855181101562007b1157620088959062000faa6001600160a01b03826002886200887d8e620088728e620088688f89620087e08a8562004d46565b51166000526200881c896200881481611f409a8b6020526200880e60ff8760002054161562000fa362033288565b62004d46565b519662004d46565b51968a6200885283519b8c96620088338862002a7f565b600188526060602089019860008a528781019b8c52019b8c5262004d46565b51166000526020526000209751151588620057f2565b5115158662005803565b51600185016200571f565b519101556200888d838a62004d46565b5116620066c0565b620087a5565b82519596959394928185101562002a235760089485036200899257505050620088cd60c0604080950151015162004cef565b519360005b85518110156200897d5762008977906001600160a01b0380620088f6838a62004d46565b5116600052611f4090816020526200894c60ff620089236001828c600020541615151462000fa3620331e7565b8262008930868d62004d46565b5116600052836020528960002054891c161562000fa36203324f565b62008958838a62004d46565b51166000526020528560002061010061ff001982541617905562004cdf565b620088d2565b50949093506020925062007985915062004cdf565b80518281101562002a235760090362008a6657505050620089bc60c0604080950151015162004cef565b519360005b85518110156200897d5762008a6090866001600160a01b0380620089e6848462004d46565b511660005262008a396001898362008a1b87611f4097886020526200880e8660ff8097600020541615151462000fa3620331e7565b5116600052846020528a600020548a1c1615151462000fa36203321a565b62008a45838a62004d46565b51166000526020528560002061ff0019815416905562004cdf565b620089c1565b809192939597969450518281101562002a2357600a0362008b445750505060408094019162008aab60a062008aa060c08651015162004cef565b519451015162004cef565b519162008ac0845184511462000fa3620331b7565b60005b8451811015620079715762008b3e906001600160a01b038062008ae7838962004d46565b5116600052611f408060205262008b0e600160ff8c600020541615151462000fa3620331e7565b62008b1a838862004d46565b519162008b28848a62004d46565b5116600052602052600289600020015562004cdf565b62008ac3565b80969496518281101562002a2357600b0362008c125750505060408092019362008b7360c08651015162004cef565b519451519162008b8b865184511462000fa3620331b7565b60005b8651811015620079715762008c0c9062000faa6001600160a01b038062008bb6848c62004d46565b5116600052611f408060205262008bdd600160ff8b600020541615151462000fa3620331e7565b62008be9848962004d46565b519162008bf7858d62004d46565b5116600052602052600188600020016200571f565b62008b8e565b80969394929596518281101562002a2357600c0362008d1257505060400160609182825101519362008c44856202d698565b60005b855181101562008cfc5760c062008c6382878751015162004d46565b5101511562008cbf5762008c8762008c8082878751015162004d46565b5162005cfa565b611f425460001981019190821162001e07578762008ca962008cb99362005cba565b5001805460ff1916905562004cdf565b62008c47565b62008cda62008cd382878751015162004d46565b5162005d46565b611f425460001981019190821162001e07578762008ca962008cb99362005c7a565b5095915093506020925062007985915062004cdf565b809695949396518281101562002a2357600d0362008e3657505060400193602062008d4260a08751015162004cef565b51955101519162008d5786518451146202dd8c565b60005b865181101562007971578062008d7562008de5928662004d46565b511562008deb5762008d9862008d8c828a62004d46565b51611f4254116202de15565b62008dc160ff8762008db662008daf858d62004d46565b5162005cba565b50015416156202de6d565b8562008dd262008daf838b62004d46565b5001805460ff1916600117905562004cdf565b62008d5a565b62008e0762008dfb828a62004d46565b51611f4354116202de15565b62008e2560ff8762008db662008e1e858d62004d46565b5162005c7a565b8562008dd262008e1e838b62004d46565b80518281101562002a2357600e0362008ef457505060400193602062008e6160a08751015162004cef565b51955101519162008e7686518451146202dd8c565b60005b865181101562007971578062008e9462008ea0928662004d46565b5162008ea65762004cdf565b62008e79565b62008ec262008eb6828a62004d46565b51611f4254116202dece565b62008ee360ff8762008ed962008daf858d62004d46565b500154166202df27565b8562008ca962008daf838b62004d46565b809693949596518281101562002a2357600f0362008fbf57505060400160609182825101519362008f25856202d698565b60005b855181101562008cfc5760c062008f4482878751015162004d46565b5101511562008f895762008f6162008c8082878751015162004d46565b611f425460001981019190821162001e07578762008dd262008f839362005cba565b62008f28565b62008f9d62008cd382878751015162004d46565b611f425460001981019190821162001e07578762008dd262008f839362005c7a565b8091929394969550518281101562002a235760100362009064575050604001519062008ff460a0608084015193015162004cef565b519362009009835186511462000fa3620331b7565b60005b835181101562009051578062000faa6200902b6200904b938762004d46565b51620090378162002fc4565b62009043838a62004d46565b51906202d55c565b6200900c565b5093509160209150620079859062004cdf565b80959295518281101562002a2357601103620092ed575050906040809401916200909960a062008aa060c08651015162004cef565b5191620090aa84518451146202d510565b60005b845181101562009122576200911c9062000faa6001600160a01b0380620090d5848a62004d46565b5116600052611f4580602052620090f68b6000205462006814868b62004d46565b91909262009105868c62004d46565b51166000526020528a6000205562000fa36203316d565b620090ad565b509394509162009133915062032e37565b90611f46928354946200914c6200806885518862006200565b91600093845b888110620092ad575060005b865181101562009205576000805b8a8110620091b6575b50156200918e575b620091889062004cdf565b6200915e565b946200918890620091ad906001600160a01b03620081f0898b62004d46565b9590506200917d565b620091c18162004eb6565b90546001600160a01b0360039290921b1c811690620091e1858c62004d46565b511614620091fa57620091f49062004cdf565b6200916c565b505060013862009175565b50965094909350620092178362004e62565b805191906001600160401b03831162002a9b57602090620092388462004ff7565b0190600052602060002060005b8381106200928f575050505060005b8281106200926c575050506200798560209162004cdf565b620092899062000faa6001600160a01b03620019fb838662004d46565b62009254565b82516001600160a01b03168183015560209092019160010162009245565b94620092e0620092e791620092c28862004eb6565b905460039190911b1c6001600160a01b031662001ac7828962004d46565b9562004cdf565b62009152565b80518281101562002a23576012036200955c5750506040809401916200931e60a062008aa060c08651015162004cef565b51916200932f84518451146202d510565b60005b845181101562009381576200937b9062000faa6001600160a01b03806200935a848a62004d46565b5116600052611f4580602052620090f68b6000205462007d56868b62004d46565b62009332565b509491509291620093929062032e37565b90611f468054620093a38162004e62565b9260009485925b808410620094575750505050620093c18362004e62565b805191906001600160401b03831162002a9b57602090620093e28462004ff7565b0190600052602060002060005b83811062009439575050505060005b82811062009416575050506200798560209162004cdf565b620094339062000faa6001600160a01b03620019fb838662004d46565b620093fe565b82516001600160a01b031681830155602090920191600101620093ef565b9297600097929597949194998a5b86518110156200954a576200947a8b62004eb6565b90546001600160a01b0360039290921b1c8116906200949a838a62004d46565b511614620094b357620094ad9062004cdf565b62009465565b509950976001979592979491945b806200951a575b15620094e057620094d99062004cdf565b92620093aa565b9562009513620094d991620094f58962004eb6565b905460039190911b1c6001600160a01b031662001ac7828a62004d46565b9662004cdf565b50620095268162004eb6565b60018060a01b0391549060031b1c16600052611f45602052826000205415620094c8565b509998909897959297949194620094c1565b80959295518281101562002a2357601303620095bd57505060408091015101519260005b8451811015620095ac578062000faa6200959f620095a6938862004d46565b516202f24b565b62009580565b509250906200798560209162004cdf565b8051918083101562002a235760149283036200976057505050604080910190620095ec60c08351015162004cef565b51926200960360a06200779b818651015162004cef565b51956200961485518551146202df8a565b6200962385518851146202dff0565b60005b85518110156200970b576200963c818962004d46565b5162009649828762004d46565b516103e8918282101562004cfd5760066200966a9260031b0154906200608f565b9062009677848962004d46565b51918383101562004cfd576006620096949360031b01556202e0aa565b620096a0828a62004d46565b5190620096ae838862004d46565b518181101562004cfd576001600160a01b039392620096d79160039086620078ab878e62004d46565b620096e3848a62004d46565b519283101562004cfd57600362000faa936200970596620078f0878e62004d46565b62009626565b5093926200972191929650620079229062032f53565b9451926200972f8462002b3f565b60008452600036813760005b835181101562007971578062000faa620079626200975a938762004d46565b6200973b565b819694959396518181101562002a2357601590810362009cd7575050505060408401906200979360c08351015162004cef565b5193620097aa60a06200779b818651015162004cef565b5193620097bf865185511462000fa3620331b7565b620097d2865186511462000fa3620331b7565b60005b86518110156200982e57620097eb818662004d46565b51906103e882101562004cfd576003620098289260018060a01b038b5116600052811b0160205262000faa60406000205462007ce9838a62004d46565b620097d5565b50909493919460005b85518110156200993f576200984d818662004d46565b51906103e88083101562004cfd57600360018060a01b0393848c5116600052811b016020526200988860406000205462007d56848962004d46565b9062009895848a62004d46565b51918383101562004cfd576003620098c493878f5116600052811b0160205260406000205562000fa3620332bb565b620098d0828862004d46565b518181101562004cfd5760039084620098ea858c62004d46565b5116600052811b016020526200990b60406000205462006814848962004d46565b62009917848a62004d46565b519283101562004cfd57600362000faa93620099399662007e0f878e62004d46565b62009837565b5091509162007e4762009956919695949662032f53565b9260405194620099668662002b78565b6001865260203681880137516001600160a01b0316620099868662004cef565b526000905b86518210156200820c57620099a1828862004d46565b516103a052620099b2855162004e62565b96600094620099c2885162004e62565b610580528594865b885181101562009a90578a89620099fa6001600160a01b03620099ee858462004d46565b51166103a05162032d3b565b158062009a4a575b62009a1b575b505062009a159062004cdf565b620099ca565b9862009a3f9162001ac782859c62007f3762009a159760018060a01b039262004d46565b9790508a8962009a08565b5050506103e86103a051101562004cfd576001600160a01b0362009a6f828b62004d46565b511660005260036103a051811b016020528a89604060002054151562009a02565b509098949897969291939760005b885181101562009b32576103e86103a051101562004cfd576001600160a01b0362009aca828b62004d46565b511660005260036103a051811b016020526040600020541562009af9575b62009af39062004cdf565b62009a9e565b9962009af39062009b29906001600160a01b0362009b188e8d62004d46565b511662001ac7826105805162004d46565b9a905062009ae8565b5098509694939291956103a0516103e8811015806105c05262004cfd5760031b600401549662009b6762008068878a62006200565b996000998a610200525b6105c05162004cfd57610200518a81101562009c0d5762009ba662009bc39160006105c05260046103a05160031b0162004f5e565b90546105805160039290921b1c6001600160a01b03169062032dea565b1562009be2575b62009bd86102005162004cdf565b6102005262009b71565b99808c62001ac762009c06936200810d6102005160046103a05160031b0162004f5e565b9962009bca565b509a939794969299919850946000915b83831062009cb257505050506105c05162004cfd578051906001600160401b03821162002a9b5760209062009c5c8360046103a05160031b016200509a565b0160046103a05160031b01600052602060002060005b83811062009c94575050505062009c899062004cdf565b90929591956200998b565b82516001600160a01b03168183015560209092019160010162009c72565b62009cd090620081fe906001600160a01b03620081f0868662004d46565b9162009c1d565b82979496959751918083101562002a2357601692830362009d4457505050505060c0604062009d0a920151015162004cef565b519260005b8451811015620095ac5762009d3e9062000faa6001600160a01b0362009d36838962004d46565b511662006675565b62009d0f565b83518181101562002a235760170362009d9d5760405162461bcd60e51b81526020600482015260296024820152600080516020620339cc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b83518181101562002a235760180362009e1057505050505060c0604062009dc8920151015162004cef565b51611fb6805460ff191660011790559260005b8451811015620095ac5762009e0a9062000faa6001600160a01b0362009e02838962004d46565b51166200662a565b62009ddb565b83979697518181101562002a235760190362009f8457505050505060008080604080940160a08082510151805162009f4b575b5050519060e08201519162009e676200680d60c060018060a01b0393015162004cef565b511690602083519301915af1903d1562009f42573d9162009e888362002f5b565b9262009e978351948562002b94565b83523d6000602085013e5b1562009eb75750506200798560209162004cdf565b62004cdb925062009f23815192600080516020620338cc833981519152602085015278039bab1b1b2b9b9b33ab617102932ba3ab937103230ba309d1603d1b8385015283815162009f12816059946020868601910162002e01565b810103603981018552018362002b94565b5162461bcd60e51b815260206004820152918291602483019062002e26565b60609162009ea2565b62009f569062004cef565b515162009f65575b8062009e43565b8192506200680d9062009f7b9251015162004cef565b51903862009f5e565b83518181101562002a2357601a036200a084575050505062009faf60a0604080940151015162004cef565b519062009fc060038351146202d510565b62009fcb8262004cef565b519262009fe462009fdc8462004d13565b519362004d24565b51926200a04a5750509162007985916001602094146000146200a043576200a023906200a016611fb19182546200608f565b90915562000fa362033108565b62000faa611fb26200a03681546200607c565b90915562000fa362033142565b5062004cdf565b60649250519062461bcd60e51b825260206004830152602482015273496e76616c6964207061796d656e74207479706560601b6044820152fd5b909192809450518181101562002a2357601b036200a51957505050505091906200a0c4611faf546200225a6200a0b962033044565b612710831062004cac565b50506200a0d062033108565b506000805b6103e881106200a4a8575b50506200a0ec62006161565b6200a0fa613f745462004e62565b9060009485935b6103e88510156200a49b5760ff60078660031b015416156200a25a5760009560028660031b0154156200a24b57869796975b62004cfd5760048660031b01548810156200a232576200a15b886004600389901b0162004f5e565b600160a01b6001900391549060031b1c1696876000528660031b600301602052604097858960002054906200a1909162005eb0565b99906200a19c62033108565b6200a1a79162004cac565b6000998960031b600201546200a1bd9162005eb0565b91906200a1c962033108565b6200a1d49162004cac565b828b52611f476020528a20908154906200a1ee916200608f565b9091556200a1fb62033108565b6200a2069162004cac565b6200a212828862004d46565b526200a21e9062004cdf565b976200a22a9062004cdf565b97966200a133565b91946200a2429196975062004cdf565b9390946200a101565b91946200a24291965062004cdf565b949592915092505b6200a26d8262004e62565b91600091825b8281106200a40557505050611f48908154926200a29562008068858462006200565b9360009081905b8082106200a3ca57505060005b8381106200a3265750508351939150506001600160401b03831162002a9b576020906200a2d68462004fbc565b0190600052602060002060005b8381106200a3085750505050620079856020916000611fb1556000611fb25562004cdf565b82516001600160a01b0316818301556020909201916001016200a2e3565b6000805b8381106200a382575b50156200a34c575b6200a3469062004cdf565b6200a2a9565b906200a346906200a379906001600160a01b036200a36b858762004d46565b511662001ac7828a62004d46565b9190506200a33b565b6001600160a01b03806200a397858862004d46565b5116906200a3a6838b62004d46565b5116146200a3bf576200a3b99062004cdf565b6200a32a565b50506001386200a333565b9091620081fe6200a3fe916200a3e08562004e9a565b905460039190911b1c6001600160a01b031662001ac7828b62004d46565b906200a29c565b6000805b8581106200a453575b50156200a42b575b6200a4259062004cdf565b6200a273565b926200a425906200a44a906001600160a01b03620081f0878662004d46565b9390506200a41a565b6001600160a01b03806200a468858762004d46565b5116906200a477838a62004d46565b5116146200a490576200a48a9062004cdf565b6200a409565b50506001386200a412565b949592915092506200a262565b806003959394951b9060ff600783015416156200a50e576200a4f86200746162000faa946200a4ec6200a5049560026200a4e28762005e1c565b9101549062005eb0565b929062000fa362033108565b939062000fa362033108565b939291936200a0d5565b50939291936200a0e0565b83518181101562002a2357601c036200a5725760405162461bcd60e51b8152602060048201526029602482015260008051602062033acc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b83518181101562002a2357601d036200a598575b50505050506200798560209162004cdf565b839795969497518181101562002a2357601e036200ae665750505050604084019060a0906200a5cb828451015162004cef565b51516200a5dc838551015162004d13565b5151036200ade9576200a5f3828451015162004cef565b51516200a604838551015162004d24565b5151036200ad6d576200a61b828451015162004cef565b51946200a62c838551015162004d13565b51916200a65d6200a641858751015162004d24565b51946200a652818851015162004cef565b519651015162004d13565b519585518751036200ad0a5760005b86518110156200a6c5576200a682818862004d46565b51906103e882101562004cfd5760036200a6bf9260018060a01b038d5116600052811b0160205262000faa60406000205462007ce9838c62004d46565b6200a66c565b5090969192939660005b86518110156200a76e576200a6e5818862004d46565b516103e881101562004cfd5760039060018060a01b038c5116600052811b016020526200a71d60406000205462007d56838b62004d46565b91906200a72b828a62004d46565b51906103e882101562004cfd576200a76893600362000faa938f60018060a01b03905116600052811b0160205260406000205562000fa3620332bb565b6200a6cf565b5093979550936200a7829096929662032f53565b96604051966200a7928862002b78565b60018852602036818a013786516001600160a01b03166200a7b38962004cef565b52604051966200a7c38862002b3f565b600088526000610460525b895161046051908110156200ab8b576200a7e9908b62004d46565b51610520526200a7fa885162004e62565b996000976200a80a8b5162004e62565b610920528897895b8b518110156200a8d8578d8c6200a8426001600160a01b036200a836858462004d46565b51166105205162032d3b565b15806200a892575b6200a863575b50506200a85d9062004cdf565b6200a812565b9b6200a8879162001ac782859f62007f376200a85d9760018060a01b039262004d46565b9a90508d8c6200a850565b5050506103e861052051101562004cfd576001600160a01b036200a8b7828e62004d46565b5116600052600361052051811b016020528d8c60406000205415156200a84a565b50909b989a99949691929395979b60005b8b518110156200a97d576103e861052051101562004cfd576001600160a01b036200a915828e62004d46565b5116600052600361052051811b01602052604060002054156200a944575b6200a93e9062004cdf565b6200a8e9565b9c6200a9746200a93e918f6200a9638f9160018060a01b039262004d46565b511662001ac7826109205162004d46565b9d90506200a933565b509a9b509895969193969490929461052051996103e88b10159b8c62004cfd578d9b60031b600401549d6200a9b3908f62006200565b6200a9be9062004e62565b6103205260006108c0528c6000610640525b62004cfd57610640519c8e8e10156200aa8e57506200aa1c6200a9ff60009e60046105205160031b0162004f5e565b90546109205160039290921b1c6001600160a01b03169062032dea565b156200aa3c575b8c6200aa326106405162004cdf565b610640526200a9d0565b6200aa546106405160046105205160031b0162004f5e565b60018060a01b0391549060031b1c166200aa756108c0516103205162004d46565b526200aa846108c05162004cdf565b6108c0526200aa23565b939d509396999094979b50999094979960005b8281106200ab3f5750505062004cfd5761032051516001600160401b03811162002a9b576200aada8160046105205160031b016200509a565b602061032051019060046105205160031b0160005260206000209160005b8281106200ab2157505050506200ab126104605162004cdf565b6104605295989094986200a7ce565b81516001600160a01b0316818501556020909101906001016200aaf8565b6200ab85906001600160a01b036200ab58828562004d46565b51166200ab6c6108c0516103205162004d46565b526200ab7b6108c05162004cdf565b6108c05262004cdf565b6200aaa1565b5094929750929750939450600094855b87518110156200ac0b576200abce6200abc66200abb9838962004d46565b5162007451848d62004d46565b91906202f07a565b806200abe7575b506200abe19062004cdf565b6200ab9b565b906200abfc6200ac04986200abe1936200608f565b98906202f0c7565b906200abd5565b509650945092909150806200ac2f575b5050620079856020915b913880806200a586565b6200ac629060018060a01b038351166000526200ac5a611f459182602052604060002054906200608f565b92906202f120565b60018060a01b03835116600052602052604060002055600080611f4654905b8181106200acc0575b5050916200798591602093156200aca4575b50916200ac1b565b516200acb9906001600160a01b0316620065d6565b386200ac9c565b6200accb8162004eb6565b9054855160039290921b1c6001600160a01b039081169116146200acfa576200acf49062004cdf565b6200ac81565b506001915082905060206200ac8a565b60405162461bcd60e51b815260206004820152603560248201527f546865206c656e677468206f6620746f6b656e436c61737320616e6420746f6b604482015274195b905b5bdd5b9d081a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b60405162461bcd60e51b81526020600482015260596024820152600080516020620339ec83398151915260448201527f642070726963654172726179206973206e6f7420657175616c2061742042415460648201527810d217d095549397d513d2d15394d7d0539117d49151955391603a1b608482015260a490fd5b60405162461bcd60e51b815260206004820152605a6024820152600080516020620339ec83398151915260448201527f6420616d6f756e744172726179206973206e6f7420657175616c2061742042416064820152791510d217d095549397d513d2d15394d7d0539117d4915195539160321b608482015260a490fd5b839794969597518181101562002a2357601f036200aeaa57505050506020916200aea46200ae9d6040620079859401515162004cef565b516202f281565b6200ac25565b83518181101562002a23576020036200aed0575b5050505050620079856020916200ac25565b83518181101562002a235760218091036200aeed575b506200aebe565b8451828110156200b01a576022036200af2d5750505050505062007985602091611fb660ff1981541690556200af2262005087565b91388080806200aee6565b8451828110156200b01a576023036200af54575b505050505050620079856020916200af22565b845194828610156200b01a5760248096036200af72575b506200af41565b8051838110156200b006576025146200af6b5751918210156200aff25750036200afb65750506020916200afaa62007985926202e1ae565b9138808080806200af6b565b60405162461bcd60e51b8152602060048201529182015275496e76616c6964206f7065726174696f6e207479706560501b604482015260649150fd5b8490634e487b7160e01b6000526004526000fd5b8683634e487b7160e01b6000526004526000fd5b50634e487b7160e01b60005260045260246000fd5b60405162461bcd60e51b815260206004820152601b60248201527a13dc195c985d1a5bdb881d1e5c19481a5cc81d5b9919599a5b9959602a1b6044820152606490fd5b50915050565b80516200b08e906001600160a01b031662006600565b62007667565b6200b09f8162004f0a565b9054855160039290921b1c6001600160a01b039081169116146200b0ce576200b0c89062004cdf565b62007655565b505050600138806200765e565b600281036200b0ff5760405162461bcd60e51b81528062004cdb600482016200758f565b6001146200b10a5750565b6200b118611f43546200530f565b805190600160401b821162002a9b57613efb5482613efb5580831062014bbf575b50602001613efb60005260206000206000915b83831062014b9e575050505060005b611f43548110156200b194578062000faa6200b17b6200b18e9362005c7a565b506200b1878362005c9a565b90620150c9565b6200b15b565b506200b1a3611f42546200530f565b805190600160401b821162002a9b57613efa5482613efa5580831062014b02575b50602001613efa60005260206000206000915b83831062014ae1575050505060005b611f42548110156200b218578062000faa6200b2066200b2129362005cba565b506200b1878362005cda565b6200b1e6565b5060005b6103e8811015806200b3c957600160ff611fbf8460031b0154161515146200b251575b506200b24b9062004cdf565b6200b21c565b916000835b62004cfd57611fbc8360031b01548110156200b2c0576200b2b7929350600092816200b28b8593611fbc8860031b0162004f5e565b9054600391821b1c6001600160a01b031660009081529087901b611fbb01602052604081205562004cdf565b9093926200b256565b5091604051906200b2d18262002b3f565b6000825262004cfd578051906001600160401b03821162002a9b576020906200b30283611fbc8660031b016200509a565b01611fbc8360031b01600052602060002060005b8381106200b3ab57505050611fbf600383901b908101805460ff191690556000611fb88201819055611fb98201819055611fba8201819055611fbd90910180546200b24b9493506200b3689062002c79565b601f908181116200b389575b5050556000611fbe8260031b0155906200b23f565b6200b3a39183855260208520910160051c81019062004fa3565b38806200b374565b82516001600160a01b0316818301556020909201916001016200b316565b505060005b6103e8811062014a53575060005b611f41548110156200b43757806200b3f86200b4319262004ed2565b60018060a01b0391549060031b1c16600052613ef860205260006002604082208281556200b4296001820162005399565b015562004cdf565b6200b3dc565b506200b446611f415462004e62565b8051906001600160401b03821162002a9b57600160401b821162002a9b57602090613ef95483613ef95580841062014a31575b5001613ef9600052602060002060005b83811062014a13575050505060005b611f41548110156200b50a576200b4af8162004ed2565b9054613ef95460039290921b1c6001600160a01b0316919081101562004cfd57613ef96000526000805160206203398c833981519152810180546001600160a01b0319169092179091556200b5049062004cdf565b6200b498565b509060005b611f41548110156200b5c957806200b52b6200b57e9262004ed2565b9060018060a01b03918291549060031b1c16600052611f40602052604080600020916200b5588462004ed2565b90549060031b1c16600052613ef8602052600020908082036200b584575b505062004cdf565b6200b50f565b600280916200b5aa60ff6200b59d8184541687620057f2565b825460081c168562005803565b6200b5bc600182016001860162014d65565b015491015538806200b576565b5060005b613f02548110156200b61b57806200b5e96200b6159262004eee565b60018060a01b0391549060031b1c16600052613f0160205262000faa6040600020606481019062004fa3565b6200b5cd565b506200b62a611f4a5462004e62565b8051906001600160401b03821162002a9b57600160401b821162002a9b57602090613f025483613f0255808410620149f1575b5001613f02600052602060002060005b838110620149d3575050505060005b611f4a548110156200b6bf578062000faa6200b69c6200b6b99362004f0a565b905460039190911b1c6001600160a01b031662001a088362004eee565b6200b67c565b5060005b611f4a548110156200b74a57806200b6df6200b7319262004f0a565b9060018060a01b03918291549060031b1c16600052611f49602052604080600020916200b70c8462004f0a565b90549060031b1c16600052613f01602052600020908082036200b73757505062004cdf565b6200b6c3565b6200b742916201514b565b38806200b576565b50611f4b80546000905b60648210620149ba575050611faf54613f675550611fb054613f6855611fb154613f6955611fb254613f6a55611fb3546001600160401b03811162002a9b57600160401b811162002a9b57613f6b5481613f6b558082106201498c575b50613f6b60009081527f0c040229f6fc4874d4176ee508a0872dc89a48e51cc9b61a792006f29e06275480546000805160206203376c83398151915291905b8484106201496a575050505050611fb454600160401b811162002a9b57613f6c5481613f6c5580821062014928575b50613f6c6000908152600080516020620337ac8339815191527fcdf85548d0b3537a0f46212d2994f9493fe1dfa88d3af4ddb0cac3c506fd3f595b8383106201490a575050611fb5549150506001600160401b03811162002a9b57600160401b811162002a9b57613f6d5481613f6d55808210620148dc575b50613f6d60009081527f70c3d981fef3a436e3d026045c487f2278cccbfa7f9e11fbd3c1406b0017bd5d80546000805160206203396c83398151915291905b848410620148ba57505050505060ff611fb65416151560ff8019613f6e5416911617613f6e5560005b613efe548110156200b94a57806200b91c6200b9449262004f26565b905460039190911b1c6001600160a01b03166000908152613efd602052604081205562004cdf565b6200b900565b506200b959611f465462004e62565b8051906001600160401b03821162002a9b576020906200b9798362005041565b01613efe600052602060002060005b8381106201489c575050505060005b611f46548110156200b9da578062000faa6200b9b76200b9d49362004eb6565b905460039190911b1c6001600160a01b031662001a088362004f26565b6200b997565b5060005b611f46548110156200ba4957806200b9fa6200ba439262004eb6565b9060018060a01b03918291549060031b1c16600052611f4560205260408060002054916200ba288462004eb6565b90549060031b1c16600052613efd6020526000205562004cdf565b6200b9de565b5060005b613f00548110156200ba9757806200ba696200ba919262004f42565b905460039190911b1c6001600160a01b03166000908152613eff602052604081205562004cdf565b6200ba4d565b506200baa6611f485462004e62565b8051906001600160401b03821162002a9b576020906200bac68362005064565b01613f00600052602060002060005b8381106201487e575050505060005b611f48548110156200bb27578062000faa6200bb046200bb219362004e9a565b905460039190911b1c6001600160a01b031662001a088362004f42565b6200bae4565b5060005b611f48548110156200bb9657806200bb476200bb909262004e9a565b9060018060a01b03918291549060031b1c16600052611f4760205260408060002054916200bb758462004e9a565b90549060031b1c16600052613eff6020526000205562004cdf565b6200bb2b565b50613f02546000805b82811062014839575b501562014803575b5060005b60208301519081518110156200bc0c5762000faa620076c16200bbe6620076a16020620067a7866200bc069862004d46565b86516001600160a01b03166000908152613f0160205260409020620242c3565b6200bbb4565b505060005b602083015180518210156200bc5957620076a16020620067a7846200bc369462004d46565b90606482101562004cfd576200bc53914290613f03015562004cdf565b6200bc11565b5050906000905b6020810151805183101562010f2357826200bc7b9162004d46565b516020810151602681101562002a2357156200b02f576020810151602681101562002a23576001036200c24d57604001906200bcbc60c08351015162004cef565b51936200bcd360a06200779b818651015162004cef565b51916200bce486518551146202df8a565b6200bcf386518451146202dff0565b60005b86518110156200be51576200bd0c818662004d46565b516103e881101562004cfd57600160ff611fbf6200bd339360031b0154161515146202e052565b6200bd3f818562004d46565b516200bd4c828762004d46565b51906103e882101562004cfd57611fbe6200bd6d9260031b0154906200608f565b906200bd7a838862004d46565b51916103e883101562004cfd57611fbe6200bd9a9360031b01556202e0aa565b6200bda6818562004d46565b516200bdb3828762004d46565b51906103e882101562004cfd576200bdf691611fbb906001600160a01b036200bddd868d62004d46565b511660005260031b01602052604060002054906200608f565b91906200be04828862004d46565b51906103e882101562004cfd576200be4b9362000faa92611fbb906001600160a01b036200be33878f62004d46565b511660005260031b016020526040600020556202e109565b6200bcf6565b50926200be68919250620084799095949562032f53565b916040516200be778162002b3f565b6000815260003681376000945b80518610156200c233576200be9a868262004d46565b516102c0526200beab855162004e62565b966000946200bebb845162004e62565b6105a05260009460005b88518110156200bf8d578a896200bef56001600160a01b036200bee9858462004d46565b51166102c05162032d92565b15806200bf45575b6200bf16575b50506200bf109062004cdf565b6200bec5565b986200bf3a9162001ac782859c62007f376200bf109760018060a01b039262004d46565b9790508a896200bf03565b5050506103e86102c051101562004cfd576001600160a01b036200bf6a828b62004d46565b5116600052611fbb6102c05160031b016020528a8960406000205415156200befd565b50909895979498969291939660005b88518110156200c02b576103e86102c051101562004cfd576001600160a01b03806200bfc9838c62004d46565b5116600052611fbb6102c05160031b01602052604060002054156200bffb575b506200bff59062004cdf565b6200bf9c565b819b6200c023916200c0126200bff5948d62004d46565b511662001ac7826105a05162004d46565b9a906200bfe9565b509850969592919093966102c0516103e8811015806103e05262004cfd5760031b611fbc0154986200c06262008068898c62006200565b6108a0526000610a80526000610ac0525b6103e05162004cfd57610ac0518a8110156200c13c576200c0a96200c0c99160006103e052611fbc6102c05160031b0162004f5e565b90546105a0516001600160a01b03939260031b9190911c83169062032dea565b156200c0e9575b506200c0df610ac05162004cdf565b610ac0526200c073565b60006103e0526200c108610ac051611fbc6102c05160031b0162004f5e565b90549060031b1c166200c122610a80516108a05162004d46565b526200c131610a805162004cdf565b610a8052386200c0d0565b50979294959093985095909560005b8281106200c1e7575050506103e05162004cfd576108a051516001600160401b03811162002a9b576200c18981611fbc6102c05160031b016200509a565b60206108a05101611fbc6102c05160031b01600052602060002060005b8381106200c1c957505050506200c1bd9062004cdf565b9492959091956200be84565b82516001600160a01b0316818301556020909201916001016200c1a6565b6200c22d906001600160a01b036200c200828562004d46565b51166200c214610a80516108a05162004d46565b526200c223610a805162004cdf565b610a805262004cdf565b6200c14b565b5050939092506200c245915062004cdf565b90916200bc60565b906020829493940151602681101562002a23576002036200c404576040809201908151938451916200c2a46200c28860a08098015162004cef565b51966200c299818751015162004d13565b519551015162004d24565b5194835187510362007bd257835185510362007b7e57835186510362007b27575060005b86518110156200c3f1576200c2de818862004d46565b516103e881101562004cfd5760ff611fbf6200c3019260031b015416156202e162565b6200c30d818862004d46565b516103e881101562004cfd5760031b611fbf01805460ff191660011790556200c337818562004d46565b516200c344828962004d46565b51906103e882101562004cfd57611fbd6200c3639260031b016200571f565b6200c36f818662004d46565b516200c37c828962004d46565b516103e881101562004cfd5760031b611fb901556200c39c818762004d46565b516200c3a9828962004d46565b516103e881101562004cfd5760031b611fba01556200c3c9818862004d46565b51906103e882101562004cfd576000611fbe6200c3eb9360031b015562004cdf565b6200c2c8565b509592509350506200c245915062004cdf565b9092916020840151602681101562002a23576003036200ca2a5760408401906200c43360c08351015162004cef565b51906200c44a60a06200779b818651015162004cef565b51936200c45f835185511462000fa3620331b7565b6200c472835186511462000fa3620331b7565b60005b83518110156200c4d0576200c48b818662004d46565b51906103e882101562004cfd57611fbb6200c4ca9260018060a01b038b511660005260031b0160205262000faa60406000205462007ce9838a62004d46565b6200c475565b509095919560005b87518110156200c61e576200c4ee818662004d46565b516103e881101562004cfd57611fbb9060018060a01b0386511660005260031b016020526200c52860406000205462007d56838962004d46565b906200c535838862004d46565b51916103e883101562004cfd57611fbb6200c56e9360018060a01b0389511660005260031b0160205260406000205562000fa3620332bb565b6200c57a818662004d46565b516103e881101562004cfd57611fbb906001600160a01b036200c59e848c62004d46565b511660005260031b016020526200c5c060406000205462006814838962004d46565b91906200c5ce828862004d46565b51906103e882101562004cfd576200c61893611fbb62000faa938d6200c5fc8760018060a01b039262004d46565b511660005260031b0160205260406000205562000fa362033320565b6200c4d8565b50926200c63d919294506200c6369096959662032f53565b9462032e37565b92604051906200c64d8262002b78565b6001825260203681840137516001600160a01b03166200c66d8262004cef565b526000945b80518610156200c233576200c688868262004d46565b51610220526200c699855162004e62565b966000946200c6a9845162004e62565b6104005260009460005b88518110156200c77b578a896200c6e36001600160a01b036200c6d7858462004d46565b51166102205162032d92565b15806200c733575b6200c704575b50506200c6fe9062004cdf565b6200c6b3565b986200c7289162001ac782859c62007f376200c6fe9760018060a01b039262004d46565b9790508a896200c6f1565b5050506103e861022051101562004cfd576001600160a01b036200c758828b62004d46565b5116600052611fbb6102205160031b016020528a8960406000205415156200c6eb565b50909895979498969291939660005b88518110156200c820576103e861022051101562004cfd576001600160a01b036200c7b6828b62004d46565b5116600052611fbb6102205160031b01602052604060002054156200c7e7575b6200c7e19062004cdf565b6200c78a565b996200c7e1906200c817906001600160a01b036200c8068e8d62004d46565b511662001ac7826104005162004d46565b9a90506200c7d6565b50985096959291909396610220516103e8811015806104a05262004cfd5760031b611fbc0154986200c85762008068898c62006200565b6103c0526000610a40526000610540525b6104a05162004cfd57610540518a8110156200c933576200c89e6200c8bb9160006104a052611fbc6102205160031b0162004f5e565b90546104005160039290921b1c6001600160a01b03169062032dea565b156200c8da575b6200c8d06105405162004cdf565b610540526200c868565b60006104a0526200c8f961054051611fbc6102205160031b0162004f5e565b60018060a01b0391549060031b1c166200c91a610a40516103c05162004d46565b526200c929610a405162004cdf565b610a40526200c8c2565b50979294959093985095909560005b8281106200c9de575050506104a05162004cfd576103c051516001600160401b03811162002a9b576200c98081611fbc6102205160031b016200509a565b60206103c05101611fbc6102205160031b01600052602060002060005b8381106200c9c057505050506200c9b49062004cdf565b9492959091956200c672565b82516001600160a01b0316818301556020909201916001016200c99d565b6200ca24906001600160a01b036200c9f7828562004d46565b51166200ca0b610a40516103c05162004d46565b526200ca1a610a405162004cdf565b610a405262004cdf565b6200c942565b90926020810151602681101562002a23576004036200d0575760400160c0936200ca686200ca5c868451015162004cef565b51958351015162004d13565b51906200ca7f60a06200779b818651015162004cef565b51936200ca94875184511462000fa3620331b7565b6200caa7875185511462000fa3620331b7565b6200caba875186511462000fa3620331b7565b60005b87518110156200cb25576200cad3818662004d46565b51906103e882101562004cfd576200cb1f91611fbb906001600160a01b036200cafd848d62004d46565b511660005260031b0160205262000faa60406000205462007ce9838a62004d46565b6200cabd565b509095919593929360005b83518110156200cc88576200cb46818762004d46565b516103e881101562004cfd57611fbb906001600160a01b036200cb6a848862004d46565b511660005260031b016020526200cb8c60406000205462007d56838862004d46565b906200cb99838962004d46565b51916103e883101562004cfd576200cbdf92611fbb906001600160a01b036200cbc3878b62004d46565b511660005260031b0160205260406000205562000fa3620332bb565b6200cbeb818762004d46565b516103e881101562004cfd57611fbb906001600160a01b036200cc0f848c62004d46565b511660005260031b016020526200cc3160406000205462006814838862004d46565b9190506200cc40818862004d46565b51916103e883101562004cfd576200cc8292611fbb906001600160a01b036200cc6a858e62004d46565b511660005260031b0160205260406000205562004cdf565b6200cb30565b5091936200cca491935062007e47620084799197969762032f53565b6000945b80518610156200c233576200ccbe868262004d46565b51610280526200cccf855162004e62565b966000946200ccdf845162004e62565b6107005260009460005b88518110156200cdb1578a896200cd196001600160a01b036200cd0d858462004d46565b51166102805162032d92565b15806200cd69575b6200cd3a575b50506200cd349062004cdf565b6200cce9565b986200cd5e9162001ac782859c62007f376200cd349760018060a01b039262004d46565b9790508a896200cd27565b5050506103e861028051101562004cfd576001600160a01b036200cd8e828b62004d46565b5116600052611fbb6102805160031b016020528a8960406000205415156200cd21565b50909895979498969291939660005b88518110156200ce4f576103e861028051101562004cfd576001600160a01b03806200cded838c62004d46565b5116600052611fbb6102805160031b01602052604060002054156200ce1f575b506200ce199062004cdf565b6200cdc0565b819b6200ce47916200ce366200ce19948d62004d46565b511662001ac7826107005162004d46565b9a906200ce0d565b50985096959291909396610280516103e881101580610a005262004cfd5760031b611fbc0154986200ce8662008068898c62006200565b610260526000610780526000610620525b610a005162004cfd57610620518a8110156200cf60576200cecd6200ceed916000610a0052611fbc6102805160031b0162004f5e565b9054610700516001600160a01b03939260031b9190911c83169062032dea565b156200cf0d575b506200cf036106205162004cdf565b610620526200ce97565b6000610a00526200cf2c61062051611fbc6102805160031b0162004f5e565b90549060031b1c166200cf46610780516102605162004d46565b526200cf556107805162004cdf565b61078052386200cef4565b50979294959093985095909560005b8281106200d00b57505050610a005162004cfd5761026051516001600160401b03811162002a9b576200cfad81611fbc6102805160031b016200509a565b60206102605101611fbc6102805160031b01600052602060002060005b8381106200cfed57505050506200cfe19062004cdf565b9492959091956200cca8565b82516001600160a01b0316818301556020909201916001016200cfca565b6200d051906001600160a01b036200d024828562004d46565b51166200d038610780516102605162004d46565b526200d0476107805162004cdf565b6107805262004cdf565b6200cf6f565b92906020840151602681101562002a23576005036200d5b15760408401906200d08a60a06200851e818551015162004cef565b519282518451036200ad0a5760005b83518110156200d0f4576200d0af818562004d46565b51906103e882101562004cfd57611fbb6200d0ee9260018060a01b038a511660005260031b0160205262000faa60406000205462007ce9838962004d46565b6200d099565b509060005b83518110156200d19b576200d10f818562004d46565b516103e881101562004cfd57611fbb9060018060a01b0389511660005260031b016020526200d14960406000205462007d56838862004d46565b91906200d157828762004d46565b51906103e882101562004cfd576200d19593611fbb62000faa9360018060a01b038d511660005260031b0160205260406000205562000fa3620332bb565b6200d0f9565b50916200d1ac919495935062032f53565b92604051926200d1bc8462002b78565b6001845260203681860137516001600160a01b03166200d1dc8462004cef565b52604051926200d1ec8462002b3f565b6000845260003681376000945b80518610156200c233576200d20f868262004d46565b516107c0526200d220855162004e62565b966000946200d230845162004e62565b6102405260009460005b88518110156200d302578a896200d26a6001600160a01b036200d25e858462004d46565b51166107c05162032d92565b15806200d2ba575b6200d28b575b50506200d2859062004cdf565b6200d23a565b986200d2af9162001ac782859c62007f376200d2859760018060a01b039262004d46565b9790508a896200d278565b5050506103e86107c051101562004cfd576001600160a01b036200d2df828b62004d46565b5116600052611fbb6107c05160031b016020528a8960406000205415156200d272565b50909895979498969291939660005b88518110156200d3a7576103e86107c051101562004cfd576001600160a01b036200d33d828b62004d46565b5116600052611fbb6107c05160031b01602052604060002054156200d36e575b6200d3689062004cdf565b6200d311565b996200d368906200d39e906001600160a01b036200d38d8e8d62004d46565b511662001ac7826102405162004d46565b9a90506200d35d565b509850969592919093966107c0516103e8811015806109e05262004cfd5760031b611fbc0154986200d3de62008068898c62006200565b610560526000610420526000610480525b6109e05162004cfd57610480518a8110156200d4ba576200d4256200d4429160006109e052611fbc6107c05160031b0162004f5e565b90546102405160039290921b1c6001600160a01b03169062032dea565b156200d461575b6200d4576104805162004cdf565b610480526200d3ef565b60006109e0526200d48061048051611fbc6107c05160031b0162004f5e565b60018060a01b0391549060031b1c166200d4a1610420516105605162004d46565b526200d4b06104205162004cdf565b610420526200d449565b50979294959093985095909560005b8281106200d565575050506109e05162004cfd5761056051516001600160401b03811162002a9b576200d50781611fbc6107c05160031b016200509a565b60206105605101611fbc6107c05160031b01600052602060002060005b8381106200d54757505050506200d53b9062004cdf565b9492959091956200d1f9565b82516001600160a01b0316818301556020909201916001016200d524565b6200d5ab906001600160a01b036200d57e828562004d46565b51166200d592610420516105605162004d46565b526200d5a16104205162004cdf565b6104205262004cdf565b6200d4c9565b926020810151602681101562002a23576006036200db9a576040016200d5dc60c08251015162004cef565b51936200d5f360a06200851e818551015162004cef565b519285518351036200db485785518451036200dafb5760005b86518110156200d674576200d622818562004d46565b51906103e882101562004cfd576200d66e91611fbb906001600160a01b036200d64c848c62004d46565b511660005260031b0160205262000faa60406000205462007ce9838962004d46565b6200d60c565b509060005b86518110156200d718576200d68f818562004d46565b516103e881101562004cfd57611fbb906001600160a01b036200d6b3848b62004d46565b511660005260031b016020526200d6d560406000205462007d56838862004d46565b91906200d6e3828762004d46565b51906103e882101562004cfd576200d7129362000faa92611fbb906001600160a01b036200cbc3878f62004d46565b6200d679565b50916200d72f919350620084799095949562032f53565b91604051926200d73f8462002b3f565b6000845260003681376000945b80518610156200c233576200d762868262004d46565b51610aa0526200d773855162004e62565b966000946200d783845162004e62565b6109c05260009460005b88518110156200d855578a896200d7bd6001600160a01b036200d7b1858462004d46565b5116610aa05162032d92565b15806200d80d575b6200d7de575b50506200d7d89062004cdf565b6200d78d565b986200d8029162001ac782859c62007f376200d7d89760018060a01b039262004d46565b9790508a896200d7cb565b5050506103e8610aa051101562004cfd576001600160a01b036200d832828b62004d46565b5116600052611fbb610aa05160031b016020528a8960406000205415156200d7c5565b50909895979498969291939660005b88518110156200d8f3576103e8610aa051101562004cfd576001600160a01b03806200d891838c62004d46565b5116600052611fbb610aa05160031b01602052604060002054156200d8c3575b506200d8bd9062004cdf565b6200d864565b819b6200d8eb916200d8da6200d8bd948d62004d46565b511662001ac7826109c05162004d46565b9a906200d8b1565b50985096959291909396610aa0516103e8811015806102e05262004cfd5760031b611fbc0154986200d92a62008068898c62006200565b6109a05260006102a05260006107e0525b6102e05162004cfd576107e0518a8110156200da04576200d9716200d9919160006102e052611fbc610aa05160031b0162004f5e565b90546109c0516001600160a01b03939260031b9190911c83169062032dea565b156200d9b1575b506200d9a76107e05162004cdf565b6107e0526200d93b565b60006102e0526200d9d06107e051611fbc610aa05160031b0162004f5e565b90549060031b1c166200d9ea6102a0516109a05162004d46565b526200d9f96102a05162004cdf565b6102a052386200d998565b50979294959093985095909560005b8281106200daaf575050506102e05162004cfd576109a051516001600160401b03811162002a9b576200da5181611fbc610aa05160031b016200509a565b60206109a05101611fbc610aa05160031b01600052602060002060005b8381106200da9157505050506200da859062004cdf565b9492959091956200d74c565b82516001600160a01b0316818301556020909201916001016200da6e565b6200daf5906001600160a01b036200dac8828562004d46565b51166200dadc6102a0516109a05162004d46565b526200daeb6102a05162004cdf565b6102a05262004cdf565b6200da13565b60405162461bcd60e51b8152602060048201526030602482015260008051602062033aec83398151915260448201526f1b9d1cc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b60405162461bcd60e51b815260206004820152603560248201526000805160206203372c8339815191526044820152741b90db185cdcd95cc81a5cc81b9bdd08195c5d585b605a1b6064820152608490fd5b602081949293940151602681101562002a23576007036200dd3557604001916200dbc960c08451015162004cef565b51916200dbdb60a08551015162004cef565b51935151916200dbf3845186511462000fa3620331b7565b60005b84518110156200dd23576001600160a01b03806200dc15838862004d46565b5116600052613ef8806020526200dc3960ff604060002054161562000fa362033288565b60026200dc47848862004d46565b516200dcb16200dc58868c62004d46565b5191620088728b604051966200dc6e8862002a7f565b60018852886200dc958b60208b01946000865260408c0197885260608c01998a5262004d46565b51166000526020526200886860406000209751151588620057f2565b519101556200dcc1828762004d46565b51613ef954929116600160401b83101562002a9b576001830180613ef95583101562004cfd57613ef96000526000805160206203398c83398151915290920180546001600160a01b0319169092179091556200dd1d9062004cdf565b6200dbf6565b5094915092506200c245915062004cdf565b6020810151602681101562002a23576008036200de235760c060406200dd5f920151015162004cef565b519160005b83518110156200de14576200de0e906001600160a01b03806200dd88838862004d46565b5116600052613ef890816020526200ddb1600160ff6040600020541615151462000fa3620331e7565b806200ddbe848962004d46565b5116600052816020526200dde260ff60406000205460081c161562000fa36203324f565b6200ddee838862004d46565b5116600052602052604060002061010061ff001982541617905562004cdf565b6200dd64565b50926200c24591925062004cdf565b6020810151602681101562002a23576009036200df025760c060406200de4d920151015162004cef565b519160005b83518110156200de14576200defc906001600160a01b03806200de76838862004d46565b5116600052613ef890816020526200de9f600160ff6040600020541615151462000fa3620331e7565b806200deac848962004d46565b5116600052816020526200ded4600160ff60406000205460081c1615151462000fa36203321a565b6200dee0838862004d46565b5116600052602052604060002061ff0019815416905562004cdf565b6200de52565b6020810151602681101562002a2357600a036200dfea57604001906200df3e60a06200df3360c08551015162004cef565b519351015162004cef565b51926200df53835185511462000fa3620331b7565b60005b83518110156200dfd9576200dfd3906001600160a01b03806200df7a838862004d46565b5116600052613ef8806020526200dfa2600160ff6040600020541615151462000fa3620331e7565b6200dfae838962004d46565b51916200dfbc848962004d46565b511660005260205260026040600020015562004cdf565b6200df56565b50939092506200c245915062004cdf565b602081949392940151602681101562002a2357600b036200e0ca57604001926200e01960c08551015162004cef565b51935151916200e031855184511462000fa3620331b7565b60005b85518110156200e0ba576200e0b49062000faa6001600160a01b03806200e05c848b62004d46565b5116600052613ef8806020526200e084600160ff6040600020541615151462000fa3620331e7565b6200e090848962004d46565b51916200e09e858c62004d46565b511660005260205260016040600020016200571f565b6200e034565b509350916200c245915062004cdf565b9091926020820151602681101562002a2357600c036200e1b557606060408301510151926200e0f9846202d698565b60005b84518110156200dfd95760c06200e11c8260606040880151015162004d46565b510151156200e170576200e1446200e13d8260606040880151015162004d46565b5162005d8c565b613efa54908160001981011162001e0757600562008ca96200e16a936000190162005cda565b6200e0fc565b6200e18f6200e1888260606040880151015162004d46565b5162005d69565b613efb54908160001981011162001e0757600562008ca96200e16a936000190162005c9a565b9291906020810151602681101562002a2357600d036200e2bf576040019260206200e1e560a08651015162004cef565b5194510151916200e1fa85518451146202dd8c565b60005b85518110156200e0ba57806200e2186200e26c928662004d46565b51156200e272576200e23b6200e22f828962004d46565b51613efa54116202de15565b6200e25a60ff600562008db66200e253858c62004d46565b5162005cda565b600562008dd26200e253838a62004d46565b6200e1fd565b6200e28e6200e282828962004d46565b51613efb54116202de15565b6200e2ad60ff600562008db66200e2a6858c62004d46565b5162005c9a565b600562008dd26200e2a6838a62004d46565b6020810151602681101562002a2357600e036200e3b8576040019260206200e2ec60a08651015162004cef565b5194510151916200e30185518451146202dd8c565b60005b85518110156200e0ba57806200e31f6200e36c928662004d46565b51156200e372576200e3426200e336828962004d46565b51613efa54116202dece565b6200e35a60ff600562008ed96200e253858c62004d46565b600562008ca96200e253838a62004d46565b6200e304565b6200e38e6200e382828962004d46565b51613efb54116202dece565b6200e3a660ff600562008ed96200e2a6858c62004d46565b600562008ca96200e2a6838a62004d46565b9091926020820151602681101562002a2357600f036200e49557606060408301510151926200e3e7846202d698565b60005b84518110156200dfd95760c06200e40a8260606040880151015162004d46565b510151156200e457576200e42b6200e13d8260606040880151015162004d46565b613efa54908160001981011162001e0757600562008dd26200e451936000190162005cda565b6200e3ea565b6200e46f6200e1888260606040880151015162004d46565b613efb54908160001981011162001e0757600562008dd26200e451936000190162005c9a565b9291906020810151602681101562002a23576010036200e5da5760400151926200e4c860a0608086015195015162004cef565b51916200e4dd855184511462000fa3620331b7565b60005b85518110156200e0ba57806200e4fb6200e570928862004d46565b516200e5078162002fc4565b6200e513828762004d46565b51906200e5208162002fc4565b6200e5376200e52e620332ea565b82151562004cac565b6200e5428162002fc4565b600181036200e57657506200e5666200e55a620332ea565b61271083111562004cac565b613f675562004cdf565b6200e4e0565b6200e5818162002fc4565b600281036200e5955750613f685562004cdf565b6200e5a08162002fc4565b600381036200e5b45750613f695562004cdf565b806200e5c260049262002fc4565b146200e5cf575062004cdf565b613f6a55386200a043565b6020810151602681101562002a23576011036200e87d57604001906200e60b60a06200df3360c08551015162004cef565b51936200e61c83518651146202d510565b60005b83518110156200e69c576200e696906200e6766001600160a01b03806200e647848962004d46565b5116600052613efd90816020526200e66a60406000205462006814868d62004d46565b939062000fa36203316d565b6200e682848962004d46565b511660005260205260406000205562004cdf565b6200e61f565b509350906200e6ab9062032e37565b90613efe54936200e6c26200806884518762006200565b9060009260005b8781106200e83d575060005b85518110156200e78a576000805b8981106200e73b575b50156200e705575b6200e6ff9062004cdf565b6200e6d5565b936200e6ff906200e732906001600160a01b036200e724888a62004d46565b511662001ac7828862004d46565b9490506200e6f4565b6200e7468162004f26565b90546001600160a01b0360039290921b1c8116906200e766858b62004d46565b5116146200e77f576200e7799062004cdf565b6200e6e3565b50506001386200e6ec565b5095509392506200e79b8262004e62565b8051906001600160401b03821162002a9b576020906200e7bb8362005041565b01613efe600052602060002060005b8381106200e81f575050505060005b8281106200e7ef575050506200c2459062004cdf565b6200e8199062000faa6001600160a01b036200e80c838662004d46565b511662001a088362004f26565b6200e7d9565b82516001600160a01b0316818301556020909201916001016200e7ca565b936200e8706200e877916200e8528762004f26565b905460039190911b1c6001600160a01b031662001ac7828862004d46565b9462004cdf565b6200e6c9565b6020819492940151602681101562002a23576012036200eac157604001906200e8b160a06200df3360c08551015162004cef565b51936200e8c283518651146202d510565b60005b83518110156200e916576200e910906200e6766001600160a01b03806200e8ed848962004d46565b5116600052613efd90816020526200e66a60406000205462007d56868d62004d46565b6200e8c5565b50935091906200e9269062032e37565b613efe546200e9358162004e62565b906000926000915b8083106200e9e8575050506200e9538262004e62565b8051906001600160401b03821162002a9b576020906200e9738362005041565b01613efe600052602060002060005b8381106200e9ca575050505060005b8281106200e9a7575050506200c2459062004cdf565b6200e9c49062000faa6001600160a01b036200e80c838662004d46565b6200e991565b82516001600160a01b0316818301556020909201916001016200e982565b91956000959193959760005b85518110156200eab2576200ea098962004f26565b90546001600160a01b0360039290921b1c8116906200ea29838962004d46565b5116146200ea42576200ea3c9062004cdf565b6200e9f4565b509750956001959391955b806200ea81575b156200ea6c576200ea659062004cdf565b916200e93d565b936200e8706200ea65916200e8528762004f26565b506200ea8d8162004f26565b60018060a01b0391549060031b1c16600052613efd602052604060002054156200ea54565b5097969096959391956200ea4d565b6020819493940151602681101562002a23576013036200eb625760408091015101519160005b83518110156200de14576200eafd818562004d46565b5190613efc54600160401b81101562002a9b576001810180613efc5581101562004cfd57613efc6000526200eb5c9262000faa916007027f6710e0bb821cd3dfcfba05f5136082a6d0bca8d604d6d14bfd93de2dd49659d2016202f19f565b6200eae7565b602081949392940151602681101562002a23576014036200f0a457604001906200eb9160c08351015162004cef565b51936200eba860a06200779b818651015162004cef565b51916200ebb986518551146202df8a565b6200ebc886518451146202dff0565b60005b86518110156200ecc2576200ebe1818562004d46565b516200ebee828762004d46565b51906103e882101562004cfd57611fbe6200ec0f9260031b0154906200608f565b906200ec1c838862004d46565b51916103e883101562004cfd57611fbe6200ec3c9360031b01556202e0aa565b6200ec48818562004d46565b516200ec55828762004d46565b51906103e882101562004cfd576200ec7f91611fbb906001600160a01b036200bddd868d62004d46565b91906200ec8d828862004d46565b51906103e882101562004cfd576200ecbc9362000faa92611fbb906001600160a01b036200be33878f62004d46565b6200ebcb565b50926200ecd9919250620084799095949562032f53565b916040516200ece88162002b3f565b6000815260003681376000945b80518610156200c233576200ed0b868262004d46565b516106e0526200ed1c855162004e62565b966000946200ed2c845162004e62565b6103005260009460005b88518110156200edfe578a896200ed666001600160a01b036200ed5a858462004d46565b51166106e05162032d92565b15806200edb6575b6200ed87575b50506200ed819062004cdf565b6200ed36565b986200edab9162001ac782859c62007f376200ed819760018060a01b039262004d46565b9790508a896200ed74565b5050506103e86106e051101562004cfd576001600160a01b036200eddb828b62004d46565b5116600052611fbb6106e05160031b016020528a8960406000205415156200ed6e565b50909895979498969291939660005b88518110156200ee9c576103e86106e051101562004cfd576001600160a01b03806200ee3a838c62004d46565b5116600052611fbb6106e05160031b01602052604060002054156200ee6c575b506200ee669062004cdf565b6200ee0d565b819b6200ee94916200ee836200ee66948d62004d46565b511662001ac7826103005162004d46565b9a906200ee5a565b509850969592919093966106e0516103e8811015806103405262004cfd5760031b611fbc0154986200eed362008068898c62006200565b610440526000610900526000610980525b6103405162004cfd57610980518a8110156200efad576200ef1a6200ef3a91600061034052611fbc6106e05160031b0162004f5e565b9054610300516001600160a01b03939260031b9190911c83169062032dea565b156200ef5a575b506200ef506109805162004cdf565b610980526200eee4565b6000610340526200ef7961098051611fbc6106e05160031b0162004f5e565b90549060031b1c166200ef93610900516104405162004d46565b526200efa26109005162004cdf565b61090052386200ef41565b50979294959093985095909560005b8281106200f058575050506103405162004cfd5761044051516001600160401b03811162002a9b576200effa81611fbc6106e05160031b016200509a565b60206104405101611fbc6106e05160031b01600052602060002060005b8381106200f03a57505050506200f02e9062004cdf565b9492959091956200ecf5565b82516001600160a01b0316818301556020909201916001016200f017565b6200f09e906001600160a01b036200f071828562004d46565b51166200f085610900516104405162004d46565b526200f0946109005162004cdf565b6109005262004cdf565b6200efbc565b926020840151602681101562002a23576015036200f6a55760408401906200f0d160c08351015162004cef565b51906200f0e860a06200779b818651015162004cef565b51936200f0fd835185511462000fa3620331b7565b6200f110835186511462000fa3620331b7565b60005b83518110156200f16e576200f129818662004d46565b51906103e882101562004cfd57611fbb6200f1689260018060a01b038b511660005260031b0160205262000faa60406000205462007ce9838a62004d46565b6200f113565b509095919560005b87518110156200f2a0576200f18c818662004d46565b516103e881101562004cfd57611fbb9060018060a01b0386511660005260031b016020526200f1c660406000205462007d56838962004d46565b906200f1d3838862004d46565b51916103e883101562004cfd57611fbb6200f20c9360018060a01b0389511660005260031b0160205260406000205562000fa3620332bb565b6200f218818662004d46565b516103e881101562004cfd57611fbb906001600160a01b036200f23c848c62004d46565b511660005260031b016020526200f25e60406000205462006814838962004d46565b91906200f26c828862004d46565b51906103e882101562004cfd576200f29a93611fbb62000faa938d6200c5fc8760018060a01b039262004d46565b6200f176565b50926200f2b8919294506200c6369096959662032f53565b92604051906200f2c88262002b78565b6001825260203681840137516001600160a01b03166200f2e88262004cef565b526000945b80518610156200c233576200f303868262004d46565b51610a60526200f314855162004e62565b966000946200f324845162004e62565b6108405260009460005b88518110156200f3f6578a896200f35e6001600160a01b036200f352858462004d46565b5116610a605162032d92565b15806200f3ae575b6200f37f575b50506200f3799062004cdf565b6200f32e565b986200f3a39162001ac782859c62007f376200f3799760018060a01b039262004d46565b9790508a896200f36c565b5050506103e8610a6051101562004cfd576001600160a01b036200f3d3828b62004d46565b5116600052611fbb610a605160031b016020528a8960406000205415156200f366565b50909895979498969291939660005b88518110156200f49b576103e8610a6051101562004cfd576001600160a01b036200f431828b62004d46565b5116600052611fbb610a605160031b01602052604060002054156200f462575b6200f45c9062004cdf565b6200f405565b996200f45c906200f492906001600160a01b036200f4818e8d62004d46565b511662001ac7826108405162004d46565b9a90506200f451565b50985096959291909396610a60516103e8811015806106805262004cfd5760031b611fbc0154986200f4d262008068898c62006200565b6108605260006106c0526000610880525b6106805162004cfd57610880518a8110156200f5ae576200f5196200f53691600061068052611fbc610a605160031b0162004f5e565b90546108405160039290921b1c6001600160a01b03169062032dea565b156200f555575b6200f54b6108805162004cdf565b610880526200f4e3565b6000610680526200f57461088051611fbc610a605160031b0162004f5e565b60018060a01b0391549060031b1c166200f5956106c0516108605162004d46565b526200f5a46106c05162004cdf565b6106c0526200f53d565b50979294959093985095909560005b8281106200f659575050506106805162004cfd5761086051516001600160401b03811162002a9b576200f5fb81611fbc610a605160031b016200509a565b60206108605101611fbc610a605160031b01600052602060002060005b8381106200f63b57505050506200f62f9062004cdf565b9492959091956200f2ed565b82516001600160a01b0316818301556020909201916001016200f618565b6200f69f906001600160a01b036200f672828562004d46565b51166200f6866106c0516108605162004d46565b526200f6956106c05162004cdf565b6106c05262004cdf565b6200f5bd565b9091926020810151602681101562002a23576016036200f7575760c060406200f6d2920151015162004cef565b519160005b83518110156200de14576001600160a01b036200f6f5828662004d46565b51613f6b54929116600160401b83101562002a9b576001830180613f6b5583101562004cfd57613f6b6000526000805160206203376c83398151915290920180546001600160a01b0319169092179091556200f7519062004cdf565b6200f6d7565b6020810151602681101562002a23576017036200f7b45760405162461bcd60e51b81526020600482015260296024820152600080516020620339cc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a23576018036200f8725760c060406200f7de920151015162004cef565b5191600160ff19613f6e541617613f6e5560005b83518110156200de14576001600160a01b036200f810828662004d46565b51613f6d54929116600160401b83101562002a9b576001830180613f6d5583101562004cfd57613f6d6000526000805160206203396c83398151915290920180546001600160a01b0319169092179091556200f86c9062004cdf565b6200f7f2565b602081949293940151602681101562002a23576019036200f89a575b506200c2459062004cdf565b6020810151602681101562002a2357601a036200fa115760a060406200f8c4920151015162004cef565b51906200f8d560038351146202d510565b6200f8e08262004cef565b516200f8f062009fdc8462004d13565b51926200f9d5576200c245926001036200f9ce576200f9176200f97591613f69546200608f565b613f6955604051906200f92a8262002b06565b603282527f6469766964656e6461626c652062616c616e6365206f766572666c6f772077686020830152710cadc40e0e4dec6cae6e6d2dcce40c6c2e6d60731b604083015262004cac565b6200f9c76200f987613f6a546200607c565b613f6a55604051906200f99a8262002b78565b601a8252796469766964656e647320636f756e746572206f766572666c6f7760301b602083015262004cac565b906200f88e565b506200f9c7565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207061796d656e74207479706560601b6044820152606490fd5b6020810151602681101562002a2357601b036200ffa157509190613f67546200fa3d6200a0b962033044565b613f6a54613f685411156200fa5c6200fa55620330b2565b8262004cac565b613f6954906200fa6d838362005eb0565b50506200fa7962033108565b506000805b6103e882106200ff52575b5050906200fab96200fabf93926200faaf6200faa462033044565b612710861062004cac565b62000fa3620330b2565b62005eb0565b90506200facb62033108565b5060009060005b6103e881106200fe7f575b50906127106200faee9204620061de565b90506200fafe613f745462004e62565b906000946000905b6103e88210156200fe72578160031b9460ff611fbf87015416156200fc5c57600096611fba870154156200fc4b57600098975b62004cfd57611fbc8701548910156200fc31576200fb5c89611fbc890162004f5e565b600160a01b6001900391549060031b1c169788600052611fbb8801602052604098868a60002054906200fb8f9162005eb0565b9a906200fb9b62033108565b6200fba69162004cac565b60009a611fba8b01546200fbba9162005eb0565b91906200fbc662033108565b6200fbd19162004cac565b82600052613eff602052600020908154906200fbed916200608f565b9091556200fbfa62033108565b6200fc059162004cac565b6200fc11828962004d46565b526200fc1d9062004cdf565b986200fc299062004cdf565b98976200fb39565b929095506200fc439196975062004cdf565b90946200fb06565b929095506200fc4391965062004cdf565b95969392509350505b6200fc708262004e62565b9160009160005b8281106200fddc57505050613f0054916200fc9762008068848462006200565b926000906000905b8082106200fdbf57505060005b8381106200fd295750508251929150506001600160401b03821162002a9b576020906200fcd98362005064565b01613f00600052602060002060005b8381106200fd0b57505050506200c245906000613f69556000613f6a556200f9c7565b82516001600160a01b0316818301556020909201916001016200fce8565b6000805b8381106200fd77575b50156200fd4f575b6200fd499062004cdf565b6200fcac565b906200fd49906200fd6e906001600160a01b03620081f0858762004d46565b9190506200fd3e565b6001600160a01b03806200fd8c858862004d46565b5116906200fd9b838a62004d46565b5116146200fdb4576200fdae9062004cdf565b6200fd2d565b50506001386200fd36565b9091620081fe6200fdd591620094f58562004f42565b906200fc9f565b6000805b8581106200fe2a575b50156200fe02575b6200fdfc9062004cdf565b6200fc77565b926200fdfc906200fe21906001600160a01b03620081f0878662004d46565b9390506200fdf1565b6001600160a01b03806200fe3f858762004d46565b5116906200fe4e838a62004d46565b5116146200fe67576200fe619062004cdf565b6200fde0565b50506001386200fde9565b939495929150506200fc65565b90918160039695961b60ff611fbf82015416156200ff4657611fba810154611fbc8201546000928391825b8184106200fee65750505050620074616200fedd936200fed562000faa979694620022e49462005eb0565b929062005daf565b9493946200fad2565b94929462004cfd576200ff3f856200ff376200ff0b62000faa98611fbc870162004f5e565b905460039190911b1c6001600160a01b03166000908152611fbb8601602052604081205490966200608f565b979062005ed2565b926200feaa565b5091909493946200fadd565b8160039897981b60ff611fbf82015416156200ff9757916200a4f8620074616200ff8d936200a4ec62000faa96611fba6200a4e28762005e52565b909695966200fa7e565b509695966200fa89565b6020810151602681101562002a2357601c036200fffe5760405162461bcd60e51b8152602060048201526029602482015260008051602062033acc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a2357601d0362010022575b506200c245906200f9c7565b9290916020840151602681101562002a2357601e036201075857604084019060a09062010053828451015162004cef565b515162010064838551015162004d13565b5151036200ade9576201007b828451015162004cef565b51516201008c838551015162004d24565b5151036200ad6d57620100a3828451015162004cef565b5194620100b4838551015162004d13565b5191620100c96200a641858751015162004d24565b519585518751036200ad0a5760005b86518110156201013357620100ee818862004d46565b51906103e882101562004cfd57611fbb6201012d9260018060a01b038d511660005260031b0160205262000faa60406000205462007ce9838c62004d46565b620100d8565b5090969192939660005b8651811015620101e05762010153818862004d46565b516103e881101562004cfd57611fbb9060018060a01b038c511660005260031b016020526201018d60406000205462007d56838b62004d46565b91906201019b828a62004d46565b51906103e882101562004cfd57620101da93611fbb62000faa938f60018060a01b0390511660005260031b0160205260406000205562000fa3620332bb565b6201013d565b5093969297955093620101f39062032f53565b9660405196620102038862002b78565b60018852602036818a013786516001600160a01b0316620102248962004cef565b5260405196620102348862002b3f565b600088526000610600525b89516106005190811015620105fa576201025a908b62004d46565b51610960526201026b885162004e62565b996000976201027b8b5162004e62565b6103605260009760005b8b518110156201034d578d8c620102b56001600160a01b03620102a9858462004d46565b51166109605162032d92565b158062010305575b620102d6575b5050620102d09062004cdf565b62010285565b9b620102fa9162001ac782859f62007f37620102d09760018060a01b039262004d46565b9a90508d8c620102c3565b5050506103e861096051101562004cfd576001600160a01b036201032a828e62004d46565b5116600052611fbb6109605160031b016020528d8c6040600020541515620102bd565b50909b989a99949691929395979b60005b8b51811015620103f4576103e861096051101562004cfd576001600160a01b036201038a828e62004d46565b5116600052611fbb6109605160031b0160205260406000205415620103bb575b620103b59062004cdf565b6201035e565b9c620103eb620103b5918f620103da8f9160018060a01b039262004d46565b511662001ac7826103605162004d46565b9d9050620103aa565b509b5098959092949691939661096051996103e88b10159c8d62004cfd576201042c62008068611fbc8f9e60031b01549e8f62006200565b6108005260006107a0528d60009e5b62004cfd578d8f1015620104fc575060009d620104846201046782611fbc6109605160031b0162004f5e565b90546103605160039290921b1c6001600160a01b03169062032dea565b156201049e575b620104978f9162004cdf565b9e6201043b565b620104979e5060009e8f91620104bf81611fbc6109605160031b0162004f5e565b60018060a01b0391549060031b1c16620104e06107a0516108005162004d46565b52620104ef6107a05162004cdf565b6107a0529150506201048b565b9396999b929d509396999094979b5060005b828110620105ae5750505062004cfd5761080051516001600160401b03811162002a9b576201054881611fbc6109605160031b016200509a565b6020610800510190611fbc6109605160031b0160005260206000209160005b828110620105905750505050620105816106005162004cdf565b6106005295989094986201023f565b81516001600160a01b03168185015560209091019060010162010567565b620105f4906001600160a01b03620105c7828562004d46565b5116620105db6107a0516108005162004d46565b52620105ea6107a05162004cdf565b6107a05262004cdf565b6201050e565b509492975094955091965060009460005b87518110156201065e57620106296200abc66200abb9838962004d46565b8062010642575b506201063c9062004cdf565b6201060b565b906200abfc62010657986201063c936200608f565b9062010630565b5096509450915091806201067c575b506200c24591505b9062010016565b620106a79060018060a01b038451166000526200ac5a613efd9182602052604060002054906200608f565b60018060a01b03845116600052602052604060002055600091600092613efe54935b84811062010713575b506201066d57516001600160a01b031691600160401b81101562002a9b576200c2459262001a088260016201070c9401613efe5562004f26565b386201066d565b6201071e8162004f26565b9054845160039290921b1c6001600160a01b039081169116146201074d57620107479062004cdf565b620106c9565b5050600138620106d2565b9190926020810151602681101562002a2357601f03620107d3576040620107829101515162004cef565b5190613f6c54600160401b81101562002a9b576001810180613f6c5581101562004cfd57613f6c6000526200c24592620107cd91600080516020620337ac833981519152016200571f565b62010675565b6020810151602681101562002a2357602003620107f7575b506200c2459062010675565b6020810151602681101562002a2357602114620107eb576020810151602681101562002a23576022036201087d57506200c2459060ff19613f6e5416613f6e55613f6d546000613f6d558062010851575b505b90620107eb565b613f6d60005262010876906000805160206203396c8339815191529081019062004fa3565b3862010848565b6020810151602681101562002a2357602303620108a1575b506200c245906201084a565b6020810151602681101562002a235760241462010895576020810151602681101562002a235760251462010895579290916020840151602681101562002a235760150362010ee5576040840190620108fe60c08351015162004cef565b51906201091560a06200779b818651015162004cef565b51936201092a835185511462000fa3620331b7565b6201093d835186511462000fa3620331b7565b60005b83518110156201099b5762010956818662004d46565b51906103e882101562004cfd57611fbb620109959260018060a01b038b511660005260031b0160205262000faa60406000205462007ce9838a62004d46565b62010940565b509095919560005b875181101562010acd57620109b9818662004d46565b516103e881101562004cfd57611fbb9060018060a01b0386511660005260031b01602052620109f360406000205462007d56838962004d46565b9062010a00838862004d46565b51916103e883101562004cfd57611fbb62010a399360018060a01b0389511660005260031b0160205260406000205562000fa3620332bb565b62010a45818662004d46565b516103e881101562004cfd57611fbb906001600160a01b0362010a69848c62004d46565b511660005260031b0160205262010a8b60406000205462006814838962004d46565b919062010a99828862004d46565b51906103e882101562004cfd5762010ac793611fbb62000faa938d6200c5fc8760018060a01b039262004d46565b620109a3565b509262010ae5919294506200c6369096959662032f53565b926040519062010af58262002b78565b6001825260203681840137516001600160a01b031662010b158262004cef565b526000945b805186101562010ed25762010b30868262004d46565b516106a05262010b41855162004e62565b9660009462010b51845162004e62565b6103805260009460005b885181101562010c23578a8962010b8b6001600160a01b0362010b7f858462004d46565b51166106a05162032d92565b158062010bdb575b62010bac575b505062010ba69062004cdf565b62010b5b565b9862010bd09162001ac782859c62007f3762010ba69760018060a01b039262004d46565b9790508a8962010b99565b5050506103e86106a051101562004cfd576001600160a01b0362010c00828b62004d46565b5116600052611fbb6106a05160031b016020528a89604060002054151562010b93565b50909895979498969291939660005b885181101562010cc8576103e86106a051101562004cfd576001600160a01b0362010c5e828b62004d46565b5116600052611fbb6106a05160031b016020526040600020541562010c8f575b62010c899062004cdf565b62010c32565b9962010c899062010cbf906001600160a01b0362010cae8e8d62004d46565b511662001ac7826103805162004d46565b9a905062010c7e565b509850969592919093966106a0516103e8811015806106605262004cfd5760031b611fbc01549862010cff62008068898c62006200565b6105e0526000610820526000610500525b6106605162004cfd57610500518a81101562010ddb5762010d4662010d6391600061066052611fbc6106a05160031b0162004f5e565b90546103805160039290921b1c6001600160a01b03169062032dea565b1562010d82575b62010d786105005162004cdf565b6105005262010d10565b60006106605262010da161050051611fbc6106a05160031b0162004f5e565b60018060a01b0391549060031b1c1662010dc2610820516105e05162004d46565b5262010dd16108205162004cdf565b6108205262010d6a565b50979294959093985095909560005b82811062010e86575050506106605162004cfd576105e051516001600160401b03811162002a9b5762010e2881611fbc6106a05160031b016200509a565b60206105e05101611fbc6106a05160031b01600052602060002060005b83811062010e68575050505062010e5c9062004cdf565b94929590919562010b1a565b82516001600160a01b03168183015560209092019160010162010e45565b62010ecc906001600160a01b0362010e9f828562004d46565b511662010eb3610820516105e05162004d46565b5262010ec26108205162004cdf565b6108205262004cdf565b62010dea565b5050939092506200c24591509062010895565b60405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206f7065726174696f6e207479706560501b6044820152606490fd5b5091905062010f32826201561e565b9290600681101562002a23576002810362010f625760405162461bcd60e51b81528062004cdb600482016200758f565b6003810362011ef65750613f738054600260ff821662010f828162002a18565b1462011eb15760ff19166002179055613f78549060018201821162001e075760018201613f7855611f44549092600019929060005b8651811015620110335762010fda8462010fd2838a62004d46565b511062032899565b84600262010ff462010fed848b62004d46565b516202f17f565b500154106201100f575b620110099062004cdf565b62010fb7565b93506201100960026201102762010fed878a62004d46565b50015494905062010ffe565b5090936000199360005b8751811015620110aa57620110588562010fd2838b62004d46565b8560036201106b62010fed848c62004d46565b5001541062011086575b620110809062004cdf565b6201103d565b94506201108060036201109e62010fed888b62004d46565b50015495905062011075565b5091946001919350620110be875162004e62565b620110ca885162004e62565b620110d6895162004e62565b90620110e38a5162004e62565b9260405197620110f38962002ae9565b88526020880152604087015260608601526080850152600060a0850152600060c0850152600260e0850152600061010085015201600052613f766020526040600020825160018060a01b0381511660018060a01b03198354161782556020810151805190600160401b821162002a9b57600184015482600186015580831062011cf2575b5060200190600184016000526020600020916000905b8282106201168d57505050506040620111ac910151600283016200571f565b60208301518051906001600160401b03821162002a9b5760206003840191620111d684846200509a565b0190600052602060002060005b83811062011678575050505060408301518051906001600160401b03821162002a9b57602060048401916201121984846200509a565b0190600052602060002060005b83811062011663575050505060608301518051906001600160401b03821162002a9b57602060058401916201125c84846200509a565b0190600052602060002060005b8381106201164e575050505060808301518051906001600160401b03821162002a9b57602060068401916201129f84846200509a565b0190600052602060002060005b83811062011639575050505060a0830151600782015560c0830151600882015560e08301519290600901600384101562002a235761010062011304926201130b9560ff80198554169116178355015115159062005803565b426200608f565b9015620115f957613f7854600052613f7660205280600760406000200155613f715562011349613f785491826000526007604060002001546200608f565b919015620115b657600052613f7660205280600860406000200155613f7255613f78546000526009604060002001600260ff1982541617905560005b8251811015620113cb578062000faa620113a4620113c5938662004d46565b51613f7854600052613f7660205262006bbf83600360406000200162004f5e565b62011385565b506000915b8051831015620115b157613f78549283600052613f766020526201140d6201140082600360406000200162004f5e565b90549060031b1c6202f17f565b5054916201141b8362004e62565b9260005b818110620115665750506000906000915b8451831015620115355762011446838662004d46565b516103e8908181101562004cfd5760031b6001015462011467858862004d46565b519182101562004cfd576006620114849260031b01549062005eb0565b9015620114f15762011496916200608f565b929015620114b057620114a99062004cdf565b9162011430565b60405162461bcd60e51b8152602060048201526019602482015278746f74616c566f74696e67506f776572206f766572666c6f7760381b6044820152606490fd5b606460405162461bcd60e51b815260206004820152602060248201527f63757272656e74436c617373566f74696e67506f776572206f766572666c6f776044820152fd5b90956201155f945062000faa9250600052613f7660205262006bbf83600660406000200162004f5e565b91620113d0565b620115ab9087600052613f766020526201159881620115916201140088600360406000200162004f5e565b5062004f5e565b90549060031b1c62001ac7828862004d46565b6201141f565b509050565b60405162461bcd60e51b815260206004820152601b60248201527a657865637574696e6720656e642074696d65206f766572666c6f7760281b6044820152606490fd5b60405162461bcd60e51b8152602060048201526018602482015277766f74696e6720656e642074696d65206f766572666c6f7760401b6044820152606490fd5b600190602084519401938184015501620112ac565b60019060208451940193818401550162011269565b60019060208451940193818401550162011226565b600190602084519401938184015501620111e3565b805180518554602083015190916001600160a01b031690602681101562002a23576001600160a81b03199092161760a09190911b60ff60a01b161785556040015180518051906001870190602090620116e7848462005427565b01906000526020600020906000905b83821062011cd25750505050602081015180516001600160401b03811162002a9b57602060028801926201172b83856203239f565b019160005260206000209060005b8160051c811062011c965750601f198116810362011c51575b5050506040810151805190600160401b821162002a9b57600387015482600389015580831062011bc9575b50602001600387016000526020600020906000905b83821062011ba857505050506060810151805190600160401b821162002a9b57600487015482600489015580831062011b27575b50602001600487016000526020600020906000905b83821062011b065750505050608081015180516001600160401b03811162002a9b57602060058801926201181083856203239f565b019160005260206000209060005b8160051c811062011ac75750601f1981169283820362011a78575b505050506006850160a08201516020815191620118578385620054b5565b019160005260206000206000925b82841062011a1457505050506007850160c082015160208151916201188b8385620054b5565b019160005260206000206000925b828410620119a7575050505060e001518051906001600160401b03821162002a9b57620118d982620118cf600889015462002c79565b60088901620056d5565b602090601f83116001146201192c57928260099360209360019660009262011920575b5050600019600383901b1c191690851b1760088801555b019401910190926201118d565b015190503880620118fc565b906008870160005260206000209160005b601f19851681106201198e575083602093600196938793600997601f1981161062011974575b505050811b01600888015562011913565b015160001960f88460031b161c1916905538808062011963565b919260206001819286850151815501940192016201193d565b80518051906001600160401b03821162002a9b57602090620119ca83866200509a565b0183600052602060002060005b838110620119f657505050506001602081920192019301929062011899565b82516001600160a01b031681830155602090920191600101620119d7565b80518051906001600160401b03821162002a9b5760209062011a3783866200509a565b0183600052602060002060005b83811062011a6357505050506001602081920192019301929062011865565b60019060208451940193818401550162011a44565b6000936000905b808403821062011a9b5750505060051c01553880808062011839565b909194602062011abc6001928589519162011ab68362002fc4565b62032409565b960192019062011a7f565b6000805b6020811062011ae25750838201556001016201181e565b9490602062011afc6001928885519162011ab68362002fc4565b9201950162011acb565b600660208262011b1a60019451876200581b565b01930191019091620117db565b600681810204810362001e0757600683810204830362001e07576004880160005260206000208360060281015b826006028201811062011b69575050620117c6565b806000600692556000600182015562011b856002820162005504565b6000600382015562011b9a6004820162005399565b600060058201550162011b54565b600760208262011bbc60019451876202f19f565b0193019101909162011792565b600781810204810362001e0757600783810204830362001e07576003880160005260206000208360070281015b826007028201811062011c0b5750506201177d565b8062011c196007926200501a565b6000600182015560006002820155600060038201556000600482015562011c436005820162005399565b600060068201550162011bf6565b60009260005b601f1983168303811062011c7557505060051c015538808062011752565b9093602062011c8c60019284885115159162032409565b9501910162011c57565b6000805b6020811062011cb157508382015560010162011739565b9490602062011cc860019288855115159162032409565b9201950162011c9a565b600160208262011ce5839451876200571f565b01930191019091620116f6565b600981810204810362001e0757600983810204830362001e07576001850160005260206000208360090281015b826009028201811062011d3457505062011177565b6000815562011d4660018201620053e8565b62011d5b600282018054906000815562032377565b6003810154600060038301558062011e3b575b506004810154600060048301558062011dcc575b508062011d9b6005600993018054906000815562032377565b62011da96006820162005476565b62011db76007820162005476565b62011dc56008820162005399565b0162011d1f565b600681810204810362001e0757600482016000526020600020906006028101905b81811062011dfc575062011d82565b806000600692556000600182015562011e186002820162005504565b6000600382015562011e2d6004820162005399565b600060058201550162011ded565b600781810204810362001e0757600382016000526020600020906007028101905b81811062011e6b575062011d6e565b8062011e796007926200501a565b6000600182015560006002820155600060038201556000600482015562011ea36005820162005399565b600060068201550162011e5c565b60405162461bcd60e51b815260206004820152601d60248201527f766f74696e6720697320616c726561647920696e2070726f67726573730000006044820152606490fd5b6005919293501462011f055750565b90600080611f4a54905b818110620147bc575b505015620147a0575b60005b602083015190815181101562011f7c5762000faa620076c162011f56620076a16020620067a78662011f769862004d46565b86516001600160a01b03166000908152611f4960205260409020620242c3565b62011f24565b505060005b6020830151805182101562011fc957620076a16020620067a78462011fa69462004d46565b90606482101562004cfd5762011fc3914290611f4b015562004cdf565b62011f81565b50506000905b602083015180518310156200b072578262011fea9162004d46565b516020810151602681101562002a2357156200b02f576020810151602681101562002a23576001036201223257604001906201202b60c08351015162004cef565b51936201204260a06200779b818651015162004cef565b51916201205386518551146202df8a565b6201206286518451146202dff0565b60005b8651811015620121b9576201207b818662004d46565b516103e881101562004cfd57600160ff6007620120a19360031b0154161515146202e052565b620120ad818562004d46565b51620120ba828762004d46565b51906103e882101562004cfd576006620120da9260031b0154906200608f565b90620120e7838862004d46565b51916103e883101562004cfd576006620121069360031b01556202e0aa565b62012112818562004d46565b516201211f828762004d46565b51906103e882101562004cfd5762012160916003906001600160a01b0362012148868d62004d46565b5116600052811b01602052604060002054906200608f565b91906201216e828862004d46565b51906103e882101562004cfd57620121b39362000faa926003906001600160a01b036201219c878f62004d46565b5116600052811b016020526040600020556202e109565b62012065565b5094915091620121cd620121d49162032f53565b9162032e37565b9360405192620121e48462002b3f565b60008452600036813760005b835181101562012215578062000faa620079626201220f938762004d46565b620121f0565b509450926020925062012229915062004cdf565b91905062011fcf565b9091926020820151602681101562002a2357600203620123c9576040809201908151938451916201226c6200c28860a08098015162004cef565b5194835187510362007bd257835185510362007b7e57835186510362007b27575060005b8651811015620123b357620122a6818862004d46565b516103e881101562004cfd5760ff6007620122c89260031b015416156202e162565b620122d4818862004d46565b516103e881101562004cfd5760031b600701805460ff19166001179055620122fd818562004d46565b516201230a828962004d46565b51906103e882101562004cfd576005620123289260031b016200571f565b62012334818662004d46565b5162012341828962004d46565b516103e881101562004cfd5760031b6001015562012360818762004d46565b516201236d828962004d46565b516103e881101562004cfd5760031b600201556201238c818862004d46565b51906103e882101562004cfd5760006006620123ad9360031b015562004cdf565b62012290565b5095915093506020925062012229915062004cdf565b9291906020810151602681101562002a2357600303620123f6576020919262000faa62012229926202e1ae565b6020810151602681101562002a23576004036201269e576201242060c06040830151015162004cef565b51936201243560c06040840151015162004d13565b51906201245c60a06040620124508282880151015162004cef565b51950151015162004d13565b519362012471875184511462000fa3620331b7565b62012484875185511462000fa3620331b7565b62012497875186511462000fa3620331b7565b60005b87518110156201250057620124b0818662004d46565b51906103e882101562004cfd57620124fa916003906001600160a01b03620124d9848d62004d46565b5116600052811b0160205262000faa60406000205462007ce9838a62004d46565b6201249a565b509095919593929360005b83518110156201265b5762012521818762004d46565b516103e881101562004cfd576003906001600160a01b0362012544848862004d46565b5116600052811b016020526201256560406000205462007d56838862004d46565b9062012572838962004d46565b51916103e883101562004cfd57620125b6926003906001600160a01b036201259b878b62004d46565b5116600052811b0160205260406000205562000fa3620332bb565b620125c2818762004d46565b516103e881101562004cfd576003906001600160a01b03620125e5848c62004d46565b5116600052811b016020526201260660406000205462006814838862004d46565b91905062012615818862004d46565b51916103e883101562004cfd5762012655926003906001600160a01b036201263e858e62004d46565b5116600052811b0160205260406000205562004cdf565b6201250b565b50936201267591929693506200847962007e479162032f53565b9260005b835181101562012215578062000faa6200796262012698938762004d46565b62012679565b6020810151602681101562002a2357600503620126c8576020919262000faa62012229926202ec1a565b6020810151602681101562002a23576006036201288f57620126f260c06040830151015162004cef565b51936201271960a060406201270d8282870151015162004cef565b51940151015162004d13565b519285518351036200db485785518451036200dafb5760005b8651811015620127985762012748818562004d46565b51906103e882101562004cfd5762012792916003906001600160a01b0362012771848c62004d46565b5116600052811b0160205262000faa60406000205462007ce9838962004d46565b62012732565b509060005b86518110156201283957620127b3818562004d46565b516103e881101562004cfd576003906001600160a01b03620127d6848b62004d46565b5116600052811b01602052620127f760406000205462007d56838862004d46565b919062012805828762004d46565b51906103e882101562004cfd57620128339362000faa926003906001600160a01b036201259b878f62004d46565b6201279d565b5094916201284e919350620121cd9062032f53565b91604051946201285e8662002b3f565b60008652600036813760005b835181101562012215578062000faa6200796262012889938762004d46565b6201286a565b6020810151602681101562002a2357600703620129a15760400192620128ba60c08551015162004cef565b5191620128cc60a08651015162004cef565b5194515191620128e4845187511462000fa3620331b7565b60005b845181101562012215576201299b9062000faa6001600160a01b03806201290f848a62004d46565b51166000528660028b6201298b6201294e876201294681611f4097886020526200880e60ff604060002054161562000fa362033288565b519362004d46565b5191620088728d60405196620129648862002a7f565b60018852886200dc958c60208b01946000865260408c0197885260608c01998a5262004d46565b519101556200888d838962004d46565b620128e7565b6020819493940151602681101562002a235760080362012a385760c06040620129ce920151015162004cef565b519160005b835181101562012a265762012a20906001600160a01b0380620129f7838862004d46565b5116600052611f4090816020526200ddb1600160ff6040600020541615151462000fa3620331e7565b620129d3565b50926020919250620122299062004cdf565b6020810151602681101562002a235760090362012aba5760c0604062012a62920151015162004cef565b519160005b835181101562012a265762012ab4906001600160a01b038062012a8b838862004d46565b5116600052611f4090816020526200de9f600160ff6040600020541615151462000fa3620331e7565b62012a67565b6020810151602681101562002a2357600a0362012b68576040019062012aeb60a06200df3360c08551015162004cef565b519262012b00835185511462000fa3620331b7565b60005b835181101562012b555762012b4f906001600160a01b038062012b27838862004d46565b5116600052611f40806020526200dfa2600160ff6040600020541615151462000fa3620331e7565b62012b03565b5093620122299193506020925062004cdf565b602081949392940151602681101562002a2357600b0362012c1b576040019262012b9760c08551015162004cef565b519351519162012baf855184511462000fa3620331b7565b60005b855181101562012c085762012c029062000faa6001600160a01b038062012bda848b62004d46565b5116600052611f40806020526200e084600160ff6040600020541615151462000fa3620331e7565b62012bb2565b5093509160209150620122299062004cdf565b9091926020820151602681101562002a2357600c0362012cf8576060604083015101519262012c4a846202d698565b60005b845181101562012b555760c062012c6d8260606040880151015162004d46565b5101511562012cba5762012c8e62008c808260606040880151015162004d46565b611f4254908160001981011162001e0757600562008ca962012cb4936000190162005cba565b62012c4d565b62012cd262008cd38260606040880151015162004d46565b611f4254908160001981011162001e0757600562008ca962012cb4936000190162005c7a565b9291906020810151602681101562002a2357600d0362012ddc5760400192602062012d2860a08651015162004cef565b51945101519162012d3d85518451146202dd8c565b60005b855181101562012c08578062012d5b62012d9c928662004d46565b511562012da25762012d7262008d8c828962004d46565b62012d8a60ff600562008db662008daf858c62004d46565b600562008dd262008daf838a62004d46565b62012d40565b62012db262008dfb828962004d46565b62012dca60ff600562008db662008e1e858c62004d46565b600562008dd262008e1e838a62004d46565b6020819492940151602681101562002a2357600e0362012e8b5760400190602062012e0c60a08451015162004cef565b51925101519362012e2183518651146202dd8c565b60005b835181101562012c08578062012e3f62012e4b928862004d46565b5162012e515762004cdf565b62012e24565b62012e6162008eb6828762004d46565b62012e7960ff600562008ed962008daf858a62004d46565b600562008ca962008daf838862004d46565b906020829493940151602681101562002a2357600f0362012f69576060604083015101519262012ebb846202d698565b60005b845181101562012b555760c062012ede8260606040880151015162004d46565b5101511562012f2b5762012eff62008c808260606040880151015162004d46565b611f4254908160001981011162001e0757600562008dd262012f25936000190162005cba565b62012ebe565b62012f4362008cd38260606040880151015162004d46565b611f4254908160001981011162001e0757600562008dd262012f25936000190162005c7a565b906020819493940151602681101562002a235760100362012fda57604001519062012f9d60a0608084015193015162004cef565b519362012fb2835186511462000fa3620331b7565b60005b835181101562012c08578062000faa6200902b62012fd4938762004d46565b62012fb5565b6020819492940151602681101562002a23576011036201323c57604001906201300e60a06200df3360c08551015162004cef565b51936201301f83518651146202d510565b60005b83518110156201309957620130939062000faa6001600160a01b03806201304a848962004d46565b5116600052611f45806020526201306c60406000205462006814868d62004d46565b9190926201307b868b62004d46565b511660005260205260406000205562000fa36203316d565b62013022565b50935090620130a89062032e37565b90611f465493620130bf6200806884518762006200565b9060009260005b87811062013221575060005b855181101562013179576000805b8981106201312a575b501562013102575b620130fc9062004cdf565b620130d2565b93620130fc9062013121906001600160a01b036200e724888a62004d46565b949050620130f1565b620131358162004eb6565b90546001600160a01b0360039290921b1c81169062013155858b62004d46565b5116146201316e57620131689062004cdf565b620130e0565b5050600138620130e9565b5095509392506201318a8262004e62565b8051906001600160401b03821162002a9b57602090620131aa8362004ff7565b01611f46600052602060002060005b83811062013203575050505060005b828110620131e0575050506201222960209162004cdf565b620131fd9062000faa6001600160a01b03620019fb838662004d46565b620131c8565b82516001600160a01b031681830155602090920191600101620131b9565b936200e87062013236916200e8528762004eb6565b620130c6565b6020819492940151602681101562002a23576012036201348157604001906201327060a06200df3360c08551015162004cef565b51936201328183518651146202d510565b60005b8351811015620132d457620132ce9062000faa6001600160a01b0380620132ac848962004d46565b5116600052611f45806020526201306c60406000205462007d56868d62004d46565b62013284565b5093509190620132e49062032e37565b611f4654620132f38162004e62565b906000926000915b808310620133a857505050620133118262004e62565b8051906001600160401b03821162002a9b57602090620133318362004ff7565b01611f46600052602060002060005b8381106201338a575050505060005b82811062013367575050506201222960209162004cdf565b620133849062000faa6001600160a01b03620019fb838662004d46565b6201334f565b82516001600160a01b03168183015560209092019160010162013340565b91956000959193959760005b85518110156201347257620133c98962004eb6565b90546001600160a01b0360039290921b1c811690620133e9838962004d46565b5116146201340257620133fc9062004cdf565b620133b4565b509750956001959391955b8062013441575b156201342c57620134259062004cdf565b91620132fb565b936200e87062013425916200e8528762004eb6565b506201344d8162004eb6565b60018060a01b0391549060031b1c16600052611f456020526040600020541562013414565b5097969096959391956201340d565b6020810151602681101562002a2357601303620134da5760408091015101519260005b8451811015620134c9578062000faa6200959f620134c3938862004d46565b620134a4565b509250906201222960209162004cdf565b6020810151602681101562002a23576014036201368757604001906201350560c08351015162004cef565b51936201351c60a06200779b818651015162004cef565b51916201352d86518551146202df8a565b6201353c86518451146202dff0565b60005b8651811015620136325762013555818562004d46565b5162013562828762004d46565b51906103e882101562004cfd576006620135829260031b0154906200608f565b906201358f838862004d46565b51916103e883101562004cfd576006620135ae9360031b01556202e0aa565b620135ba818562004d46565b51620135c7828762004d46565b51906103e882101562004cfd57620135f0916003906001600160a01b0362012148868d62004d46565b9190620135fe828862004d46565b51906103e882101562004cfd576201362c9362000faa926003906001600160a01b036201219c878f62004d46565b6201353f565b5094915091620121cd620136469162032f53565b9360405192620136568462002b3f565b60008452600036813760005b835181101562012215578062000faa6200796262013681938762004d46565b62013662565b6020810151602681101562002a2357601503620136b1576020919262000faa62012229926202e1ae565b6020810151602681101562002a23576016036201370d5760c06040620136db920151015162004cef565b519260005b8451811015620134c957620137079062000faa6001600160a01b0362009d36838962004d46565b620136e0565b6020810151602681101562002a23576017036201376a5760405162461bcd60e51b81526020600482015260296024820152600080516020620339cc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a2357601803620137d55760c0604062013794920151015162004cef565b5192600160ff19611fb6541617611fb65560005b8451811015620134c957620137cf9062000faa6001600160a01b0362009e02838962004d46565b620137a8565b6020819392930151602681101562002a23576019036201394a5760008091604082910160a08082510151805162013911575b5050519060e0820151916201382b6200680d60c060018060a01b0393015162004cef565b511690602083519301915af13d1562013908573d906201384b8262002f5b565b916201385b604051938462002b94565b82523d6000602084013e5b156201387a57506201222960209162004cdf565b62004cdb90620138e760405191600080516020620338cc833981519152602084015278039bab1b1b2b9b9b33ab617102932ba3ab937103230ba309d1603d1b6040840152828151620138d6816059946020868601910162002e01565b810103603981018452018262002b94565b60405162461bcd60e51b815260206004820152918291602483019062002e26565b60609062013866565b6201391c9062004cef565b51516201392b575b8062013807565b8192506200680d90620139419251015162004cef565b51903862013924565b6020810151602681101562002a2357601a0362013a005760a0604062013974920151015162004cef565b516201398460038251146202d510565b6201398f8162004cef565b5191620139a8620139a08362004d13565b519262004d24565b51916200f9d55760209262012229926001036200a04357620139d2620139e091611fb1546200608f565b611fb15562000fa362033108565b62000faa620139f2611fb2546200607c565b611fb25562000fa362033142565b6020810151602681101562002a2357601b0362013e305750919062013a30611faf546200225a6200a0b962033044565b505062013a3c62033108565b506000805b6103e8811062013de4575b505062013a5862006161565b62013a66613f745462004e62565b906000946000905b6103e882101562013dd7578160031b9460ff6007870154161562013bbf5760009660028701541562013bae57600098975b62004cfd57600487015489101562013b945762013ac0896004890162004f5e565b9054600391821b1c6001600160a01b031660008181529189016020526040918290205491999162013af390889062005eb0565b9a9062013aff62033108565b62013b0a9162004cac565b60009a60028b015462013b1d9162005eb0565b919062013b2962033108565b62013b349162004cac565b82600052611f476020526000209081549062013b50916200608f565b90915562013b5d62033108565b62013b689162004cac565b62013b74828962004d46565b5262013b809062004cdf565b9862013b8c9062004cdf565b989762013a9f565b9290955062013ba69196975062004cdf565b909462013a6e565b9290955062013ba691965062004cdf565b95969392509350505b62013bd38262004e62565b9160009160005b82811062013d4157505050611f48549162013bfa62008068848462006200565b926000906000905b80821062013d2457505060005b83811062013c8e5750508251929150506001600160401b03821162002a9b5760209062013c3c8362004fbc565b01611f48600052602060002060005b83811062013c705750505050620122296020916000611fb1556000611fb25562004cdf565b82516001600160a01b03168183015560209092019160010162013c4b565b6000805b83811062013cdc575b501562013cb4575b62013cae9062004cdf565b62013c0f565b9062013cae9062013cd3906001600160a01b03620081f0858762004d46565b91905062013ca3565b6001600160a01b038062013cf1858862004d46565b51169062013d00838a62004d46565b51161462013d195762013d139062004cdf565b62013c92565b505060013862013c9b565b9091620081fe62013d3a91620094f58562004e9a565b9062013c02565b6000805b85811062013d8f575b501562013d67575b62013d619062004cdf565b62013bda565b9262013d619062013d86906001600160a01b03620081f0878662004d46565b93905062013d56565b6001600160a01b038062013da4858762004d46565b51169062013db3838a62004d46565b51161462013dcc5762013dc69062004cdf565b62013d45565b505060013862013d4e565b9394959291505062013bc8565b8060039594951b9060ff6007830154161562013e26576200a4f86200746162000faa946200a4ec62013e1d9560026200a4e28762005e1c565b93929362013a41565b5093929362013a4c565b6020810151602681101562002a2357601c0362013e8d5760405162461bcd60e51b8152602060048201526029602482015260008051602062033acc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a2357601d0362013eb3575b506201222960209162004cdf565b9290916020840151602681101562002a2357601e03620145d557604084019060a09062013ee4828451015162004cef565b515162013ef5838551015162004d13565b5151036200ade95762013f0c828451015162004cef565b515162013f1d838551015162004d24565b5151036200ad6d5762013f34828451015162004cef565b519462013f45838551015162004d13565b519162013f5a6200a641858751015162004d24565b519585518751036200ad0a5760005b865181101562013fc25762013f7f818862004d46565b51906103e882101562004cfd57600362013fbc9260018060a01b038d5116600052811b0160205262000faa60406000205462007ce9838c62004d46565b62013f69565b5090969192939660005b86518110156201406b5762013fe2818862004d46565b516103e881101562004cfd5760039060018060a01b038c5116600052811b016020526201401a60406000205462007d56838b62004d46565b919062014028828a62004d46565b51906103e882101562004cfd576201406593600362000faa938f60018060a01b03905116600052811b0160205260406000205562000fa3620332bb565b62013fcc565b50939692979550936201407e9062032f53565b96604051966201408e8862002b78565b60018852602036818a013786516001600160a01b0316620140af8962004cef565b5260405196620140bf8862002b3f565b600088526000610760525b895161076051908110156201447c57620140e5908b62004d46565b5161072052620140f6885162004e62565b99600097620141068b5162004e62565b6109405260009760005b8b51811015620141d6578d8c620141406001600160a01b0362014134858462004d46565b51166107205162032d3b565b158062014190575b62014161575b50506201415b9062004cdf565b62014110565b9b620141859162001ac782859f62007f376201415b9760018060a01b039262004d46565b9a90508d8c6201414e565b5050506103e861072051101562004cfd576001600160a01b03620141b5828e62004d46565b5116600052600361072051811b016020528d8c604060002054151562014148565b50909b989a99949691929395979b60005b8b518110156201427b576103e861072051101562004cfd576001600160a01b0362014213828e62004d46565b5116600052600361072051811b016020526040600020541562014242575b6201423c9062004cdf565b620141e7565b9c620142726201423c918f620142618f9160018060a01b039262004d46565b511662001ac7826109405162004d46565b9d905062014231565b509b5098959092949691939661072051996103e88b10159c8d62004cfd57620142b26200806860048f9e60031b01549e8f62006200565b6108e0526000610a20528d60009e5b62004cfd578d8f101562014380575060009d62014309620142ec8260046107205160031b0162004f5e565b90546109405160039290921b1c6001600160a01b03169062032dea565b1562014323575b6201431c8f9162004cdf565b9e620142c1565b6201431c9e5060009e8f91620143438160046107205160031b0162004f5e565b60018060a01b0391549060031b1c1662014364610a20516108e05162004d46565b5262014373610a205162004cdf565b610a205291505062014310565b9396999b929d509396999094979b5060005b828110620144305750505062004cfd576108e051516001600160401b03811162002a9b57620143cb8160046107205160031b016200509a565b60206108e051019060046107205160031b0160005260206000209160005b828110620144125750505050620144036107605162004cdf565b610760529598909498620140ca565b81516001600160a01b031681850155602090910190600101620143e9565b62014476906001600160a01b0362014449828562004d46565b51166201445d610a20516108e05162004d46565b526201446c610a205162004cdf565b610a205262004cdf565b62014392565b509492975094955091965060009460005b8751811015620144e057620144ab6200abc66200abb9838962004d46565b80620144c4575b50620144be9062004cdf565b6201448d565b906200abfc620144d998620144be936200608f565b90620144b2565b5096509450929091508062014502575b5050620122296020915b915062013ea5565b6201452d9060018060a01b038351166000526200ac5a611f459182602052604060002054906200608f565b60018060a01b03835116600052602052604060002055600080611f4654905b8181106201458b575b5050916201222991602093156201456f575b5091620144f0565b5162014584906001600160a01b0316620065d6565b3862014567565b620145968162004eb6565b9054855160039290921b1c6001600160a01b03908116911614620145c557620145bf9062004cdf565b6201454c565b5060019150829050602062014555565b9190926020810151602681101562002a2357601f0362014610576020916201460a6200ae9d6040620122299401515162004cef565b620144fa565b6020810151602681101562002a235760200362014636575b5062012229602091620144fa565b6020810151602681101562002a2357602180910362014657575b5062014628565b602082015160268110156200b01a57602203620146945750506201222960209160ff19611fb65416611fb6556201468d62005087565b9162014650565b602082015160268110156200b01a57602303620146bb575b5050620122296020916201468d565b60208201519060268210156201478c576024809203620146dd575b50620146ac565b602083015160268110156201477957602514620146d65760208301519060268210156201476557506015036201472857506020916201472062012229926202e1ae565b9138620146d6565b60649060166040519162461bcd60e51b83526020600484015282015275496e76616c6964206f7065726174696f6e207479706560501b6044820152fd5b9050634e487b7160e01b6000526004526000fd5b50634e487b7160e01b6000526004526000fd5b634e487b7160e01b60005260045260246000fd5b8151620147b6906001600160a01b031662006600565b62011f21565b620147c78162004f0a565b9054865160039290921b1c6001600160a01b03908116911614620147f657620147f09062004cdf565b62011f0f565b5050506001388062011f18565b82516001600160a01b0316600160401b82101562002a9b5762001a08826001620148329401613f025562004eee565b386200bbb0565b620148448162004eee565b9054865160039290921b1c6001600160a01b0390811691161462014873576201486d9062004cdf565b6200bb9f565b50506001386200bba8565b82516001600160a01b0316818301556020909201916001016200bad5565b82516001600160a01b0316818301556020909201916001016200b988565b600191820180546001600160a01b03909216848601559390910192906200b8d7565b613f6d60005262014903906000805160206203396c83398151915290810190830162004fa3565b386200b898565b600180826201491b82948662014d65565b019201920191906200b85a565b613f6c600052600080516020620337ac833981519152908282015b8183018110620149555750506200b81f565b806201496360019262005399565b0162014943565b600191820180546001600160a01b03909216848601559390910192906200b7f0565b613f6b600052620149b3906000805160206203376c83398151915290810190830162004fa3565b386200b7b1565b6001809193019182549381613f0301550190916200b754565b82516001600160a01b0316818301556020909201916001016200b66d565b62014a0c90613f026000528484600020918201910162004fa3565b386200b65d565b82516001600160a01b0316818301556020909201916001016200b489565b62014a4c90613ef96000528484600020918201910162004fa3565b386200b479565b8062014a759160031b600160ff60078301541615151462014a7b575062004cdf565b6200b3ce565b62014a8e60048201611fbc830162014efe565b611fbf8101600160ff19825416179055805481611fb801556001810154611fb98201556002810154611fba82015562014acf60058201611fbd830162014d65565b611fbe6006820154910155386200a043565b600660208262014af560019451866200581b565b019201920191906200b1d7565b600681810204810362001e0757600683810204830362001e0757613efa6000527f2dfc264c6ecd0c6ea7ea3726867a09cc7eed901a6e437c010038bab559d48ed86006840281015b826006028201811062014b5f5750506200b1c4565b806000600692556000600182015562014b7b6002820162005504565b6000600382015562014b906004820162005399565b600060058201550162014b4a565b600660208262014bb260019451866200581b565b019201920191906200b14c565b8060060290600682040362001e07578260060260068104840362001e0757600090613efb82526020822092830192015b82811062014bff5750506200b139565b80826006925582600182015562014c196002820162005504565b82600382015562014c2d6004820162005399565b8260058201550162014bef565b608460405162461bcd60e51b815260206004820152604060248201526000805160206203394c83398151915260448201527f656d2073686f756c64206e6f742072657475726e20766f7465206e65656465646064820152fd5b60405162461bcd60e51b815260206004820152604760248201526000805160206203394c83398151915260448201527f656d2073686f756c64206e6f742072657475726e206120766f74696e672072756064820152661b19481b1a5cdd60ca1b608482015260a490fd5b81811462014d61578154916001600160401b03831162002a9b5762014d2383836200509a565b60005260206000209060005260206000208154916000925b84841062014d4a575050505050565b600180919201938454928185015501929062014d3b565b5050565b9080821462014d615762014d7a815462002c79565b906001600160401b03821162002a9b57819062014da48262014d9d865462002c79565b86620056d5565b600090601f831160011462014ddd5760009262014dd15750508160011b916000199060031b1c1916179055565b01549050388062005768565b81526020808220858352818320935090601f1985169083905b82821062014e3257505090846001959493921062014e1857505050811b019055565b015460001960f88460031b161c19169055388080620057b5565b849581929585015481556001809101960194019062014df6565b81811462014d615781549162014e63838362005427565b6000526020600020906000526020600020906000905b83821062014e875750505050565b8062014e966001928562014d65565b92810192918101910162014e79565b81811462014d615781549162014ebc8383620054b5565b6000526020600020906000526020600020906000905b83821062014ee05750505050565b8062014eef6001928562014cfd565b92810192918101910162014ed2565b81811462014d61578154916001600160401b03831162002a9b5762014f2483836200509a565b60005260206000209060005260206000208154916000925b84841062014f4b575050505050565b600191820180546001600160a01b039092168486015593909101929062014f3c565b81811462014d615781549162014f848383620054b5565b6000526020600020906000526020600020906000905b83821062014fa85750505050565b8062014fb76001928562014efe565b92810192918101910162014f9a565b81811462014d615781549162014fdd8383620055b8565b6000526020600020906000526020600020906000905b838210620150015750505050565b8060019184036201501e575b600880910193019101909162014ff3565b805484556201504b8280860190830160ff906201503f82825416846200569a565b5460081c1690620056b4565b6002808201549085015562015067600380830190860162014cfd565b600480850190820180820362015080575b50506201500d565b6201508b9162014e4c565b6201509d600580830190860162014ea5565b620150af600680830190860162014f6d565b620150c1600780830190860162014d65565b388062015078565b919062005d3057808203620150dc575050565b60ff60058062002c3b94620150f5848654168262005681565b6001850154600182015562015111600286016002830162014fc6565b600385015460038201556201512d600486016004830162014d65565b0192016201513f8282541684620057f2565b5460081c169062005803565b9080821462014d6157908154906000915b606483106201516b5750505050565b60018091940192835494818401550191926201515c565b90611f42549060009060208401805151906201519e8262002c61565b91620151ae604051938462002b94565b808352620151bf601f199162002c61565b01366020840137620151d48151518662005eb0565b9015620155c657620151e69062004e62565b92849180515115620155bb57620152008793929362004e62565b95915b81515183101562015404576000958687805b8c8c83109182156201537d576201522e89895162004d46565b5194600092839662015241859662015a04565b620152528588846001948562015bb7565b6201533e575b508284118062015328575b15620152cd575050509183918b620152c3575b600685101562002a23578c8f95600314620152a3575b5050620152999062004cdf565b9190925062015215565b9b620152ba9162001ac78262015299959f62004d46565b9a908c6201528c565b60009b5062015276565b909391809593148062015312575b15620153045750600685101562002a23578c8f95600314620152a3575050620152999062004cdf565b945050620152999062004cdf565b5050600685101562002a23578e851515620152db565b5050600686101562002a23578f86151562015263565b92935093509450620153508462005cba565b5001549060ff620153618562005cba565b505416946003620153728662005cba565b500154933862015258565b50505050969096949391946201539f8162015399858a62004d46565b620035e5565b600681101562002a2357600314620153c6575b50620153be9062004cdf565b919262015203565b6000905b808210620153d95750620153b2565b9094620092e0620153fd91620153f0888c62004d46565b5162001ac7828c62004d46565b90620153ca565b9650505094509150600093845b83518610156201555657620154316201542b878662004d46565b62005673565b9060068083101562002a235760029283036201545c57505062015455909562004cdf565b9462015411565b6201546c6201542b898862004d46565b928184101562002a235760018094148062015542575b15620154975750505062015455909562004cdf565b620154ac6201542b8a899b9694959b62004d46565b928084101562002a23576004809414928362015516575b5082620154eb575b5050620154df575b50620154559062004cdf565b955062015455620154d3565b90915088101562015501578714153880620154cb565b602182634e487b7160e01b6000525260246000fd5b908093508a10156201552d578914159138620154c3565b602184634e487b7160e01b6000525260246000fd5b508183101562002a23578083141562015482565b925092909350600682101562002a235760038203620155b2575b6201557b8162004e62565b9360005b8281106201558e575050509190565b806201559f620155ac928462004d46565b5162001ac7828962004d46565b6201557f565b50600062015570565b509450505092509190565b60405162461bcd60e51b815260206004820152602a60248201527f546865206c656e677468206f6620766f74696e672072756c65206c697374206960448201526973206f766572666c6f7760b01b6064820152608490fd5b90611f43549060009060208401805151906201563a8262002c61565b916201564a604051938462002b94565b8083526201565b601f199162002c61565b01366020840137620156708151518662005eb0565b9015620155c657620156829062004e62565b92849180515115620155bb576201569c8793929362004e62565b95915b8151518310156201588a576000958680805b8c8c82109283156201581557620156ca89895162004d46565b5194600092620156eb848683829a620156e4849b62015a04565b8362015bb7565b620157d6575b81841180620157c0575b1562015764575050509083928b6201575a575b600685101562002a23578c8f956003146201573a575b5050620157319062004cdf565b909250620156b1565b9b620157519162001ac78262015731959f62004d46565b9a908c62015724565b60009b506201570e565b908094939592951480620157aa575b156201579c5750600685101562002a23578c8f956003146201573a575050620157319062004cdf565b945050620157319062004cdf565b5050600685101562002a23578e85151562015773565b5050600686101562002a23578f861515620156fb565b9450945090506001620157e98362005c7a565b5001549060ff620157fa8462005c7a565b5054169460036201580b8562005c7a565b50015494620156f1565b935050505096909694939194620158328162015399858a62004d46565b600681101562002a235760031462015859575b50620158519062004cdf565b91926201569f565b6000905b8082106201586c575062015845565b9094620092e06201588391620153f0888c62004d46565b906201585d565b9650505094509150600093845b8351861015620159ac57620158b16201542b878662004d46565b9060068083101562002a23576002928303620158dc575050620158d5909562004cdf565b9462015897565b620158ec6201542b898862004d46565b928184101562002a235760038094148062015998575b156201591757505050620158d5909562004cdf565b6201592c6201542b8a899b9694959b62004d46565b928084101562002a23576005809414928362015981575b50826201596b575b50506201595f575b50620158d59062004cdf565b9550620158d562015953565b90915088101562002a235787141538806201594b565b908093508a101562002a2357891415913862015943565b508183101562002a23578083141562015902565b925092909350600682101562002a235760038203620159fb575b620159d18162004e62565b9360005b828110620159e4575050509190565b806201559f620159f5928462004d46565b620159d5565b506000620159c6565b1562015a0c57565b60405162461bcd60e51b815260206004820152602860248201527f506c7567696e466163746f72793a20706c7567696e20696e646578206f7574206044820152676f662072616e676560c01b6064820152608490fd5b9062002c3b606160405180947f436865636b696e6720636f6e646974696f6e206578703a20706c7567696e206960208301527f6e646578206f7574206f662072616e67652c20706c7567696e20696e6465783a6040830152600160fd1b606083015262015ad9815180926020868601910162002e01565b810103604181018552018362002b94565b606d62002c3b919392936040519485917f436865636b696e6720636f6e646974696f6e206578703a206e6f646520696e6460208401527f6578206f7574206f662072616e67652c20706c7567696e20696e6465783a2000604084015262015b5c815180926020605f8701910162002e01565b82016d016103737b2329034b73232bc1d160951b605f82015262015b8a825180936020878501910162002e01565b0103604d81018552018362002b94565b805482101562004cfd5760005260206000209060031b0190600090565b93929190841562015f485762015be1611f4254841062000fa362015bdb86620050f5565b62015a62565b62015c18600262015bf28562005cba565b500154851062000fa362015c0686620050f5565b62015c1188620050f5565b9062015aea565b841562015f295762015c48600162015c3f86600262015c378862005cba565b500162015b9a565b50015460ff1690565b945b62015c558662002fc4565b8562015c6657505050505050600090565b62015c718662002fc4565b60039580870362015c885750505050505050600190565b62015c938162002fc4565b6004810362015ca85750505050505050600090565b62015cb38162002fc4565b6001810362015cc95750620032d2955062015f78565b91959392949062015cda8362002fc4565b600280931462015cf1575b50505050505050600090565b801562015f0b5762015d1b600162015d0f848662015c378962005cba565b50015460081c60ff1690565b935b811562015eef578562015d36848662015c378562005cba565b500154965b62015d468862004e62565b9860005b89811062015e645750505050505062015d638262002a18565b6001820362015dc657505050906001916000915b81831062015d855750505090565b9091928062015da3575b62015d9b909362004cdf565b919062015d77565b5062015d9b62015dbe62015db8858462004d46565b51151590565b905062015d8f565b62015dd18262002a18565b810362015e2b5750509060009182915b81831062015def5750505090565b909192801562015e0e575b62015e06909362004cdf565b919062015de1565b5062015e0662015e2362015db8858462004d46565b905062015dfa565b90915062015e398162002a18565b1462015e4d57503880808080808062015ce5565b62015e6062015db8620032d29262004cef565b1590565b808b62015ead828c8a8c8a8c1562015ece5762015ea3949262015e99949262015c3762015e919362005cba565b500162004f5e565b90549060031b1c90565b8787878b62015bb7565b62015ec162015ec89462000faa9362004d46565b9015159052565b62015d4a565b62015ee9949262015e99949262015c3762015e919362005c7a565b62015ea3565b8562015f01848662015c378562005c7a565b5001549662015d3b565b62015f22600162015d0f848662015c378962005c7a565b9362015d1d565b62015f41600162015c3f86600262015c378862005c7a565b9462015c4a565b62015f61611f4354841062000fa362015bdb86620050f5565b62015f72600262015bf28562005c7a565b62015c18565b9392600462015fc291866000146201619057600262015f9d878262015c378562005cba565b500154955b87156201617f57600262015c3762015fba9362005cba565b5001620036ac565b916032841115620161735760338410158062016167575b6201615a576097841015806201614e575b620161415760d38410158062016134575b620161285761012d841015806201611c575b6201610f576101918410158062016102575b620160f5576101af84101580620160e8575b620160db576101cd84101580620160ce575b620160c1576101f584101580620160b4575b620160a757610259841015806201609a575b6201608c57506102bd831015620160815750505050600090565b620032d293620241b4565b9050620032d293506202b4f1565b506102bc84111562016067565b50620032d293506201e3df565b5061025884111562016055565b50620032d293506202be55565b506101f484111562016043565b50620032d293506202c8b8565b506101cc84111562016031565b50620032d2935062023923565b506101ae8411156201601f565b50620032d2935062028765565b5061019084106201600d565b50620032d293620161ad565b5061012c84111562015ffb565b50620032d2935062023f9f565b5060b484111562015fea565b5050620032d2926201f03f565b50609584111562015fd9565b50620032d29362025742565b600262015c3762015fba9362005c7a565b6002620161a3878262015c378562005c7a565b5001549562015fa2565b9260d381146201677c5760d481146201676f5760d58114620167625760d68114620167555760d78114620167485760d881146201673b5760d981146201672f5760da8114620167225760db8114620167155760dc8114620167095760dd8114620166fa5760de8114620166eb5760df8114620166de5760e08114620166d15760e18114620166c55760e28114620166b85760e38114620166ab5760e481146201669f5760e58114620166905760e68114620166815760e78114620166745760e88114620166675760e981146201665a5760ea81146201664d5760eb8114620166405760ec8114620166335760ed8114620166265760ee8114620166195760ef81146201660c5760f08114620165ff5760f18114620165f25760f28114620165e55760f38114620165d85760f48114620165cb5760f58114620165be5760f68114620165b15760f78114620165a45760f88114620165975760f981146201658b5760fa81146201657f5760fb8114620165735760fc8114620165675760fd81146201655b5760fe81146201654f5760ff811462016543576101008114620165375761010181146201652b5761010281146201651f5761010381146201651357610104811462016507576101058114620164fb576101068114620164ef576101078114620164e3576101088114620164d7576101098114620164cb5761010a8114620164bf5761010b8114620164b35761010c8114620164a75761010d81146201649b5761010e81146201648f5761010f811462016483576101108114620164775761011181146201646b5761011281146201645f57610113811462016453576101148114620164475761011581146201643b57610116146201643057505050600090565b620032d2926201da96565b50620032d2926201d86d565b50620032d2926201d644565b50620032d2926201d341565b50620032d2926201d120565b50620032d2926201ceff565b50620032d2926201cccd565b50620032d2926201cb04565b50620032d2926201c93b565b50620032d2926201c703565b50620032d2926201c53c565b50620032d2926201c20d565b50620032d2926201bfdb565b50620032d2926201be12565b50620032d2926201bc49565b50620032d2926201ba84565b50620032d2926201b84c565b50620032d2926201b685565b50620032d2926201b34f565b50620032d2926201b0ef565b50620032d2926201af1e565b50620032d2926201ad3d565b50620032d2926201ab76565b50620032d2926201a920565b50620032d2926201a757565b50620032d2926201a58e565b50620032d2926201a2ad565b50620032d29262019fad565b50620032d29262019cc0565b50620032d292620199c0565b50620032d292506201983b565b50620032d29250620196f6565b50620032d2925062019584565b50620032d292506201943f565b50620032d29250620192fa565b50620032d29250620191b6565b50620032d2925062019041565b50620032d2925062018efd565b50620032d2925062018db9565b50620032d2925062018c78565b50620032d2925062018b35565b50620032d29250620189f4565b50620032d29250620188ab565b50620032d2925062018767565b50620032d2925062018623565b50620032d29250620184ae565b50620032d2925062018310565b50620032d29250620181cd565b509050620032d2915062018172565b509050620032d2915062018115565b50620032d29262017ed7565b50620032d2925062017d48565b50620032d2925062017bf9565b50620032d292620179e2565b50620032d292506201783a565b50620032d29250620176ed565b509050620032d2915062017692565b509050620032d2915062017625565b50620032d292620173d9565b50620032d292506201724a565b50620032d29250620170f5565b50620032d29262016ec7565b50620032d2925062016d0f565b50620032d2925062016bb3565b50620032d2925062016ab2565b50620032d2925062016985565b50620032d2925062016884565b50620032d2925090602001906001825151036201682b576001620167a1835162004cef565b515103620167d157620167b4906201dd9d565b919015620065cf576200680d620167cc915162004cef565b511090565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231313a205468652055494e545f324441525241595b305d206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3231313a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b90602001906001825151036201692c576001620168a2835162004cef565b515103620168d257620168b5906201dd9d565b919015620065cf576200680d620168cd915162004cef565b511190565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231323a205468652055494e545f324441525241595b305d206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3231323a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b906020019060018251510362016a59576002620169a3835162004cef565b515103620169fd57620169b6906201dd9d565b9015620065cf57620169cd6200680d835162004cef565b518110159182620169dd57505090565b620169f7919250620169f0905162004cef565b5162004d13565b51101590565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231333a205468652055494e545f324441525241595b305d206c60448201526d32b733ba341034b9903737ba101960911b6064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3231333a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b906020019060018251510362016b5a57600162016ad0835162004cef565b51510362016b005762016ae3906201dd9d565b919015620065cf576200680d62016afb915162004cef565b511490565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231343a205468652055494e545f324441525241595b305d206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3231343a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b90604001600191828251510362016cb5578262016bd1835162004cef565b51510362016c5b5762016be4906201e110565b15620065c757829160009182945b62016c00575b505050905090565b805185101562016c55576001600160a01b038062016c1f878462004d46565b51169062016c326200680d855162004cef565b51160362016c4d5762016c46849562004cdf565b9462016bf2565b505091505090565b62016bf8565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3231353a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231353a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90604001600191828251510362016e6d578262016d2d835162004cef565b51511062016e135762016d40906201e110565b15620065c757600091835b62016d57575b50505090565b815183101562016e0d57600080855b62016d8f575b501562016d865762016d7f849362004cdf565b9262016d4b565b50505050600090565b62016da08396949295965162004cef565b515181101562016e02576001600160a01b038062016dbf888562004d46565b51169062016dd3836200743f875162004cef565b51161462016df5579062016de984939262004cdf565b90939594919262016d66565b5091809493503862016d6c565b949390929462016d6c565b62016d51565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3231363a2054686520414444524553535f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231363a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201709b578462016ee9845162004cef565b515103620170415762016efc906201e110565b1562016f9a5784931562016fb1576000935b62016f1a575050505090565b8051841015620051fe576001600160a01b038062016f39868462004d46565b5116600052611f4080845260409060ff8260002054161562016fa45760029262016f64888662004d46565b51166000528452600020015462016f806200680d855162004cef565b510362016f9a5762016f93859462004cdf565b9362016f0e565b5050505050600090565b5050505050505050600090565b6000935b62016fc1575050505090565b8051841015620051fe576001600160a01b038062016fe0868462004d46565b5116600052613ef880845260409060ff8260002054161562016fa4576002926201700b888662004d46565b511660005284526000200154620170276200680d855162004cef565b510362016f9a576201703a859462004cdf565b9362016fb5565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3231373a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3231373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906040016001918282515103620171f0578262017113835162004cef565b515103620171965762017126906201e110565b91909115620065c757600091835b620171425750505050600090565b8051831015620171905783926001600160a01b038062017163838562004d46565b511690620171766200680d865162004cef565b511614620051c457620171899062004cdf565b9262017134565b62016d86565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3231383a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231383a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060400160019182825151036201737f578262017268835162004cef565b51511062017325576201727b906201e110565b15620065c75782916000935b620172955750505050600090565b815184101562017190576000835b620172bd575b50620172b6839462004cdf565b9362017287565b939291620172cc825162004cef565b51518510156201731c576001600160a01b0380620172eb868462004d46565b511690620172ff876200743f865162004cef565b51161462016c4d576201731483949562004cdf565b9092620172a3565b919293620172a9565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3231393a2054686520414444524553535f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3231393a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90916020809101906001938483515103620175cb5784620173fb845162004cef565b51510362017571576201740e906201e110565b9190911562016f9a57849315620174cf576000935b62017432575050505050600090565b8151841015620174c95784936001600160a01b03908162017454828662004d46565b5116600052611f4080845260409060ff82600020541662017485575b50506201747e915062004cdf565b9362017423565b8293620174956002948862004d46565b511660005284526000200154620174b16200680d865162004cef565b5114620174c15780388062017470565b505050505090565b62016f9a565b6000935b620174e2575050505050600090565b8151841015620174c95784936001600160a01b03908162017504828662004d46565b5116600052613ef880845260409060ff82600020541662017535575b50506201752e915062004cdf565b93620174d3565b8293620175456002948862004d46565b511660005284526000200154620175616200680d865162004cef565b5114620174c15780388062017520565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3232303a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3232303a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b62017630816201e110565b91909115620065cf57815115620065cf57600090815b835181101562017689576001600160a01b038062017665838762004d46565b5116908351160362017682576201767c9062004cdf565b62017646565b5050905090565b50505050600190565b6201769d816201e110565b91909115620065cf57815115620065cf5760005b8251811015620065c7576001600160a01b0380620176d0838662004d46565b51169083511614620065b457620176e79062004cdf565b620176b1565b906040016001918282515103620177e057826201770b835162004cef565b51510362017786576201771e906201e199565b15620065c757829160009182945b6201773957505050905090565b805185101562016c55576001600160a01b038062017758878462004d46565b5116906201776b6200680d855162004cef565b51160362016c4d576201777f849562004cdf565b946201772c565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3232333a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3232333a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90604001600191828251510362017988578262017858835162004cef565b5151106201792e576201786b906201e199565b15620065c757600091835b620178815750505090565b815183101562016e0d57600080855b620178b0575b501562016d8657620178a9849362004cdf565b9262017876565b620178c18396949295965162004cef565b515181101562017923576001600160a01b0380620178e0888562004d46565b511690620178f4836200743f875162004cef565b5116146201791657906201790a84939262004cdf565b90939594919262017890565b5091809493503862017896565b949390929462017896565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3232343a2054686520414444524553535f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3232343a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9091602080910190600193848351510362017b9f578462017a04845162004cef565b51510362017b455762017a17906201e199565b1562016f9a5784931562017ab5576000935b62017a35575050505090565b8051841015620051fe576001600160a01b038062017a54868462004d46565b5116600052611f4080845260409060ff8260002054161562016fa45760029262017a7f888662004d46565b51166000528452600020015462017a9b6200680d855162004cef565b510362016f9a5762017aae859462004cdf565b9362017a29565b6000935b62017ac5575050505090565b8051841015620051fe576001600160a01b038062017ae4868462004d46565b5116600052613ef880845260409060ff8260002054161562016fa45760029262017b0f888662004d46565b51166000528452600020015462017b2b6200680d855162004cef565b510362016f9a5762017b3e859462004cdf565b9362017ab9565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3232353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3232353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90604001600191828251510362017cee578262017c17835162004cef565b51510362017c945762017c2a906201e199565b91909115620065c757600091835b62017c465750505050600090565b8051831015620171905783926001600160a01b038062017c67838562004d46565b51169062017c7a6200680d865162004cef565b511614620051c45762017c8d9062004cdf565b9262017c38565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3232363a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3232363a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90604001600191828251510362017e7d578262017d66835162004cef565b51511062017e235762017d79906201e199565b15620065c75782916000935b62017d935750505050600090565b815184101562017190576000835b62017dbb575b5062017db4839462004cdf565b9362017d85565b93929162017dca825162004cef565b515185101562017e1a576001600160a01b038062017de9868462004d46565b51169062017dfd876200743f865162004cef565b51161462016c4d5762017e1283949562004cdf565b909262017da1565b91929362017da7565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3232373a2054686520414444524553535f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3232373a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90916020809101906001938483515103620180bb578462017ef9845162004cef565b515103620180615762017f0c906201e199565b9190911562016f9a5784931562017fbf576000935b62017f30575050505050600090565b8151841015620174c95784936001600160a01b03908162017f52828662004d46565b5116600052611f4080845260409060ff82600020541662017f83575b505062017f7c915062004cdf565b9362017f21565b829362017f936002948862004d46565b51166000528452600020015462017faf6200680d865162004cef565b5114620174c15780388062017f6e565b6000935b62017fd2575050505050600090565b8151841015620174c95784936001600160a01b03908162017ff4828662004d46565b5116600052613ef880845260409060ff82600020541662018025575b50506201801e915062004cdf565b9362017fc3565b8293620180356002948862004d46565b511660005284526000200154620180516200680d865162004cef565b5114620174c15780388062018010565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3232383a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3232383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b62018120816201e199565b91909115620065cf57815115620065cf57600090815b835181101562017689576001600160a01b038062018155838762004d46565b5116908351160362017682576201816c9062004cdf565b62018136565b6201817d816201e199565b91909115620065cf57815115620065cf5760005b8251811015620065c7576001600160a01b0380620181b0838662004d46565b51169083511614620065b457620181c79062004cdf565b62018191565b906020016001918282515103620182b65782620181eb835162004cef565b5151036201825c57620181fe906201e1d2565b905015620065c757829160009182945b6201821b57505050905090565b805185101562016c555762018231858262004d46565b51620182426200680d845162004cef565b510362016c4d5762018255849562004cdf565b946201820e565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201845457826201832e835162004cef565b515110620183fa5762018341906201e1d2565b905015620065c757600091835b620183595750505090565b815183101562016e0d57600080855b62018388575b501562016d865762018381849362004cdf565b926201834e565b620183998396949295965162004cef565b5151811015620183ef57620183af868362004d46565b51620183c1826200743f865162004cef565b5114620183e25790620183d684939262004cdf565b90939594919262018368565b509180949350386201836e565b94939092946201836e565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3233323a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020016001918282515103620185c9576002620184cd835162004cef565b5151036201856f57620184e0906201e1d2565b905091909115620065c757829160009182945b6201850057505050905090565b815185101562016c555762018516858362004d46565b51620185276200680d835162004cef565b5111801562018549575b62016c4d5762018542849562004cdf565b94620184f3565b5062018556858362004d46565b5162018567620169f0835162004cef565b511062018531565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233333a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201870d578262018641835162004cef565b515103620186b35762018654906201e1d2565b905015620065c757829160009182945b6201867157505050905090565b805185101562016c555762018687858262004d46565b51620186986200680d845162004cef565b51101562016c4d57620186ac849562004cdf565b9462018664565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362018851578262018785835162004cef565b515103620187f75762018798906201e1d2565b905015620065c757829160009182945b620187b557505050905090565b805185101562016c5557620187cb858262004d46565b51620187dc6200680d845162004cef565b51111562016c4d57620187f0849562004cdf565b94620187a8565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201899a5782620188c9835162004cef565b5151036201894057620188dc906201e1d2565b9093915015620065c7578060009384925b62018906575b5050506200680d620167cc915162004cef565b909193815185101562018939576200e870620189309162018928878562004d46565b519062006200565b919081620188ed565b93620188f3565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233363a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362018adb578262018a12835162004cef565b51510362018a815762018a25906201e1d2565b9093915015620065c7578060009384925b62018a4f575b5050506200680d620168cd915162004cef565b909193815185101562018a7a576200e87062018a719162018928878562004d46565b91908162018a36565b9362018a3c565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233373a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200190600190818351510362018c1e57600262018b55845162004cef565b51510362018bc45762018b68906201e1d2565b90915015620065c757906000918183925b62018b92575b505050620169cd6200680d835162004cef565b909192825184101562018bbd576200647f62018bb49162018928868662004d46565b91908062018b79565b9262018b7f565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233383a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362018d5f578262018c96835162004cef565b51510362018d055762018ca9906201e1d2565b9093915015620065c7578060009384925b62018cd3575b5050506200680d62016afb915162004cef565b909193815185101562018cfe576200e87062018cf59162018928878562004d46565b91908162018cba565b9362018cc0565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3233393a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3233393a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362018ea3578262018dd7835162004cef565b51510362018e495762018dea906201e1d2565b9092915015620065c757600091835b62018e075750505050600090565b805183101562017190578262018e1f85948362004d46565b5162018e306200680d855162004cef565b5110620051c45762018e429062004cdf565b9262018df9565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234303a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234303a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362018fe7578262018f1b835162004cef565b51510362018f8d5762018f2e906201e1d2565b9291921562016d8657600092845b62018f4b575050505050600090565b8051841015620174c9578362018f6386958462004d46565b5162018f746200680d865162004cef565b5111620174c15762018f869062004cdf565b9362018f3c565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201915c57600262019060835162004cef565b515103620191025762019073906201e1d2565b929091921562016d8657600092845b62019091575050505050600090565b8051841015620174c95783620190a986958562004d46565b51620190ba6200680d855162004cef565b51111580620190db575b620174c157620190d49062004cdf565b9362019082565b50620190e8818562004d46565b51620190f9620169f0855162004cef565b511015620190c4565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234323a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020016001918282515103620192a05782620191d4835162004cef565b5151036201924657620191e7906201e1d2565b9291921562016d8657600092845b62019204575050505050600090565b8051841015620174c957836201921c86958462004d46565b516201922d6200680d865162004cef565b5114620174c1576201923f9062004cdf565b93620191f5565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020016001918282515103620193e5578262019318835162004cef565b5151036201938b576201932b906201e1d2565b905091909115620065c757600091835b620193495750505050600090565b80518310156201719057826201936185948362004d46565b51620193726200680d855162004cef565b5110620051c457620193849062004cdf565b926201933b565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201952a57826201945d835162004cef565b515103620194d05762019470906201e1d2565b905091909115620065c757600091835b6201948e5750505050600090565b8051831015620171905782620194a685948362004d46565b51620194b76200680d855162004cef565b5111620051c457620194c99062004cdf565b9262019480565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036201969c576002620195a3835162004cef565b5151036201964257620195b6906201e1d2565b905015620065c757600091835b620195d15750505050600090565b8151831015620171905782620195e985948462004d46565b51620195fa6200680d845162004cef565b511115806201961b575b620051c457620196149062004cdf565b92620195c3565b5062019628818462004d46565b5162019639620169f0845162004cef565b51101562019604565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234363a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020016001918282515103620197e1578262019714835162004cef565b515103620197875762019727906201e1d2565b905091909115620065c757600091835b620197455750505050600090565b80518310156201719057826201975d85948362004d46565b516201976e6200680d855162004cef565b5114620051c457620197809062004cdf565b9262019737565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3234373a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b90602001600191828251510362019966578262019859835162004cef565b5151106201990c576201986c906201e1d2565b905015620065c75782916000935b620198885750505050600090565b815184101562017190576000835b620198b0575b50620198a9839462004cdf565b936201987a565b939291620198bf825162004cef565b51518510156201990357620198d5848262004d46565b51620198e7866200743f855162004cef565b511462016c4d57620198fb83949562004cdf565b909262019896565b9192936201989c565b60405162461bcd60e51b815260206004820152603e60248201527f43452049445f3234383a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3234383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9091602080910190600193848351510362019c665784620199e2845162004cef565b51511062019c0c57620199f5906201e199565b9290921562016f9a5784931562019b09576000935b62019a16575050505090565b8251841015620051fe576001600160a01b038062019a35868662004d46565b5116600052611f40808452604060ff8160002054161562016fa457879160009384935b62019a7b575b505050501562016f9a5762019a74859462004cdf565b9362019a0a565b9092989591939662019a8e865162004cef565b51518a101562019afd578162019aa58a8362004d46565b5116600052838352600285600020015462019ac68b6200743f895162004cef565b511462019aea5762019adb8798999a62004cdf565b93919097999894929662019a58565b9650509396505050843880808062019a5e565b96938296995062019a5e565b6000935b62019b19575050505090565b8251841015620051fe576001600160a01b038062019b38868662004d46565b5116600052613ef8808452604060ff8160002054161562016fa457879160009384935b62019b7e575b505050501562016f9a5762019b77859462004cdf565b9362019b0d565b9092989591939662019b91865162004cef565b51518a101562019c00578162019ba88a8362004d46565b5116600052838352600285600020015462019bc98b6200743f895162004cef565b511462019bed5762019bde8798999a62004cdf565b93919097999894929662019b5b565b9650509396505050843880808062019b61565b96938296995062019b61565b60405162461bcd60e51b815260048101839052603e60248201527f43452049445f3234393a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3234393a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b6020809301600192838251510362019f53578362019cdf835162004cef565b51511062019ef95762019cf2906201e199565b9490941562016f9a5783921562019e045793926000905b62019d18575050505050600090565b8351811015620174c9576001600160a01b038062019d37838762004d46565b5116600052611f4080875260409160ff83600020541662019d6d575b5050509362019d6483949562004cdf565b90949362019d09565b6000929190865b62019d81575b5062019d53565b90929791939662019d93865162004cef565b515189101562019df9578162019daa898362004d46565b5116600052838352600285600020015462019dcb8a6200743f895162004cef565b511462019ded5762019ddf87989962004cdf565b939190979894929862019d74565b50505050505091505090565b969382985062019d7a565b93926000905b62019e19575050505050600090565b8351811015620174c9576001600160a01b038062019e38838762004d46565b5116600052613ef880875260409160ff83600020541662019e6e575b5050509362019e6583949562004cdf565b90949362019e0a565b6000929190865b62019e82575b5062019e54565b90929791939662019e94865162004cef565b515189101562019eee578162019eab898362004d46565b5116600052838352600285600020015462019ecc8a6200743f895162004cef565b511462019ded5762019ee087989962004cdf565b939190979894929862019e75565b969382985062019e7b565b60405162461bcd60e51b815260048101869052603e60248201527f43452049445f3235303a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101869052602e60248201527f43452049445f3235303a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201a253578462019fcf845162004cef565b5151106201a1f95762019fe2906201e110565b9290921562016f9a578493156201a0f6576000935b6201a003575050505090565b8251841015620051fe576001600160a01b03806201a022868662004d46565b5116600052611f40808452604060ff8160002054161562016fa457879160009384935b6201a068575b505050501562016f9a576201a061859462004cdf565b9362019ff7565b909298959193966201a07b865162004cef565b51518a10156201a0ea57816201a0928a8362004d46565b511660005283835260028560002001546201a0b38b6200743f895162004cef565b51146201a0d7576201a0c88798999a62004cdf565b9391909799989492966201a045565b965050939650505084388080806201a04b565b9693829699506201a04b565b6000935b6201a106575050505090565b8251841015620051fe576001600160a01b03806201a125868662004d46565b5116600052613ef8808452604060ff8160002054161562016fa457879160009384935b6201a16b575b505050501562016f9a576201a164859462004cdf565b936201a0fa565b909298959193966201a17e865162004cef565b51518a10156201a1ed57816201a1958a8362004d46565b511660005283835260028560002001546201a1b68b6200743f895162004cef565b51146201a1da576201a1cb8798999a62004cdf565b9391909799989492966201a148565b965050939650505084388080806201a14e565b9693829699506201a14e565b60405162461bcd60e51b815260048101839052603e60248201527f43452049445f3235313a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b602080930160019283825151036201a53457836201a2cc835162004cef565b5151106201a4da576201a2df906201e110565b9490941562016f9a578392156201a3e55793926000905b6201a305575050505050600090565b8351811015620174c9576001600160a01b03806201a324838762004d46565b5116600052611f4080875260409160ff8360002054166201a35a575b505050936201a35183949562004cdf565b9094936201a2f6565b6000929190865b6201a36e575b506201a340565b9092979193966201a380865162004cef565b51518910156201a3da57816201a397898362004d46565b511660005283835260028560002001546201a3b88a6200743f895162004cef565b511462019ded576201a3cc87989962004cdf565b93919097989492986201a361565b96938298506201a367565b93926000905b6201a3fa575050505050600090565b8351811015620174c9576001600160a01b03806201a419838762004d46565b5116600052613ef880875260409160ff8360002054166201a44f575b505050936201a44683949562004cdf565b9094936201a3eb565b6000929190865b6201a463575b506201a435565b9092979193966201a475865162004cef565b51518910156201a4cf57816201a48c898362004d46565b511660005283835260028560002001546201a4ad8a6200743f895162004cef565b511462019ded576201a4c187989962004cdf565b93919097989492986201a456565b96938298506201a45c565b60405162461bcd60e51b815260048101869052603e60248201527f43452049445f3235323a205468652055494e543235365f324441525241595b30604482015260008051602062033a2c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101869052602e60248201527f43452049445f3235323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201a6fd57846201a5b0845162004cef565b5151036201a6a3576201a5c3906201e110565b1562016f9a578493156201a63a576000935b6201a5e1575050505090565b8051841015620051fe576001600160a01b036201a5ff858362004d46565b5116600052611f4582526040600020546201a61f6200680d855162004cef565b51101562016f9a576201a633859462004cdf565b936201a5d5565b6000935b6201a64a575050505090565b8051841015620051fe576001600160a01b036201a668858362004d46565b5116600052613efd82526040600020546201a6886200680d855162004cef565b51101562016f9a576201a69c859462004cdf565b936201a63e565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3235333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201a8c657846201a779845162004cef565b5151036201a86c576201a78c906201e110565b1562016f9a578493156201a803576000935b6201a7aa575050505090565b8051841015620051fe576001600160a01b036201a7c8858362004d46565b5116600052611f4582526040600020546201a7e86200680d855162004cef565b51111562016f9a576201a7fc859462004cdf565b936201a79e565b6000935b6201a813575050505090565b8051841015620051fe576001600160a01b036201a831858362004d46565b5116600052613efd82526040600020546201a8516200680d855162004cef565b51111562016f9a576201a865859462004cdf565b936201a807565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3235343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9091602080910160019384825151036201ab1c5760026201a942835162004cef565b5151036201aac2576201a955906201e110565b9290921562016f9a578493156201aa14576000935b6201a976575050505090565b8251841015620051fe576001600160a01b03806201a995868662004d46565b5116600052611f4580835260409081600020546201a9b86200680d875162004cef565b51119283156201a9de575b50505062016f9a576201a9d7859462004cdf565b936201a96a565b909192506201a9ee878762004d46565b51166000528252600020546201aa09620169f0845162004cef565b51103880806201a9c3565b6000935b6201aa24575050505090565b8251841015620051fe576001600160a01b03806201aa43868662004d46565b5116600052613efd80835260409081600020546201aa666200680d875162004cef565b51119283156201aa8c575b50505062016f9a576201aa85859462004cdf565b936201aa18565b909192506201aa9c878762004d46565b51166000528252600020546201aab7620169f0845162004cef565b51103880806201aa71565b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3235353a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052602e60248201527f43452049445f3235353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201ace357846201ab98845162004cef565b5151036201ac89576201abab906201e110565b1562016f9a578493156201ac21576000935b6201abc9575050505090565b8051841015620051fe576001600160a01b036201abe7858362004d46565b5116600052611f4582526040600020546201ac076200680d855162004cef565b510362016f9a576201ac1a859462004cdf565b936201abbd565b6000935b6201ac31575050505090565b8051841015620051fe576001600160a01b036201ac4f858362004d46565b5116600052613efd82526040600020546201ac6f6200680d855162004cef565b510362016f9a576201ac82859462004cdf565b936201ac25565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3235363a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201aec457846201ad5f845162004cef565b5151036201ae6a576201ad72906201e110565b1562016f9a578493156201adfd5760009182945b6201ad97575b505050505050600090565b81518510156201adf75785946001600160a01b036201adb7828562004d46565b51168452611f45825260408420546201add56200680d875162004cef565b51106201adee576201ade79062004cdf565b946201ad86565b50505050505090565b6201ad8c565b60009182945b6201ae1357505050505050600090565b81518510156201adf75785946001600160a01b036201ae33828562004d46565b51168452613efd825260408420546201ae516200680d875162004cef565b51106201adee576201ae639062004cdf565b946201ae03565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3235373a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909160208091019060019384835151036201b09557846201af40845162004cef565b5151036201b03b576201af53906201e110565b1562016f9a578493156201afce5760009182945b6201af7757505050505050600090565b81518510156201adf75785946001600160a01b036201af97828562004d46565b51168452611f45825260408420546201afb56200680d875162004cef565b51116201adee576201afc79062004cdf565b946201af67565b60009182945b6201afe457505050505050600090565b81518510156201adf75785946001600160a01b036201b004828562004d46565b51168452613efd825260408420546201b0226200680d875162004cef565b51116201adee576201b0349062004cdf565b946201afd4565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3235383a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3235383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9091602080910160019384825151036201b2f55760026201b111835162004cef565b5151036201b29b576201b124906201e110565b9190911562016f9a578493156201b1e8576000935b6201b148575050505050600090565b8151841015620174c95784936001600160a01b03806201b169838662004d46565b5116600052611f4580865260409081600020546201b18c6200680d875162004cef565b51111592836201b1b1575b505050620174c1576201b1aa9062004cdf565b936201b139565b909192506201b1c1848762004d46565b51166000528552600020546201b1dc620169f0845162004cef565b5110153880806201b197565b6000935b6201b1fb575050505050600090565b8151841015620174c95784936001600160a01b03806201b21c838662004d46565b5116600052613efd80865260409081600020546201b23f6200680d875162004cef565b51111592836201b264575b505050620174c1576201b25d9062004cdf565b936201b1ec565b909192506201b274848762004d46565b51166000528552600020546201b28f620169f0845162004cef565b5110153880806201b24a565b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3235393a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052602e60248201527f43452049445f3235393a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201b4cc57836201b36e845162004cef565b5151036201b47257156201b3f7576201b387906201e110565b15620065c757829160009182945b6201b3a257505050905090565b805185101562016c55576201b3cc6001600160a01b036201b3c4878462004d46565b51166201b583565b6201b3dc6200680d845162004cef565b51101562016c4d576201b3f0849562004cdf565b946201b395565b6201b402906201e110565b15620065c757829160009182945b6201b41d57505050905090565b805185101562016c55576201b4476001600160a01b036201b43f878462004d46565b51166201b526565b6201b4576200680d845162004cef565b51101562016c4d576201b46b849562004cdf565b946201b410565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236303a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236303a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60009081905b6103e882106201b53b57505090565b9091620081fe6201b57c916201b5758560031b60018060a01b038616600052611fbb8101602052611fb96040600020549101549062004f77565b9062006200565b906201b52c565b60009081905b6103e882106201b59857505090565b9091620081fe6201b5d0916201b575600386811b9060018060a01b038716600052810160205260016040600020549101549062004f77565b906201b589565b600091906201b632576000905b6103e882106201b5f357505090565b9091620081fe6201b62b916201b575600386811b9060018060a01b038716600052810160205260016040600020549101549062004f77565b906201b5e4565b81905b6103e882106201b64457505090565b9091620081fe6201b67e916201b5758560031b60018060a01b038616600052611fbb8101602052611fb96040600020549101549062004f77565b906201b635565b916020019060019283835151036201b7f257836201b6a4845162004cef565b5151036201b79857156201b725576201b6bd906201e110565b15620065c757829160009182945b6201b6d857505050905090565b805185101562016c55576201b6fa6001600160a01b036201b3c4878462004d46565b6201b70a6200680d845162004cef565b51111562016c4d576201b71e849562004cdf565b946201b6cb565b6201b730906201e110565b15620065c757829160009182945b6201b74b57505050905090565b805185101562016c55576201b76d6001600160a01b036201b43f878462004d46565b6201b77d6200680d845162004cef565b51111562016c4d576201b791849562004cdf565b946201b73e565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201ba2a5760026201b86c845162004cef565b5151036201b9d057156201b925576201b885906201e110565b91909115620065c757829160009182945b6201b8a357505050905090565b815185101562016c55576001600160a01b036201b8c6816201b3c4888662004d46565b6201b8d66200680d845162004cef565b51119081156201b8fa575b5062016c4d576201b8f3849562004cdf565b946201b896565b6201b90c91506201b3c4878562004d46565b6201b91c620169f0835162004cef565b5110386201b8e1565b6201b930906201e110565b91909115620065c757829160009182945b6201b94e57505050905090565b815185101562016c55576001600160a01b036201b971816201b43f888662004d46565b6201b9816200680d845162004cef565b51119081156201b9a5575b5062016c4d576201b99e849562004cdf565b946201b941565b6201b9b791506201b43f878562004d46565b6201b9c7620169f0835162004cef565b5110386201b98c565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236323a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201bbef57836201baa3845162004cef565b5151036201bb9557156201bb23576201babc906201e110565b15620065c757829160009182945b6201bad757505050905090565b805185101562016c55576201baf96001600160a01b036201b3c4878462004d46565b6201bb096200680d845162004cef565b510362016c4d576201bb1c849562004cdf565b946201baca565b6201bb2e906201e110565b15620065c757829160009182945b6201bb4957505050905090565b805185101562016c55576201bb6b6001600160a01b036201b43f878462004d46565b6201bb7b6200680d845162004cef565b510362016c4d576201bb8e849562004cdf565b946201bb3c565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201bdb857836201bc68845162004cef565b5151036201bd5e57156201bcea576201bc81906201e110565b91909115620065c757600091835b6201bc9d5750505050600090565b8051831015620171905783926201bcc16001600160a01b036201b3c4838562004d46565b6201bcd16200680d855162004cef565b5110620051c4576201bce39062004cdf565b926201bc8f565b6201bcf5906201e110565b91909115620065c757600091835b6201bd115750505050600090565b8051831015620171905783926201bd356001600160a01b036201b43f838562004d46565b6201bd456200680d855162004cef565b5110620051c4576201bd579062004cdf565b926201bd03565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201bf8157836201be31845162004cef565b5151036201bf2757156201beb3576201be4a906201e110565b91909115620065c757600091835b6201be665750505050600090565b8051831015620171905783926201be8a6001600160a01b036201b3c4838562004d46565b6201be9a6200680d855162004cef565b5111620051c4576201beac9062004cdf565b926201be58565b6201bebe906201e110565b91909115620065c757600091835b6201beda5750505050600090565b8051831015620171905783926201befe6001600160a01b036201b43f838562004d46565b6201bf0e6200680d855162004cef565b5111620051c4576201bf209062004cdf565b926201becc565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201c1b35760026201bffb845162004cef565b5151036201c15957156201c0b1576201c014906201e110565b15620065c757600091835b6201c02d5750505050600090565b8151831015620171905783926001600160a01b036201c052816201b3c4848762004d46565b6201c0626200680d855162004cef565b51111590816201c085575b50620051c4576201c07e9062004cdf565b926201c01f565b6201c09791506201b3c4838662004d46565b6201c0a7620169f0845162004cef565b511015386201c06d565b6201c0bc906201e110565b15620065c757600091835b6201c0d55750505050600090565b8151831015620171905783926001600160a01b036201c0fa816201b43f848762004d46565b6201c10a6200680d855162004cef565b51111590816201c12d575b50620051c4576201c1269062004cdf565b926201c0c7565b6201c13f91506201b43f838662004d46565b6201c14f620169f0845162004cef565b511015386201c115565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236363a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201c38a57836201c22c845162004cef565b5151036201c33057156201c2b5576201c245906201e110565b15620065c757829160009182945b6201c26057505050905090565b805185101562016c55576201c28a6001600160a01b036201c282878462004d46565b51166201c43a565b6201c29a6200680d845162004cef565b51101562016c4d576201c2ae849562004cdf565b946201c253565b6201c2c0906201e110565b15620065c757829160009182945b6201c2db57505050905090565b805185101562016c55576201c3056001600160a01b036201c2fd878462004d46565b51166201c3e4565b6201c3156200680d845162004cef565b51101562016c4d576201c329849562004cdf565b946201c2ce565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236373a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60009081905b6103e882106201c3f957505090565b9091620081fe6201c433916201b5758560031b60018060a01b038616600052611fbb8101602052611fba6040600020549101549062004f77565b906201c3ea565b60009081905b6103e882106201c44f57505090565b9091620081fe6201c487916201b575600386811b9060018060a01b038716600052810160205260026040600020549101549062004f77565b906201c440565b600091906201c4e9576000905b6103e882106201c4aa57505090565b9091620081fe6201c4e2916201b575600386811b9060018060a01b038716600052810160205260026040600020549101549062004f77565b906201c49b565b81905b6103e882106201c4fb57505090565b9091620081fe6201c535916201b5758560031b60018060a01b038616600052611fbb8101602052611fba6040600020549101549062004f77565b906201c4ec565b916020019060019283835151036201c6a957836201c55b845162004cef565b5151036201c64f57156201c5dc576201c574906201e110565b15620065c757829160009182945b6201c58f57505050905090565b805185101562016c55576201c5b16001600160a01b036201c282878462004d46565b6201c5c16200680d845162004cef565b51111562016c4d576201c5d5849562004cdf565b946201c582565b6201c5e7906201e110565b15620065c757829160009182945b6201c60257505050905090565b805185101562016c55576201c6246001600160a01b036201c2fd878462004d46565b6201c6346200680d845162004cef565b51111562016c4d576201c648849562004cdf565b946201c5f5565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236383a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201c8e15760026201c723845162004cef565b5151036201c88757156201c7dc576201c73c906201e110565b91909115620065c757829160009182945b6201c75a57505050905090565b815185101562016c55576001600160a01b036201c77d816201c282888662004d46565b6201c78d6200680d845162004cef565b51119081156201c7b1575b5062016c4d576201c7aa849562004cdf565b946201c74d565b6201c7c391506201c282878562004d46565b6201c7d3620169f0835162004cef565b5110386201c798565b6201c7e7906201e110565b91909115620065c757829160009182945b6201c80557505050905090565b815185101562016c55576001600160a01b036201c828816201c2fd888662004d46565b6201c8386200680d845162004cef565b51119081156201c85c575b5062016c4d576201c855849562004cdf565b946201c7f8565b6201c86e91506201c2fd878562004d46565b6201c87e620169f0835162004cef565b5110386201c843565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3236393a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3236393a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020019060019283835151036201caaa57836201c95a845162004cef565b5151036201ca5057156201c9dc576201c973906201e110565b91909115620065c757600091835b6201c98f5750505050600090565b8051831015620171905783926201c9b36001600160a01b036201c282838562004d46565b6201c9c36200680d855162004cef565b5110620051c4576201c9d59062004cdf565b926201c981565b6201c9e7906201e110565b91909115620065c757600091835b6201ca035750505050600090565b8051831015620171905783926201ca276001600160a01b036201c2fd838562004d46565b6201ca376200680d855162004cef565b5110620051c4576201ca499062004cdf565b926201c9f5565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3237303a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3237303a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9160200190600192836201cb19845162004cef565b5151036201cc735783835151036201cc1957156201cba5576201cb3c906201e110565b91909115620065c757600091835b6201cb585750505050600090565b8051831015620171905783926201cb7c6001600160a01b036201c282838562004d46565b6201cb8c6200680d855162004cef565b5111620051c4576201cb9e9062004cdf565b926201cb4a565b6201cbb0906201e110565b91909115620065c757600091835b6201cbcc5750505050600090565b8051831015620171905783926201cbf06001600160a01b036201c2fd838562004d46565b6201cc006200680d855162004cef565b5111620051c4576201cc129062004cdf565b926201cbbe565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3237313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3237313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b916020019060026201cce0835162004cef565b5151036201cea55760019283835151036201ce4b57156201cda3576201cd06906201e110565b15620065c757600091835b6201cd1f5750505050600090565b8151831015620171905783926001600160a01b036201cd44816201c282848762004d46565b6201cd546200680d855162004cef565b51111590816201cd77575b50620051c4576201cd709062004cdf565b926201cd11565b6201cd8991506201c282838662004d46565b6201cd99620169f0845162004cef565b511015386201cd5f565b6201cdae906201e110565b15620065c757600091835b6201cdc75750505050600090565b8151831015620171905783926001600160a01b036201cdec816201c2fd848762004d46565b6201cdfc6200680d855162004cef565b51111590816201ce1f575b50620051c4576201ce189062004cdf565b926201cdb9565b6201ce3191506201c2fd838662004d46565b6201ce41620169f0845162004cef565b511015386201ce07565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3237323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3237323a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b919060208092019060019384835151036201d0c65760026201cf22845162004cef565b5151036201d06c57156201cfcd576201cf3b906201e110565b9290921562016d8657600092845b6201cf55575050505090565b8051841015620051fe576201cf6f6200680d845162004cef565b516103e881101562004cfd576001600160a01b036201cf8f868462004d46565b5116600052600390811b0182526040600020546201cfb2620169f0855162004cef565b51101562016f9a576201cfc6859462004cdf565b936201cf49565b6201cfd8906201e110565b9290921562016d8657600092845b6201cff2575050505090565b8051841015620051fe576201d00c6200680d845162004cef565b516103e881101562004cfd57611fbb906001600160a01b036201d030878562004d46565b511660005260031b0182526040600020546201d051620169f0855162004cef565b51101562016f9a576201d065859462004cdf565b936201cfe6565b60405162461bcd60e51b815260048101859052603160248201527f43452049445f3237333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b919060208092019060019384835151036201d2e75760026201d143845162004cef565b5151036201d28d57156201d1ee576201d15c906201e110565b9290921562016d8657600092845b6201d176575050505090565b8051841015620051fe576201d1906200680d845162004cef565b516103e881101562004cfd576001600160a01b036201d1b0868462004d46565b5116600052600390811b0182526040600020546201d1d3620169f0855162004cef565b51111562016f9a576201d1e7859462004cdf565b936201d16a565b6201d1f9906201e110565b9290921562016d8657600092845b6201d213575050505090565b8051841015620051fe576201d22d6200680d845162004cef565b516103e881101562004cfd57611fbb906001600160a01b036201d251878562004d46565b511660005260031b0182526040600020546201d272620169f0855162004cef565b51111562016f9a576201d286859462004cdf565b936201d207565b60405162461bcd60e51b815260048101859052603160248201527f43452049445f3237343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916020809101600392836201d357835162004cef565b5151036201d5e55760019485835151036201d58b57156201d482576201d37d906201e110565b9390931562016f9a57600093855b6201d39857505050505090565b80518510156201d47c576201d3b26200680d845162004cef565b516103e8908181101562004cfd576001600160a01b03908490826201d3d88a8762004d46565b5116600052811b01865260409081600020546201d3fa620169f0885162004cef565b51119283156201d420575b5050506201ad8c576201d419869562004cdf565b946201d38b565b909192506201d4346200680d875162004cef565b519081101562004cfd5784916201d44c898662004d46565b5116600052811b018552600020546201d4716201d46a855162004cef565b5162004d24565b51103880806201d405565b620174c1565b6201d490909392936201e110565b9390931562016f9a57600093855b6201d4ab57505050505090565b80518510156201d47c576201d4c56200680d845162004cef565b516103e88082101562004cfd576001600160a01b0391826201d4e8898662004d46565b5116600052611fbb8091881b01855260409182600020546201d50f620169f0895162004cef565b51119384156201d536575b505050506201ad8c576201d52f869562004cdf565b946201d49e565b90919293506201d54b6200680d885162004cef565b519182101562004cfd576201d561898662004d46565b5116600052861b018352600020546201d57f6201d46a855162004cef565b5110388080806201d51a565b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3237353a205468652055494e543235365f324441525241595b306044820152705d206c656e677468206973206e6f74203360781b6064820152608490fd5b919060208092019060026201d65a835162004cef565b5151036201d8135760019384835151036201d7b957156201d716576201d680906201e110565b9290921562016d8657600092845b6201d69d575050505050600090565b8051841015620174c9576201d6b76200680d845162004cef565b51936103e885101562004cfd5785946001600160a01b036201d6da838562004d46565b5116600052600390811b0183526040600020546201d6fd620169f0865162004cef565b5110620174c1576201d70f9062004cdf565b936201d68e565b6201d721906201e110565b9290921562016d8657600092845b6201d73e575050505050600090565b8051841015620174c9576201d7586200680d845162004cef565b51936103e885101562004cfd578594611fbb906001600160a01b036201d77f848662004d46565b511660005260031b0183526040600020546201d7a0620169f0865162004cef565b5110620174c1576201d7b29062004cdf565b936201d72f565b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3237363a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b919060208092019060026201d883835162004cef565b5151036201da3c5760019384835151036201d9e257156201d93f576201d8a9906201e110565b9290921562016d8657600092845b6201d8c6575050505050600090565b8051841015620174c9576201d8e06200680d845162004cef565b51936103e885101562004cfd5785946001600160a01b036201d903838562004d46565b5116600052600390811b0183526040600020546201d926620169f0865162004cef565b5111620174c1576201d9389062004cdf565b936201d8b7565b6201d94a906201e110565b9290921562016d8657600092845b6201d967575050505050600090565b8051841015620174c9576201d9816200680d845162004cef565b51936103e885101562004cfd578594611fbb906001600160a01b036201d9a8848662004d46565b511660005260031b0183526040600020546201d9c9620169f0865162004cef565b5111620174c1576201d9db9062004cdf565b936201d958565b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3237373a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b916020809101600392836201daac835162004cef565b5151036201dd3e5760019485835151036201dce457156201dbd2576201dad2906201e110565b9390931562016f9a57600093855b6201daf057505050505050600090565b80518510156201adf7576201db0a6200680d845162004cef565b51946103e8958681101562004cfd5787966001600160a01b03918590836201db33868862004d46565b5116600052811b018752604080600020546201db54620169f0895162004cef565b51111592836201db79575b5050506201adee576201db729062004cdf565b946201dae0565b91985091506201db8e6200680d875162004cef565b519788101562004cfd57889785916201dba8858762004d46565b5116600052811b018652600020546201dbc66201d46a865162004cef565b5110153880806201db5f565b6201dbe0909392936201e110565b9390931562016f9a57600093855b6201dbfe57505050505050600090565b80518510156201adf7576201dc186200680d845162004cef565b51946103e88087101562004cfd5787966001600160a01b0390816201dc3e858762004d46565b5116600052611fbb8091891b01865260409081600020546201dc65620169f08a5162004cef565b51111593846201dc8b575b505050506201adee576201dc849062004cdf565b946201dbee565b9193509198506201dca16200680d885162004cef565b519081101562004cfd5789986201dcb9858762004d46565b5116600052871b018452600020546201dcd76201d46a865162004cef565b511015388080806201dc70565b60405162461bcd60e51b815260048101859052602e60248201527f43452049445f3237383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101849052603160248201527f43452049445f3237383a205468652055494e543235365f324441525241595b306044820152705d206c656e677468206973206e6f74203360781b6064820152608490fd5b6201dda8816201df2d565b156201df24576040810190606082510151511515806201dee9575b156201ddd55750516060015151600191565b604082510151511515806201ded0575b156201ddf75750516040015151600191565b60808251015151151590816201deb6575b50156201de1a57516080015151600191565b805160c081015151156201de6157506201de3960c08251015162004cef565b51516201de4a57505b600090600090565b60c06201de5a9151015162004cef565b5151600191565b602081015151156201de795750516020015151600191565b60a0015180516201de8d575b50506201de42565b6201de989062004cef565b51516201dea657806201de85565b60a06201de5a9151015162004cef565b602091500151602681101562002a2357601014386201de08565b506020810151602681101562002a23576013146201dde5565b50602081018051602681101562002a2357600c149081156201df0d575b506201ddc3565b905051602681101562002a2357600f14386201df06565b50600090600090565b6020018051906026908183101562002a235760018093146201e10b5780518281101562002a23576002146201e10b5780518281101562002a23576003146201e10b578051908282101562002a2357600480921462016d51578051838110156201e0f65760051462016d51578051838110156201e0f65760061462016d51578051838110156201e0f65760071462016d51578051838110156201e0f65760081462016d51578051838110156201e0f65760091462016d51578051838110156201e0f657600a1462016d51578051838110156201e0f657600b1462016d51578051838110156201e0f657600c1462016d51578051838110156201e0f657600d1462016d51578051838110156201e0f657600e1462016d51578051838110156201e0f657600f1462016d51578051838110156201e0f65760101462016d51578051838110156201e0f65760111462016d51578051838110156201e0f65760121462016d51578051838110156201e0f65760131462016d51578051838110156201e0f65760141462016d51578051838110156201e0f65760151462016d515751918210156201e0e15750601e14620032d25750600090565b602190634e487b7160e01b6000525260246000fd5b602183634e487b7160e01b6000525260246000fd5b505090565b6201e11b816201df2d565b156201e18a576020810151602681101562002a23576004146201e177576040015160c0015180516201e16557506040516201e1568162002b3f565b60008152600036813790600090565b6201e1709062004cef565b5190600190565b60c060406201e170920151015162004d13565b506040516201e1568162002b3f565b6020810151602681101562002a23576004146201e1bf57506040516201e1568162002b3f565b60c060406201e170920151015162004cef565b6201e1dd816201e322565b156201e3125760208101908151916026908184101562002a235760018094146201e2f75780518281101562002a23576003146201e2f7578051908282101562002a235760048092146201e2db578051838110156201e0f6576005146201e2db578051838110156201e0f6576006146201e2db578051838110156201e0f6576014146201e2db578051838110156201e0f6576015146201e2db5751918210156201e0e15750601e146201e2bd575050604051906201e29a8262002b3f565b60008252604051916201e2ad8362002b3f565b6000835260003681379190600090565b604001916201e2d660a06200779b818651015162004cef565b519190565b505050604001916201e2d660a06200779b818651015162004cef565b5050604001916201e2d660a06200779b818651015162004cef565b50604051906201e29a8262002b3f565b6020018051906026908183101562002a235760018093146201e10b5780518281101562002a2357600214620065c75780518281101562002a23576003146201e10b578051908282101562002a2357600480921462016d51578051838110156201e0f65760141462016d51578051838110156201e0f65760151462016d51578051838110156201e0f657601e1462016d51578051838110156201e0f65760051462016d515751918210156201e0e15750600614620032d25750600090565b916101f581146201e489576101f681146201e47d576101f781146201e471576101f881146201e465576101f981146201e459576101fa81146201e44d576101fb81146201e441576101fc146201e436575050600090565b620032d2916201eeda565b50620032d2916201ed35565b50620032d2916201ebd0565b50620032d2916201ea6b565b50620032d2916201e906565b50620032d2916201e761565b50620032d2916201e5fc565b50620032d291906020019060019182815151036201e5a257826201e4ae825162004cef565b5151036201e548576020820151602681101562002a2357600203620065c757600091835b6201e4e05750505050600090565b604081019260a0936201e4f7858251015162004d24565b51518210156201e54057816200743f87966201e5169351015162004d24565b516201e5276200680d855162004cef565b5110620051c4576201e5399062004cdf565b926201e4d2565b505062016d86565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201e70757826201e61b825162004cef565b5151036201e6ad576020820151602681101562002a2357600203620065c757600091835b6201e64d5750505050600090565b604081019260a0936201e664858251015162004d24565b51518210156201e54057816200743f87966201e6839351015162004d24565b516201e6946200680d855162004cef565b5111620051c4576201e6a69062004cdf565b926201e63f565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530323a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201e8ac5760026201e781825162004cef565b5151036201e852576020820151602681101562002a2357600203620065c757600091835b6201e7b35750505050600090565b604081019260a0936201e7ca858251015162004d24565b51518210156201e5405781856201e7eb826200743f8a998651015162004d24565b516201e7fc6200680d885162004cef565b51111592836201e821575b505050620051c4576201e81a9062004cdf565b926201e7a5565b5101516201e83592506200743f9062004d24565b516201e846620169f0855162004cef565b5110158138806201e807565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530333a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201ea1157826201e925825162004cef565b5151036201e9b7576020820151602681101562002a2357600203620065c757600091835b6201e9575750505050600090565b604081019260a0936201e96e858251015162004d24565b51518210156201e54057816200743f87966201e98d9351015162004d24565b516201e99e6200680d855162004cef565b5114620051c4576201e9b09062004cdf565b926201e949565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201eb7657826201ea8a825162004cef565b5151036201eb1c576020820151602681101562002a2357600203620065c757600091835b6201eabc5750505050600090565b604081019260a0936201ead3858251015162004d35565b51518210156201e54057816200743f87966201eaf29351015162004d13565b516201eb036200680d855162004cef565b5110620051c4576201eb159062004cdf565b926201eaae565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201ecdb57826201ebef825162004cef565b5151036201ec81576020820151602681101562002a2357600203620065c757600091835b6201ec215750505050600090565b604081019260a0936201ec38858251015162004d35565b51518210156201e54057816200743f87966201ec579351015162004d13565b516201ec686200680d855162004cef565b5111620051c4576201ec7a9062004cdf565b926201ec13565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530363a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201ee805760026201ed55825162004cef565b5151036201ee26576020820151602681101562002a2357600203620065c757600091835b6201ed875750505050600090565b604081019260a0936201ed9e858251015162004d35565b51518210156201e5405781856201edbf826200743f8a998651015162004d13565b516201edd06200680d885162004cef565b51111592836201edf5575b505050620051c4576201edee9062004cdf565b926201ed79565b5101516201ee0992506200743f9062004d13565b516201ee1a620169f0855162004cef565b5110158138806201eddb565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530373a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036201efe557826201eef9825162004cef565b5151036201ef8b576020820151602681101562002a2357600203620065c757600091835b6201ef2b5750505050600090565b604081019260a0936201ef42858251015162004d35565b51518210156201e54057816200743f87966201ef619351015162004d13565b516201ef726200680d855162004cef565b5114620051c4576201ef849062004cdf565b926201ef1d565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3530383a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3530383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b91603381036201f129575060209150016001815151036201f0d95760016201f068825162004cef565b5151036201f086576200680d6201f080915162004cef565b51421190565b60405162461bcd60e51b815260206004820152602560248201527f43452049445f35313a2055494e543235365f324441525241595b305d20697320604482015264656d70747960d81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f43452049445f35313a2055494e543235365f3244415252415920697320656d70604482015261747960f01b6064820152608490fd5b603481036201f212575060209150016001815151036201f1c25760016201f151825162004cef565b5151036201f16f576200680d6201f169915162004cef565b51421090565b60405162461bcd60e51b815260206004820152602560248201527f43452049445f35323a2055494e543235365f324441525241595b305d20697320604482015264656d70747960d81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f43452049445f35323a2055494e543235365f3244415252415920697320656d70604482015261747960f01b6064820152608490fd5b603581036201f324575060209150016001815151036201f2d45760026201f23a825162004cef565b5151036201f27a576201f2526200680d825162004cef565b5142101590816201f261575090565b6201f2739150620169f0905162004cef565b5142111590565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f35333a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f43452049445f35333a2055494e543235365f3244415252415920697320656d70604482015261747960f01b6064820152608490fd5b603681036201f428575060209150016001815151036201f3ce5760016201f34c825162004cef565b5151036201f37457620167cc6200680d6201f367426200621c565b5050505050925162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f35343a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35343a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603781036201f51f575060209150016001815151036201f4c55760016201f450825162004cef565b5151036201f46b57620168cd6200680d6201f367426200621c565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f35353a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35353a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603881036201f623575060209150016001815151036201f5c95760026201f547825162004cef565b5151036201f56f576201f55a426200621c565b5050505050620169cd6200680d835162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f35363a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35363a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603981036201f728575060209150016001815151036201f6ce5760016201f64b825162004cef565b5151036201f67457620167cc6200680d6201f666426200621c565b505050509390505162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f35373a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35373a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603a81036201f81f575060209150016001815151036201f7c55760016201f750825162004cef565b5151036201f76b57620168cd6200680d6201f666426200621c565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f35383a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35383a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603b81036201f924575060209150016001815151036201f8ca5760026201f847825162004cef565b5151036201f870576201f85a426200621c565b505050509050620169cd6200680d835162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f35393a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f35393a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603c81036201fa29575060209150016001815151036201f9cf5760016201f94c825162004cef565b5151036201f97557620167cc6200680d6201f967426200621c565b505050949150505162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36303a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36303a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603d81036201fb20575060209150016001815151036201fac65760016201fa51825162004cef565b5151036201fa6c57620168cd6200680d6201f967426200621c565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36313a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36313a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603e81036201fc25575060209150016001815151036201fbcb5760026201fb48825162004cef565b5151036201fb71576201fb5b426200621c565b505050915050620169cd6200680d835162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f36323a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36323a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b603f81036201fd2a575060209150016001815151036201fcd05760016201fc4d825162004cef565b5151036201fc7657620167cc6200680d6201fc68426200621c565b505095925050505162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36333a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36333a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b6040928184036201fe20575050602001906001825151036201fdc85760016201fd54835162004cef565b5151036201fd705750620168cd6200680d6201fc68426200621c565b5162461bcd60e51b815260206004820152603060248201527f43452049445f36343a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f36343a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b604182036201ff22575050602001906001825151036201feca5760026201fe48835162004cef565b5151036201fe7257506201fe5c426200621c565b505092505050620169cd6200680d835162004cef565b5162461bcd60e51b815260206004820152603160248201527f43452049445f36353a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f36353a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b9092604284036201ff3a5750620032d29250620215a8565b604384036201ff505750620032d29250620217b2565b60448481036201ff68575050620032d29250620219b4565b604585036201ff7f575050620032d2925062021c31565b604685036201ff96575050620032d2925062021e33565b604785036201ffad575050620032d2925062022035565b604885036201ffc4575050620032d2925062022318565b604985036201ffdb575050620032d2925062022625565b604a85036201fff2575050620032d2925062022903565b604b850362020009575050620032d2925062022ccb565b604c850362020020575050620032d2925062022e76565b604d850362020037575050620032d2925062022f7a565b604e85036202004e575050620032d29250620230d2565b604f850362020065575050620032d2925062023253565b605085036202007c575050620032d2925062023357565b91909293605181146000146202017857505090916020019160018351510362020120576001620200ad845162004cef565b515103620200c8575050620167cc6200680d47925162004cef565b907f43452049445f38313a2055494e543235365f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b907f43452049445f38313a2055494e543235365f32444152524159206d7573742068608492519162461bcd60e51b835260206004840152602d60248401528201526000805160206203378c8339815191526064820152fd5b605281036202026d57505090916020019160018351510362020215576001620201a2845162004cef565b515103620201bd575050620168cd6200680d47925162004cef565b907f43452049445f38323a2055494e543235365f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b907f43452049445f38323a2055494e543235365f32444152524159206d7573742068608492519162461bcd60e51b835260206004840152602d60248401528201526000805160206203378c8339815191526064820152fd5b60538103620203835750509091602001916001835151036202032b57600262020297845162004cef565b515103620202d357505047620202b26200680d835162004cef565b5111159081620202c0575090565b9050620169f7620169f047925162004cef565b907f43452049445f38333a2055494e543235365f324441525241595b305d206d7573608492519162461bcd60e51b835260206004840152603160248401528201526000805160206203392c8339815191526064820152fd5b907f43452049445f38333a2055494e543235365f32444152524159206d7573742068608492519162461bcd60e51b835260206004840152602d60248401528201526000805160206203378c8339815191526064820152fd5b605481036202047857505090916020019160018351510362020420576001620203ad845162004cef565b515103620203c857505062016afb6200680d47925162004cef565b907f43452049445f38343a2055494e543235365f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b907f43452049445f38343a2055494e543235365f32444152524159206d7573742068608492519162461bcd60e51b835260206004840152602d60248401528201526000805160206203378c8339815191526064820152fd5b605581036202063357506020840192600284515103620205db5760019283620204a2865162004d13565b51510362020584575090829160009586945b620204cf575b50505050506200680d620167cc915162004d13565b9091929395620204e28383015162004cef565b51518710156202057d5762020539908415620205445762009513906202051d6103e8620205158b6200743f8c5162004cef565b5110620234af565b6201b575620205328a6200743f8b5162004cef565b516200610a565b9392919083620204b4565b6200951390620205616103e8620205158b6200743f8c5162004cef565b6201b575620205768a6200743f8b5162004cef565b5162006139565b95620204ba565b7f43452049445f38353a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f38353a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b60568103620207b6575060208401926002845151036202075e57600192836202065d865162004d13565b51510362020707575090829160009586945b6202068a575b50505050506200680d620168cd915162004d13565b90919293956202069d8383015162004cef565b51518710156202070057620206d8908415620206e35762009513906202051d6103e8620206d08b6200743f8c5162004cef565b511062023521565b93929190836202066f565b6200951390620205616103e8620206d08b6200743f8c5162004cef565b9562020675565b7f43452049445f38363a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f38363a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b91949091605781036202097c5750602084019460028651510362020923576002620207e2875162004d13565b515103620208cb5750600092835b620207fe8287015162004cef565b51518510156202089157906202085685620207fe93898760001462020860576103e862020839620092e0946200743f62020841945162004cef565b511062023593565b6201b57562020532896200743f8d5162004cef565b94909150620207f0565b6103e862020839620092e0946200743f6202087c945162004cef565b6201b57562020576896200743f8d5162004cef565b93505093925050620208a86200680d835162004d13565b518110159182620208b857505090565b620169f7919250620169f0905162004d13565b6084907f43452049445f38373a20414444524553535f324441525241595b305d206d757385519162461bcd60e51b835260206004840152603160248401528201526000805160206203392c8339815191526064820152fd5b6084907f43452049445f38373a20414444524553535f32444152524159206d757374206885519162461bcd60e51b835260206004840152602d60248401528201526c185d99480c88195b195b595b9d609a1b6064820152fd5b909491906058810362020b335750602084019260028451510362020adb5760019283620209aa865162004d13565b51510362020a84575090829160009586945b620209d65750505050506200680d620167cc915162004d13565b9091929395620209e98383015162004cef565b51518710156202057d5762020a4090841562020a4b57620095139062020a246103e862020a1c8b6200743f8c5162004cef565b511062023605565b6201b57562020a398a6200743f8b5162004cef565b5162005e1c565b9392919083620209bc565b620095139062020a686103e862020a1c8b6200743f8c5162004cef565b6201b57562020a7d8a6200743f8b5162004cef565b5162005e52565b7f43452049445f38383a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f38383a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b6059810362020cae5750602084019260028451510362020c56576001928362020b5d865162004d13565b51510362020bff575090829160009586945b62020b895750505050506200680d620168cd915162004d13565b909192939562020b9c8383015162004cef565b5151871015620207005762020bd790841562020be257620095139062020a246103e862020bcf8b6200743f8c5162004cef565b511062023677565b939291908362020b6f565b620095139062020a686103e862020bcf8b6200743f8c5162004cef565b7f43452049445f38393a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f38393a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b91949091605a810362020e3a5750602084019460028651510362020de157600262020cda875162004d13565b51510362020d895750600092835b62020cf68287015162004cef565b515185101562020891579062020d4e8562020cf693898760001462020d58576103e862020d31620092e0946200743f62020d39945162004cef565b5110620236e9565b6201b57562020a39896200743f8d5162004cef565b9490915062020ce8565b6103e862020d31620092e0946200743f62020d74945162004cef565b6201b57562020a7d896200743f8d5162004cef565b6084907f43452049445f39303a20414444524553535f324441525241595b305d206d757385519162461bcd60e51b835260206004840152603160248401528201526000805160206203392c8339815191526064820152fd5b6084907f43452049445f39303a20414444524553535f32444152524159206d757374206885519162461bcd60e51b835260206004840152602d60248401528201526c185d99480c88195b195b595b9d609a1b6064820152fd5b90949190605b8103620210135750602084019260028451510362020fbb576001928362020e68865162004d13565b51510362020f64575090829160009586945b62020e945750505050506200680d620167cc915162004d13565b909192939562020ea78383015162004cef565b51518710156202057d57831562020f17576103e862020ed98162020ed18a6200743f8b5162004cef565b51106202375b565b62020eea886200743f895162004cef565b519081101562004cfd5762020f0c916006620095139260031b01549062006200565b939291908362020e7a565b6103e862020f308162020ed18a6200743f8b5162004cef565b62020f41886200743f895162004cef565b519081101562004cfd5762020f0c91611fbe620095139260031b01549062006200565b7f43452049445f39313a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f39313a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b605c8103620211e8575060208401926002845151036202119057600192836202103d865162004d13565b51510362021139575090829160009586945b620210695750505050506200680d620168cd915162004d13565b90919293956202107c8383015162004cef565b515187101562020700578315620210ec576103e8620210ae81620210a68a6200743f8b5162004cef565b5110620237cd565b620210bf886200743f895162004cef565b519081101562004cfd57620210e1916006620095139260031b01549062006200565b93929190836202104f565b6103e86202110581620210a68a6200743f8b5162004cef565b62021116886200743f895162004cef565b519081101562004cfd57620210e191611fbe620095139260031b01549062006200565b7f43452049445f39323a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f39323a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b605d81969293949614600014620213c8575060208401926002845151036202136f57600262021218855162004d13565b515103620213175750600080955b620212348187015162004cef565b515187101562021300578315620212ae576103e89162021267836202125f8a6200743f8a5162004cef565b51106202383f565b62021278886200743f885162004cef565b519283101562004cfd576202129e620212a5916006620212349560031b01549062006200565b9762004cdf565b96915062021226565b6103e891620212c8836202125f8a6200743f8a5162004cef565b620212d9886200743f885162004cef565b519283101562004cfd576202129e620212a591611fbe620212349560031b01549062006200565b50929350935050620208a86200680d835162004d13565b6084907f43452049445f39333a20414444524553535f324441525241595b305d206d757387519162461bcd60e51b835260206004840152603160248401528201526000805160206203392c8339815191526064820152fd5b6084907f43452049445f39333a20414444524553535f32444152524159206d757374206887519162461bcd60e51b835260206004840152602d60248401528201526c185d99480c88195b195b595b9d609a1b6064820152fd5b9094929190605e0362016d86576020840192600284515103620215505760019283620213f5865162004d13565b515103620214f9575090829160009586945b62021422575b50505050506200680d62016afb915162004d13565b9091929395620214358383015162004cef565b5151871015620214f2578315620214a5576103e862021467816202145f8a6200743f8b5162004cef565b5110620238b1565b62021478886200743f895162004cef565b519081101562004cfd576202149a916006620095139260031b01549062006200565b939291908362021407565b6103e8620214be816202145f8a6200743f8b5162004cef565b620214cf886200743f895162004cef565b519081101562004cfd576202149a91611fbe620095139260031b01549062006200565b956202140d565b7f43452049445f39343a20414444524553535f324441525241595b305d206d7573608492519162461bcd60e51b8352602060048401526030602484015282015260008051602062033a6c8339815191526064820152fd5b5162461bcd60e51b815260206004820152602d60248201527f43452049445f39343a20414444524553535f32444152524159206d7573742068818401526c185d99480c88195b195b595b9d609a1b6064820152608490fd5b90604081019060018251510362021758576001620215c7835162004cef565b515103620216fe5760200191600183515103620216a4576001620215ec845162004cef565b5151036202164a571562021626576200680d6202161e620167cc926201b3c46200680d60018060a01b03925162004cef565b925162004cef565b6200680d6202161e620167cc926201b43f6200680d60018060a01b03925162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36363a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36363a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36363a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36363a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b9060408101906001825151036202195a576001620217d1835162004cef565b515103620219005760200191600183515103620218a6576001620217f6845162004cef565b5151036202184c571562021828576200680d6202161e620168cd926201b3c46200680d60018060a01b03925162004cef565b6200680d6202161e620168cd926201b43f6200680d60018060a01b03925162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36373a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36373a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36373a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36373a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b604082019160018351510362021bd7576001620219d2845162004cef565b51510362021b7d576020019060018251510362021b23576002620219f7835162004cef565b51510362021ac9571562021a6d5760018060a01b0362021a21816201b3c46200680d865162004cef565b62021a316200680d845162004cef565b511115928362021a415750505090565b62021a61929350620169f0916201b3c46200680d6202161e935162004cef565b51101538808062016d51565b60018060a01b0362021a89816201b43f6200680d865162004cef565b62021a996200680d845162004cef565b511115928362021aa95750505090565b62021a61929350620169f0916201b43f6200680d6202161e935162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f36383a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36383a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36383a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36383a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b90604081019060018251510362021dd957600162021c50835162004cef565b51510362021d7f576020019160018351510362021d2557600162021c75845162004cef565b51510362021ccb571562021ca7576200680d6202161e620167cc926201c2826200680d60018060a01b03925162004cef565b6200680d6202161e620167cc926201c2fd6200680d60018060a01b03925162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36393a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36393a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f36393a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f36393a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b90604081019060018251510362021fdb57600162021e52835162004cef565b51510362021f81576020019160018351510362021f2757600162021e77845162004cef565b51510362021ecd571562021ea9576200680d6202161e620168cd926201c2826200680d60018060a01b03925162004cef565b6200680d6202161e620168cd926201c2fd6200680d60018060a01b03925162004cef565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37303a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37303a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37303a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37303a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60408201916001835151036202224c57600162022053845162004cef565b515103620221f257602001906001825151036202219857600262022078835162004cef565b5151036202213e5715620220e25760018060a01b03620220a2816201c2826200680d865162004cef565b620220b26200680d845162004cef565b5111159283620220c25750505090565b62021a61929350620169f0916201c2826200680d6202161e935162004cef565b60018060a01b03620220fe816201c2fd6200680d865162004cef565b6202210e6200680d845162004cef565b51111592836202211e5750505090565b62021a61929350620169f0916201c2fd6200680d6202161e935162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f37313a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37313a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37313a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37313a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b15620222ae57565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f37323a20746f6b656e436c617373496e6465782028706172616d6044820152600080516020620338ec833981519152606482015266662072616e676560c81b608482015260a490fd5b906040808201916001835151036202255a57600162022338845162004cef565b515103620225015760200192600184515103620224a85760026202235d855162004cef565b5151036202244f5715620223e0576103e8906202238c82620223846200680d875162004cef565b5110620222a6565b6202239c6200680d855162004cef565b519182101562004cfd576003620169f092620167cc94620223c96200680d60018060a01b03925162004cef565b5116600052811b0160205260002054925162004cef565b6103e890620223f982620223846200680d875162004cef565b620224096200680d855162004cef565b519182101562004cfd57611fbb620169f092620167cc94620224376200680d60018060a01b03925162004cef565b511660005260031b0160205260002054925162004cef565b815162461bcd60e51b815260206004820152603160248201527f43452049445f37323a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152602d60248201527f43452049445f37323a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152603060248201527f43452049445f37323a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152602d60248201527f43452049445f37323a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b15620225bb57565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f37333a20746f6b656e436c617373496e6465782028706172616d6044820152600080516020620338ec833981519152606482015266662072616e676560c81b608482015260a490fd5b906040808201916001835151036202283857600162022645845162004cef565b515103620227df5760200192600184515103620227865760026202266a855162004cef565b5151036202272d5715620226d6576103e8906202269982620226916200680d875162004cef565b5110620225b3565b620226a96200680d855162004cef565b519182101562004cfd576003620169f092620168cd94620223c96200680d60018060a01b03925162004cef565b6103e890620226ef82620226916200680d875162004cef565b620226ff6200680d855162004cef565b519182101562004cfd57611fbb620169f092620168cd94620224376200680d60018060a01b03925162004cef565b815162461bcd60e51b815260206004820152603160248201527f43452049445f37333a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152602d60248201527f43452049445f37333a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152603060248201527f43452049445f37333a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152602d60248201527f43452049445f37333a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b156202289957565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f37343a20746f6b656e436c617373496e6465782028706172616d6044820152600080516020620338ec833981519152606482015266662072616e676560c81b608482015260a490fd5b9060408082019260018451510362022c7257600162022923855162004cef565b51510362022c195760208093019260018451510362022bc157600391826202294c865162004cef565b51510362022b63571562022a5f576103e8916202297b83620229736200680d885162004cef565b511062022891565b6202298b6200680d865162004cef565b51928084101562004cfd5760018060a01b038281620229af6200680d8b5162004cef565b5116956000968752811b01845285852054620229d0620169f0895162004cef565b5111159788620229e6575b505050505050505090565b909192939495969750620229ff6200680d895162004cef565b519283101562022a4b57916201d46a95939162022a276200680d62022a3a9997955162004cef565b51168452811b0190522054925162004cef565b5110153880808080808080620229db565b634e487b7160e01b86526032600452602486fd5b6103e862022a7781620229736200680d885162004cef565b62022a876200680d865162004cef565b51908082101562004cfd5760018060a01b03938462022aab6200680d8a5162004cef565b5116946000958652611fbb8094831b0185528686205462022ad1620169f08a5162004cef565b511115988962022ae8575b50505050505050505090565b9091929394959697985062022b026200680d8a5162004cef565b519384101562022b4f579162022b3d9795939162022b2b6200680d6201d46a9997955162004cef565b511685521b0190522054925162004cef565b51101538808080808080808062022adc565b634e487b7160e01b87526032600452602487fd5b835162461bcd60e51b815260048101839052603160248201527f43452049445f37343a2055494e543235365f324441525241595b305d206d7573604482015270742068617665203320656c656d656e747360781b6064820152608490fd5b60849083519062461bcd60e51b82526004820152602d60248201527f43452049445f37343a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152fd5b815162461bcd60e51b815260206004820152603060248201527f43452049445f37343a20414444524553535f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b815162461bcd60e51b815260206004820152602d60248201527f43452049445f37343a20414444524553535f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b906020019060018251510362022d7557600162022ce9835162004cef565b51510362022d1b571562022d0957620167cc6200680d6202161e62022e38565b620167cc6200680d6202161e62022dcf565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37353a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37353a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b6000805b6103e8811062022de1575090565b908160031b60ff611fbf820154161562022e325762022e1f62022e2c9262022e17611fb962022e2594015462005e438762005fe5565b9290620060a1565b62006200565b9162004cdf565b62022dd3565b50905090565b6000805b6103e8811062022e4a575090565b9060ff60078360031b015416156200619f5762022e2562022e70916201b575846200610a565b62022e3c565b906020019060018251510362022f2057600162022e94835162004cef565b51510362022ec6571562022eb457620168cd6200680d6202161e62022e38565b620168cd6200680d6202161e62022dcf565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37363a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37363a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b90602001906001825151036202307857600262022f98835162004cef565b5151036202301e571562022fe25762022fb062022e38565b62022fc06200680d835162004cef565b511115908162022fce575090565b9050620169f7620169f06202161e62022e38565b62022fec62022dcf565b62022ffc6200680d835162004cef565b51111590816202300a575090565b9050620169f7620169f06202161e62022dcf565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f37373a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37373a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b90602001906001825151036202317c576001620230f0835162004cef565b5151036202312257156202311057620167cc6200680d6202161e62023215565b620167cc6200680d6202161e620231d6565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37383a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37383a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b6000805b6103e88110620231e8575090565b9060ff611fbf8360031b015416156200619f5762022e256202320f916201b5758462005e52565b620231da565b6000805b6103e8811062023227575090565b9060ff60078360031b015416156200619f5762022e256202324d916201b5758462005e1c565b62023219565b9060200190600182515103620232fd57600162023271835162004cef565b515103620232a357156202329157620168cd6200680d6202161e62023215565b620168cd6200680d6202161e620231d6565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f37393a2055494e543235365f324441525241595b305d206d7573604482015260008051602062033a6c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f37393a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b90602001906001825151036202345557600262023375835162004cef565b515103620233fb5715620233bf576202338d62023215565b6202339d6200680d835162004cef565b5111159081620233ab575090565b9050620169f7620169f06202161e62023215565b620233c9620231d6565b620233d96200680d835162004cef565b5111159081620233e7575090565b9050620169f7620169f06202161e620231d6565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f38303a2055494e543235365f324441525241595b305d206d757360448201526000805160206203392c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f38303a2055494e543235365f32444152524159206d757374206860448201526000805160206203378c8339815191526064820152608490fd5b15620234b757565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f38353a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202352957565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f38363a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202359b57565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f38373a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202360d57565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f38383a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202367f57565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f38393a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b15620236f157565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f39303a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202376357565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f39313a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b15620237d557565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f39323a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b156202384757565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f39333a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b15620238b957565b60405162461bcd60e51b815260206004820152604760248201527f43452049445f39343a20746f6b656e436c617373496e6465782028706172616d60448201526000805160206203390c833981519152606482015266662072616e676560c81b608482015260a490fd5b9161019181146202398b5761019281146202397f576101938114620239735761019681146202396757610197146202395c575050600090565b620032d29162023ec1565b50620032d29162023ddc565b50620032d29162023c37565b50620032d29162023af6565b50620032d2919060200190600191828151510362023a9c5782620239b0825162004cef565b51510362023a42576020820151602681101562002a2357600a03620065c757600091835b620239e25750505050600090565b604081019260a093620239f9858251015162004cef565b51518210156201e54057816200743f879662023a189351015162004cef565b5162023a296200680d855162004cef565b5114620051c45762023a3b9062004cdf565b92620239d4565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3430313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3430313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200190600191828151510362023bdd576020820151602681101562002a2357600a03620065c75782916000935b62023b335750505050600090565b6040810160a062023b48818351015162004cef565b51518610156201e54057906000855b62023b73575b50505062023b6c839462004cdf565b9362023b25565b62023b7f855162004cef565b515181101562023bd75762023b9d876200743f858551015162004cef565b5162023baf826200743f885162004cef565b511462023bcd579062023bc486939262004cdf565b90919262023b57565b5050505050905090565b62023b5d565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3430323a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200190600191828151510362023d8257600262023c57825162004cef565b51510362023d28576020820151602681101562002a2357600a03620065c757600091835b62023c895750505050600090565b604081019260a09362023ca0858251015162004cef565b51518210156201e54057818562023cc1826200743f8a998651015162004cef565b5162023cd26200680d885162004cef565b511115928362023cf7575b505050620051c45762023cf09062004cdf565b9262023c7b565b51015162023d0b92506200743f9062004cef565b5162023d1c620169f0855162004cef565b51101581388062023cdd565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3430333a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3430333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b600191828151510362023e68576020820151602681101562002a2357600b03620065c757600091835b62023e135750505050600090565b60408101515192835181101562023e615762023e4a62023e3582879662004d46565b5162023e42855162004cef565b51906203358c565b620051c45762023e5a9062004cdf565b9262023e05565b5062016d86565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3430363a2054686520535452494e475f4152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b600191828151510362023f46576020820151602681101562002a2357600b03620065c757600091835b62023ef85750505050600090565b60408101515192835181101562023e615762023f2f62023f1a82879662004d46565b5162023f27855162004cef565b519062006518565b620051c45762023f3f9062004cdf565b9262023eea565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3430373a2054686520535452494e475f4152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b916097811462023fc35760981462023fb8575050600090565b620032d291620240d4565b50602001805151620032d29290600019016202407b57600162023fe7835162004cef565b515103620240215760200151602681101562002a23576200680d6202161e620240109262033353565b51146202401c57600090565b600190565b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3135313a205468652055494e545f324441525241595b305d206c6044820152600080516020620338ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3135313a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b919091602080930160019182825151036202415b57938293946000935b62024100575050505050600090565b6202410c835162004cef565b5151841015620174c9578181015193602685101562002a235762024131869562033353565b62024142826200743f875162004cef565b5114620174c157620241549062004cdf565b93620240f1565b60405162461bcd60e51b815260048101869052602b60248201527f43452049445f3135323a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b926102bd8114620242b7576102be8114620242ab576102bf81146202429f576102c0811462024293576102c1811462024287576102c281146202427b576102c381146202426f576102c4811462024263576102c5811462024257576102c681146202424b576102c781146202423f576102c8146202423457505050600090565b620032d292620254dc565b50620032d292620252e1565b50620032d292620250dc565b50620032d29262024e6c565b50620032d29262024c67565b50620032d29262024a58565b50620032d29262024939565b50620032d29262024812565b50620032d292620246eb565b50620032d29262024591565b50620032d2926202443d565b50620032d292620242d4565b606482101562004cfd570190600090565b91602080910192600184515103620243e3576001620242f4855162004cef565b51510362024389571562024350576202161e62024342620167cc936202433b620076a16200680d9560018060a01b03845116600052611f4981526040600020930162007387565b90620242c3565b90549060031b1c426200620e565b6202161e62024342620167cc936202433b620076a16200680d9560018060a01b03845116600052613f0181526040600020930162007387565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3730313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3730313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b91602080910192600184515103620245375760016202445d855162004cef565b515103620244dd5715620244a4576202161e62024342620168cd936202433b620076a16200680d9560018060a01b03845116600052611f4981526040600020930162007387565b6202161e62024342620168cd936202433b620076a16200680d9560018060a01b03845116600052611f4981526040600020930162007387565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3730323a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3730323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9160208091019260018451510362024691576002620245b1855162004cef565b515103620246375715620246035781516001600160a01b03166000908152611f49825260409020620245f39262024342926202433b91620076a1910162007387565b620169cd6200680d835162004cef565b81516001600160a01b03166000908152611f49825260409020620245f39262024342926202433b91620076a1910162007387565b60405162461bcd60e51b815260048101839052603160248201527f43452049445f3730333a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3730333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9160200191600183515103620247b857600162024709845162004cef565b5151036202475e57156202474c57620076a1602062024729920162007387565b606481101562004cfd576200680d6202161e620167cc92611f4b0154426200620e565b620076a1602062024729920162007387565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3730343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3730343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9160200191600183515103620248df57600162024830845162004cef565b5151036202488557156202487357620076a1602062024850920162007387565b606481101562004cfd576200680d6202161e620168cd92611f4b0154426200620e565b620076a1602062024850920162007387565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3730353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3730353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9160200191600183515103620249fe57600262024957845162004cef565b515103620249a457156202499257620076a1602062024977920162007387565b606481101562004cfd57620245f390611f4b0154426200620e565b620076a1602062024977920162007387565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3730363a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3730363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909291604093848201600193848251510362024c0e578462024a7b835162004cef565b51510362024bb5579584959660001462024b27576000945b62024aa357505050505050600090565b62024aaf825162004cef565b51518510156201adf757859460018060a01b0362024ad3826200743f865162004cef565b51166000526020611f49815262024b0e6200680d62024b0462024342866000206202433b620076a1878c0162007387565b9288015162004cef565b51106201adee5762024b209062004cdf565b9462024a93565b6000945b62024b3b57505050505050600090565b62024b47825162004cef565b51518510156201adf757859460018060a01b0362024b6b826200743f865162004cef565b51166000526020611f49815262024b9c6200680d62024b0462024342866000206202433b620076a1878c0162007387565b51106201adee5762024bae9062004cdf565b9462024b2b565b865162461bcd60e51b815260206004820152603160248201527f43452049445f3730373a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b865162461bcd60e51b815260206004820152602e60248201527f43452049445f3730373a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b909291604093848201600193848251510362024e13578462024c8a835162004cef565b51510362024dba579584959660001462024d2c576000945b62024cb257505050505050600090565b62024cbe825162004cef565b51518510156201adf757859460018060a01b0362024ce2826200743f865162004cef565b51166000526020611f49815262024d136200680d62024b0462024342866000206202433b620076a1878c0162007387565b51116201adee5762024d259062004cdf565b9462024ca2565b6000945b62024d4057505050505050600090565b62024d4c825162004cef565b51518510156201adf757859460018060a01b0362024d70826200743f865162004cef565b51166000526020611f49815262024da16200680d62024b0462024342866000206202433b620076a1878c0162007387565b51116201adee5762024db39062004cdf565b9462024d30565b865162461bcd60e51b815260206004820152603160248201527f43452049445f3730383a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b865162461bcd60e51b815260206004820152602e60248201527f43452049445f3730383a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b929160408082019260019384815151036202508357600262024e8f825162004cef565b5151036202502a5784959660001462024f66576000945b62024eb657505050505050600090565b62024ec2815162004cef565b51518510156201adf757859460018060a01b0362024ee6826200743f855162004cef565b51166000526020611f49815262024f0f62024342866000206202433b620076a185890162007387565b9086019062024f236200680d835162004cef565b51811015918262024f48575b50506201adee5762024f419062004cdf565b9462024ea6565b62024f5b919250620169f0905162004cef565b511015388062024f2f565b6000945b62024f7a57505050505050600090565b62024f86815162004cef565b51518510156201adf757859460018060a01b0362024faa826200743f855162004cef565b51166000526020611f49815262024fd362024342866000206202433b620076a185890162007387565b9086019062024fe76200680d835162004cef565b5181101591826202500c575b50506201adee57620250059062004cdf565b9462024f6a565b6202501f919250620169f0905162004cef565b511015388062024ff3565b825162461bcd60e51b815260206004820152603160248201527f43452049445f3730393a2054686520414444524553535f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b825162461bcd60e51b815260206004820152602e60248201527f43452049445f3730393a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b92916040808201926001938481515103620252885784620250fe825162004cef565b5151036202522f57849596600014620251a5576000945b6202512257505050505090565b6202512e815162004cef565b51518510156201d47c5760018060a01b0362025150866200743f845162004cef565b51166000526020611f4981526202518b6200680d6202518162024342876000206202433b620076a1878a0162007387565b9287015162004cef565b51116201ad8c576202519e869562004cdf565b9462025115565b6000945b620251b657505050505090565b620251c2815162004cef565b51518510156201d47c5760018060a01b03620251e4866200743f845162004cef565b51166000526020611f498152620252156200680d6202518162024342876000206202433b620076a1878a0162007387565b51116201ad8c5762025228869562004cdf565b94620251a9565b825162461bcd60e51b815260206004820152603160248201527f43452049445f3731303a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b825162461bcd60e51b815260206004820152602e60248201527f43452049445f3731303a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9291604080820192600193848151510362025483578462025303825162004cef565b5151036202542a57849596600014620253a0576000945b6202532757505050505090565b62025333815162004cef565b51518510156201d47c5760018060a01b0362025355866200743f845162004cef565b51166000526020611f498152620253866200680d6202518162024342876000206202433b620076a1878a0162007387565b51106201ad8c5762025399869562004cdf565b946202531a565b6000945b620253b157505050505090565b620253bd815162004cef565b51518510156201d47c5760018060a01b03620253df866200743f845162004cef565b51166000526020611f498152620254106200680d6202518162024342876000206202433b620076a1878a0162007387565b51106201ad8c5762025423869562004cdf565b94620253a4565b825162461bcd60e51b815260206004820152603160248201527f43452049445f3731313a2054686520414444524553535f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b825162461bcd60e51b815260206004820152602e60248201527f43452049445f3731313a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b92916040808201926001938481515103620256e9576002620254ff825162004cef565b5151036202569057849596600014620255d1576000945b6202552357505050505090565b6202552f815162004cef565b51518510156201d47c5760018060a01b0362025551866200743f845162004cef565b51166000526020611f4981526202557a62024342856000206202433b620076a185880162007387565b908501906202558e6200680d835162004cef565b518110918215620255b4575b50506201ad8c57620255ad869562004cdf565b9462025516565b620255c7919250620169f0905162004cef565b511038806202559a565b6000945b620255e257505050505090565b620255ee815162004cef565b51518510156201d47c5760018060a01b0362025610866200743f845162004cef565b51166000526020613f0181526202563962024342856000206202433b620076a185880162007387565b908501906202564d6200680d835162004cef565b51811091821562025673575b50506201ad8c576202566c869562004cdf565b94620255d5565b62025686919250620169f0905162004cef565b5110388062025659565b825162461bcd60e51b815260206004820152603160248201527f43452049445f3731323a2054686520414444524553535f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b825162461bcd60e51b815260206004820152602e60248201527f43452049445f3731323a2054686520414444524553535f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b6001938085036202575a5750620032d2935062025e2a565b60028103620257705750620032d2935062025f14565b600381036202587a575050906040019180835151036202581e5762025796835162004cef565b515103620257bf57620257b96200680d60018060a01b0380935116935162004cef565b51161490565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f333a20414444524553535f324441525241595b305d206d757374604482015270081a185d99481bdb9948195b195b595b9d607a1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f333a20414444524553535f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b60049080820362025893575050620032d2935062026059565b60058103620258aa575050620032d293506202619e565b60068103620258c1575050620032d29350620262e3565b60078103620258d8575050620032d293506202651f565b60088103620258ef575050620032d293506202677d565b6009810362025906575050620032d29350620269bd565b600a81036202591d575050620032d2935062026bf1565b600b810362025934575050620032d2935062026ef3565b600c81036202594b575050620032d293506202711f565b600d810362025962575050620032d293506202736f565b600e810362025979575050620032d2935062027568565b600f810362025990575050620032d29350620278b8565b60108103620259a7575050620032d2935062027ab1565b60118103620259be575050620032d2935062027bd1565b60128103620259d5575050620032d2935062027cf1565b60138103620259ec575050620032d2935062027e87565b6014810362025a03575050620032d2935062027fa7565b6015810362025a1a575050620032d29350620280c7565b6019810362025a31575050620032d2935062028250565b601a810362025a48575050620032d2935062028388565b601b810362025a5f575050620032d29350620284c0565b601c8195929394951460001462025ba2575060200193808551510362025b495762025a8b855162004cef565b51510362025af057506000901562025aca5750516001600160a01b03166000908152611f47602052604090205490620167cc906200680d905162004cef565b90516001600160a01b03168152613eff602052604090205490620167cc906200680d9081565b60849060206040519162461bcd60e51b8352820152603260248201527f43452049445f32383a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152fd5b60405162461bcd60e51b8152602081840152602f60248201527f43452049445f32383a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b601d810362025cdd575060200193808551510362025c845762025bc6855162004cef565b51510362025c2b57506000901562025c055750516001600160a01b03166000908152611f47602052604090205490620168cd906200680d905162004cef565b90516001600160a01b03168152613eff602052604090205490620168cd906200680d9081565b60849060206040519162461bcd60e51b8352820152603260248201527f43452049445f32393a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152fd5b60405162461bcd60e51b8152602081840152602f60248201527f43452049445f32393a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b601e810362025e0f5750602001938451510362025db657600262025d02855162004cef565b51510362025d5d57506000901562025d3f5750516001600160a01b03166000908152611f476020526040902054620169cd6200680d835162004cef565b90516001600160a01b03168152613eff6020526040902054620245f3565b60849060206040519162461bcd60e51b8352820152603360248201527f43452049445f33303a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152fd5b60849060206040519162461bcd60e51b8352820152602f60248201527f43452049445f33303a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152fd5b9294509291601f14159050620065c757620032d2926202862f565b91909160018251510362025ebb571562025e8757620032d29160018060a01b03905116600052611f406020526200116462025e8162025e726001604060002001935162004cef565b51926040519283809262002cb6565b6203358c565b620032d29160018060a01b03905116600052613ef86020526200116462025e8162025e726001604060002001935162004cef565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f313a20535452494e475f4152524159206d75737420686176652060448201526a1bdb9948195b195b595b9d60aa1b6064820152608490fd5b916020019160018351510362025ffd57600162025f32845162004cef565b51510362025f9e571562025f6f57516001600160a01b03166000908152611f406020526040902060020154905162016afb906200680d9062004cef565b516001600160a01b03166000908152613ef86020526040902060020154905162016afb906200680d9062004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f323a2055494e543235365f324441525241595b305d206d757374604482015270081a185d99481bdb9948195b195b595b9d607a1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f323a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b91602001916001835151036202614257600162026077845162004cef565b515103620260e35715620260b457516001600160a01b03166000908152611f4060205260409020600201549051620167cc906200680d9062004cef565b516001600160a01b03166000908152613ef860205260409020600201549051620167cc906200680d9062004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f343a2055494e543235365f324441525241595b305d206d757374604482015270081a185d99481bdb9948195b195b595b9d607a1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f343a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b916020019160018351510362026287576001620261bc845162004cef565b515103620262285715620261f957516001600160a01b03166000908152611f4060205260409020600201549051620168cd906200680d9062004cef565b516001600160a01b03166000908152613ef860205260409020600201549051620168cd906200680d9062004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f353a2055494e543235365f324441525241595b305d206d757374604482015270081a185d99481bdb9948195b195b595b9d607a1b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f353a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b9091602080910191600183515103620264c357600262026304845162004cef565b51510362026463576202631c6200680d845162004cef565b516202632d620169f0855162004cef565b5110620263dd5715620263ae5760018060a01b039081845116600052611f4091828252600260406000200154620263696200680d865162004cef565b51111594856202637b57505050505090565b909192939450511660005252620263a0620169f0600260406000200154925162004cef565b5110153880808080620174c1565b60018060a01b039081845116600052613ef891828252600260406000200154620263696200680d865162004cef565b60405162461bcd60e51b815260048101839052605260248201527f43452049445f363a2055494e543235365f324441525241595b305d5b305d206d60448201527f757374206265206c657373207468616e206f7220657175616c20746f2055494e606482015271543235365f324441525241595b305d5b315d60701b608482015260a490fd5b60405162461bcd60e51b815260048101839052603260248201527f43452049445f363a2055494e543235365f324441525241595b305d206d75737460448201527120686176652074776f20656c656d656e747360701b6064820152608490fd5b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f363a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b9092919260208094019060019283835151036202669e5762026542835162004cef565b515115620266365794839495600014620265c6576000935b62026569575050505050600090565b62026575835162004cef565b5151841015620174c957849360018060a01b03835116600052611f408252600260406000200154620265ad826200743f875162004cef565b5114620174c157620265bf9062004cdf565b936202655a565b6000935b620265d9575050505050600090565b620265e5835162004cef565b5151841015620174c957849360018060a01b03835116600052613ef882526002604060002001546202661d826200743f875162004cef565b5114620174c1576202662f9062004cdf565b93620265ca565b60405162461bcd60e51b815260048101879052603a60248201527f43452049445f373a2055494e543235365f324441525241595b305d206d757374604482015279081a185d9948185d081b19585cdd081bdb9948195b195b595b9d60321b6064820152608490fd5b60405162461bcd60e51b815260048101879052602e60248201527f43452049445f373a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b156202670257565b60405162461bcd60e51b815260206004820152605860248201527f43452049445f383a2055494e543235365f324441525241595b305d5b305d2028604482015260008051602062033a8c833981519152606482015277081d1a19481b195b99dd1a081bd9881d1bdad95b931a5cdd60421b608482015260a490fd5b9160200191600183515103620268de5760026202679b845162004cef565b5151036202687e5780156202686157620267c96103e8620267c16200680d865162004cef565b5110620266fa565b156202681757620267df6200680d835162004cef565b516103e881101562004cfd5760039160018060a01b03905116600052811b01602052620167cc620169f0604060002054925162004cef565b620268276200680d835162004cef565b516103e881101562004cfd57611fbb9160018060a01b0390511660005260031b01602052620167cc620169f0604060002054925162004cef565b620268786103e8620267c16200680d865162004cef565b620267c9565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f383a2055494e543235365f324441525241595b305d206d75737460448201527120686176652074776f20656c656d656e747360701b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f383a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b156202694257565b60405162461bcd60e51b815260206004820152605860248201527f43452049445f393a2055494e543235365f324441525241595b305d5b305d2028604482015260008051602062033a8c833981519152606482015277081d1a19481b195b99dd1a081bd9881d1bdad95b931a5cdd60421b608482015260a490fd5b916020019160018351510362026b1e576002620269db845162004cef565b51510362026abe57801562026aa15762026a096103e862026a016200680d865162004cef565b51106202693a565b1562026a575762026a1f6200680d835162004cef565b516103e881101562004cfd5760039160018060a01b03905116600052811b01602052620168cd620169f0604060002054925162004cef565b62026a676200680d835162004cef565b516103e881101562004cfd57611fbb9160018060a01b0390511660005260031b01602052620168cd620169f0604060002054925162004cef565b62026ab86103e862026a016200680d865162004cef565b62026a09565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f393a2055494e543235365f324441525241595b305d206d75737460448201527120686176652074776f20656c656d656e747360701b6064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f393a2055494e543235365f32444152524159206d75737420686160448201526d1d99481bdb9948195b195b595b9d60921b6064820152608490fd5b1562026b8257565b60405162461bcd60e51b815260206004820152605960248201527f43452049445f31303a2055494e543235365f324441525241595b305d5b305d20604482015260008051602062033aac83398151915260648201526000805160206203380c833981519152608482015260a490fd5b91909160208092019160018351510362026e23576003918262026c15855162004cef565b51510362026dc057801562026da35762026c436103e862026c3b6200680d875162004cef565b511062026b7a565b1562026cfe5762026c596200680d845162004cef565b51916103e88084101562004cfd5785516001600160a01b03908116600090815294831b830184526040852054865162026c9790620169f09062004cef565b511115968762026cac575b5050505050505090565b909192939495965062026cc46200680d885162004cef565b519283101562022a4b5751168452811b0190526040902054905162026cee906201d46a9062004cef565b5110153880808080808062026ca2565b62026d0e6200680d845162004cef565b516103e88082101562004cfd5760018060a01b039384875116946000958652611fbb8094831b018552604086205462026d4c620169f0895162004cef565b511115978862026d6157505050505050505090565b90919293949596975062026d7a6200680d895162004cef565b519384101562022b4f57511685521b0190526040902054905162022a3a906201d46a9062004cef565b62026dba6103e862026c3b6200680d875162004cef565b62026c43565b60405162461bcd60e51b815260048101839052603560248201527f43452049445f31303a2055494e543235365f324441525241595b305d206d757360448201527474206861766520746872656520656c656d656e747360581b6064820152608490fd5b6084906040519062461bcd60e51b82526004820152602f60248201527f43452049445f31303a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152fd5b1562026e8457565b60405162461bcd60e51b815260206004820152605960248201527f43452049445f31313a2055494e543235365f324441525241595b305d5b305d20604482015260008051602062033aac83398151915260648201526000805160206203380c833981519152608482015260a490fd5b91602001916001835151036202704e57600262026f11845162004cef565b51510362026ff457801562026fd75762026f3f6103e862026f376200680d865162004cef565b511062026e7c565b1562026f8d5762026f556200680d835162004cef565b516103e881101562004cfd5760039160018060a01b03905116600052811b0160205262016afb620169f0604060002054925162004cef565b62026f9d6200680d835162004cef565b516103e881101562004cfd57611fbb9160018060a01b0390511660005260031b0160205262016afb620169f0604060002054925162004cef565b62026fee6103e862026f376200680d865162004cef565b62026f3f565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f31313a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31313a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b15620270b057565b60405162461bcd60e51b815260206004820152605960248201527f43452049445f31323a2055494e543235365f324441525241595b305d5b305d20604482015260008051602062033aac83398151915260648201526000805160206203380c833981519152608482015260a490fd5b9160200191600183515103620273155760026202713d845162004cef565b515103620272bb5780156202729e576202716b6103e8620271636200680d865162004cef565b5110620270a8565b156202721057620271816200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b03166000908152600392831b90920160205260408220546064808202939180159085049091141715620271fc57620271d56200680d855162004cef565b5191821015620014ce57506202161e620167cc926006620169f09360031b015490620050d4565b634e487b7160e01b81526011600452602490fd5b620272206200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b0316600090815260039290921b611fbb0160205260408220546064808202939180159085049091141715620271fc57620272766200680d855162004cef565b5191821015620014ce57506202161e620167cc92611fbe620169f09360031b015490620050d4565b620272b56103e8620271636200680d865162004cef565b6202716b565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f31323a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31323a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b91602001916001835151036202750e5760026202738d845162004cef565b515103620274b457156202742657620273ab6200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b03166000908152600392831b90920160205260408220546064808202939180159085049091141715620271fc57620273ff6200680d855162004cef565b5191821015620014ce57506202161e620168cd926006620169f09360031b015490620050d4565b620274366200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b0316600090815260039290921b611fbb0160205260408220546064808202939180159085049091141715620271fc576202748c6200680d855162004cef565b5191821015620014ce57506202161e620168cd92611fbe620169f09360031b015490620050d4565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f31333a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31333a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b906020809301916001835151036202785e57600262027588845162004cef565b515103620278045715620276c857620275a66200680d835162004cef565b516103e8908181101562004cfd5760018060a01b03948584511693600094855260038093811b0182526040852054606481029080820460641490151715620276b457620275f86200680d885162004cef565b518581101562022b4f57841b600601546202761391620050d4565b62027623620169f0885162004cef565b511115968762027637575050505050505090565b90919293949596506202764f6200680d885162004cef565b51918583101562022b4f5751168552821b8201905260408320546064808202949180159086049091141715620271fc576202768f6200680d865162004cef565b5192831015620014ce57501b6006015462026cee916201d46a916202161e91620050d4565b634e487b7160e01b86526011600452602486fd5b620276d86200680d835162004cef565b51906103e88083101562004cfd5760018060a01b039485835116936000948552611fbb809160031b018252604085205493606485029480860460641490151715620276b4576202772d6200680d885162004cef565b51948486101562022b4f576202774e90611fbe809760031b015490620050d4565b6202775e620169f0895162004cef565b51111597886202777357505050505050505090565b9091929394959697506202778c6200680d895162004cef565b519185831015620277f0575116865260031b019052604083205492606484029380850460641490151715620271fc57620277cb6200680d865162004cef565b5191821015620014ce575060031b015462022a3a916201d46a916202161e91620050d4565b634e487b7160e01b88526032600452602488fd5b60405162461bcd60e51b815260048101859052603360248201527f43452049445f31343a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260048101859052602f60248201527f43452049445f31343a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b916020019160018351510362027a57576002620278d6845162004cef565b515103620279fd57156202796f57620278f46200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b03166000908152600392831b90920160205260408220546064808202939180159085049091141715620271fc57620279486200680d855162004cef565b5191821015620014ce57506202161e62016afb926006620169f09360031b015490620050d4565b6202797f6200680d835162004cef565b51906103e8908183101562004cfd57516001600160a01b0316600090815260039290921b611fbb0160205260408220546064808202939180159085049091141715620271fc57620279d56200680d855162004cef565b5191821015620014ce57506202161e62016afb92611fbe620169f09360031b015490620050d4565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f31353a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31353a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b916020019160018351510362027b7757600162027acf845162004cef565b51510362027b1d57801562027afd576202161e6200680d91620167cc9360018060a01b03905116906201b5d7565b5051620167cc906200680d906202161e906001600160a01b03166201b583565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f31363a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31363a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b916020019160018351510362027c9757600162027bef845162004cef565b51510362027c3d57801562027c1d576202161e6200680d91620168cd9360018060a01b03905116906201b5d7565b5051620168cd906200680d906202161e906001600160a01b03166201b583565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f31373a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31373a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b90916020019060018251510362027e2d57600262027d10835162004cef565b51510362027dd357801562027d815782516001600160a01b039062027d38908216836201b5d7565b62027d486200680d855162004cef565b511115938462027d59575050505090565b62027d74939450916202161e91620169f0935116906201b5d7565b51101538808080620051c4565b5081516001600160a01b039062027d9a9082166201b583565b62027daa6200680d845162004cef565b511115928362027dba5750505090565b62021a61929350620169f0916202161e9151166201b583565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f31383a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31383a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b916020019160018351510362027f4d57600162027ea5845162004cef565b51510362027ef357801562027ed3576202161e6200680d91620167cc9360018060a01b03905116906201c48e565b5051620167cc906200680d906202161e906001600160a01b03166201c43a565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f31393a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f31393a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b91602001916001835151036202806d57600162027fc5845162004cef565b5151036202801357801562027ff3576202161e6200680d91620168cd9360018060a01b03905116906201c48e565b5051620168cd906200680d906202161e906001600160a01b03166201c43a565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f32303a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f32303a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b909160200190600182515103620281f6576002620280e6835162004cef565b5151036202819c5780156202814a5782516001600160a01b03906202810e908216836201c48e565b6202811e6200680d855162004cef565b51111593846202812f575050505090565b62027d74939450916202161e91620169f0935116906201c48e565b5081516001600160a01b0390620281639082166201c43a565b620281736200680d845162004cef565b5111159283620281835750505090565b62021a61929350620169f0916202161e9151166201c43a565b60405162461bcd60e51b815260206004820152603360248201527f43452049445f32313a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f32313a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b91602001916001835151036202832e5760016202826e845162004cef565b515103620282d45715620282a857516001600160a01b03166000908152611f4560205260409020549051620167cc906200680d9062004cef565b516001600160a01b03166000908152613efd60205260409020549051620167cc906200680d9062004cef565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f32353a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f32353a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b916020019160018351510362028466576001620283a6845162004cef565b5151036202840c5715620283e057516001600160a01b03166000908152611f4560205260409020549051620168cd906200680d9062004cef565b516001600160a01b03166000908152613efd60205260409020549051620168cd906200680d9062004cef565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f32363a2055494e543235365f324441525241595b305d206d757360448201526000805160206203386c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f32363a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b9091602080910191600183515103620285d5576002620284e1845162004cef565b5151036202857b57156202854f5760018060a01b039081845116600052611f45918282526040600020546202851b6200680d865162004cef565b51111594856202852d57505050505090565b909192939450511660005252620263a0620169f0604060002054925162004cef565b60018060a01b039081845116600052613efd918282526040600020546202851b6200680d865162004cef565b60405162461bcd60e51b815260048101839052603360248201527f43452049445f32373a2055494e543235365f324441525241595b305d206d75736044820152600080516020620337cc8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602f60248201527f43452049445f32373a2055494e543235365f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b909160400160019283825151036202870b57839215620286aa576000925b6202865b5750505050600090565b62028667825162004cef565b51518310156201719057839260018060a01b03808351169062028690836200743f875162004cef565b511614620051c457620286a39062004cdf565b926202864d565b6000925b620286bc5750505050600090565b620286c8825162004cef565b51518310156201719057839260018060a01b038083511690620286f1836200743f875162004cef565b511614620051c457620287049062004cdf565b92620286ae565b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f33313a20414444524553535f32444152524159206d7573742068604482015260008051602062033a4c8339815191526064820152608490fd5b9161012d8114620289f85761012e8114620289ec5761012f8114620289e0576101308114620289d4576101318114620289c8576101328114620289bc576101338114620289b0576101348114620289a4576101358114620289985761013681146202898c5761013781146202898057610138811462028974576101398114620289685761013a81146202895c5761013b8114620289505761013c8114620289445761013d8114620289375761013e81146202892a5761013f81146202891d5761014081146202891057610141811462028904576101428114620288f8576101438114620288ec576101448114620288e0576101458114620288d4576101468114620288c8576101478114620288bc576101738114620288af576101748114620288a3576101751462028898575050600090565b620032d2916202b213565b50620032d2916202b050565b5050620032d2906202aff4565b50620032d2916202aea6565b50620032d2916202ab5c565b50620032d2916202a9e2565b50620032d2916202a861565b50620032d2916202a69c565b50620032d2916202a53a565b50620032d2916202a3bf565b5050620032d2906202a2b8565b5050620032d2906202a1a3565b5050620032d2906202a0a1565b5050620032d29062029f99565b50620032d29162029e18565b50620032d29162029c97565b50620032d29162029b14565b50620032d29162029991565b50620032d29162029810565b50620032d2916202968f565b50620032d2916202950c565b50620032d29162029389565b50620032d2916202924a565b50620032d2916202910b565b50620032d29162028fe6565b50620032d29162028ec2565b50620032d29162028d84565b50620032d29162028c46565b50620032d29162028b22565b50620032d2919060200190600191828151510362028ac9576020820151602681101562002a2357600d03620065c75762028a3383926202b3bf565b6000935b62028a455750505050600090565b62028a51825162004cef565b515184101562017190576000835b62028a79575b5062028a72839462004cdf565b9362028a37565b939291815185101562028ac05762028a97846200743f835162004cef565b5162028aa4868462004d46565b511462016c4d5762028ab883949562004cdf565b909262028a5f565b91929362028a65565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3330313a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b9060200190600191828151510362028bed576020820151602681101562002a2357600d03620065c75762028b5783926202b3bf565b6000935b62028b695750505050600090565b62028b75825162004cef565b515184101562017190576000835b62028b9d575b5062028b96839462004cdf565b9362028b5b565b939291815185101562028be45762028bbb846200743f835162004cef565b5162028bc8868462004d46565b511462016c4d5762028bdc83949562004cdf565b909262028b83565b91929362028b89565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3330323a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b9060200190600191828151510362028d2b576020820151602681101562002a2357600d03620065c75762028c7b83926202b3bf565b6000925b62028c8a5750505090565b62028c96825162004cef565b515183101562016e0d57600080855b62028cc5575b501562016d865762028cbe849362004cdf565b9262028c7f565b8295939194955181101562028d205762028ce5866200743f845162004cef565b5162028cf2828562004d46565b511462028d13579062028d0784939262004cdf565b90939594919262028ca5565b5091809493503862028cab565b949390929462028cab565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3330333a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b9060200190600191828151510362028e69576020820151602681101562002a2357600d03620065c75762028db983926202b3bf565b6000925b62028dc85750505090565b62028dd4825162004cef565b515183101562016e0d57600080855b62028e03575b501562016d865762028dfc849362004cdf565b9262028dbd565b8295939194955181101562028e5e5762028e23866200743f845162004cef565b5162028e30828562004d46565b511462028e51579062028e4584939262004cdf565b90939594919262028de3565b5091809493503862028de9565b949390929462028de9565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3330343a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b9060200190600191828151510362028f8d576020820151602681101562002a2357600e03620065c75762028ef783926202b3bf565b6000935b62028f095750505050600090565b62028f15825162004cef565b515184101562017190576000835b62028f3d575b5062028f36839462004cdf565b9362028efb565b939291815185101562028f845762028f5b846200743f835162004cef565b5162028f68868462004d46565b511462016c4d5762028f7c83949562004cdf565b909262028f23565b91929362028f29565b60405162461bcd60e51b815260206004820152602b60248201527f43452049445f3330353a205468652055494e545f32444152524159206c656e6760448201526a7468206973206e6f74203160a81b6064820152608490fd5b90602001906001918281515103620290b1576020820151602681101562002a2357600e03620065c7576202901b83926202b3bf565b6000935b6202902d5750505050600090565b62029039825162004cef565b515184101562017190576000835b62029061575b506202905a839462004cdf565b936202901f565b9392918151851015620290a8576202907f846200743f835162004cef565b516202908c868462004d46565b511462016c4d57620290a083949562004cdf565b909262029047565b9192936202904d565b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3330363a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b90602001906001918281515103620291f0576020820151602681101562002a2357600e03620065c7576202914083926202b3bf565b6000925b6202914f5750505090565b6202915b825162004cef565b515183101562016e0d57600080855b6202918a575b501562016d865762029183849362004cdf565b9262029144565b82959391949551811015620291e557620291aa866200743f845162004cef565b51620291b7828562004d46565b5114620291d85790620291cc84939262004cdf565b9093959491926202916a565b5091809493503862029170565b949390929462029170565b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3330373a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b906020019060019182815151036202932f576020820151602681101562002a2357600e03620065c7576202927f83926202b3bf565b6000925b6202928e5750505090565b6202929a825162004cef565b515183101562016e0d57600080855b620292c9575b501562016d8657620292c2849362004cdf565b9262029283565b829593919495518110156202932457620292e9866200743f845162004cef565b51620292f6828562004d46565b51146202931757906202930b84939262004cdf565b909395949192620292a9565b50918094935038620292af565b9493909294620292af565b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3330383a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b90602001906001918281515103620294b2576002620293a9825162004cef565b51510362029458576020820151602681101562002a2357600d03620065c757620293d483926202b3bf565b906000925b620293e75750505050600090565b8151831015620171905782620293ff85948462004d46565b51620294106200680d845162004cef565b5111158062029431575b620051c4576202942a9062004cdf565b92620293d9565b506202943e818462004d46565b516202944f620169f0845162004cef565b5110156202941a565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3330393a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3330393a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b90602001906001918281515103620296355760026202952c825162004cef565b515103620295db576020820151602681101562002a2357600d03620065c7576202955783926202b3bf565b906000925b6202956a5750505050600090565b81518310156201719057826202958285948462004d46565b51620295936200680d845162004cef565b51111580620295b4575b620051c457620295ad9062004cdf565b926202955c565b50620295c1818462004d46565b51620295d2620169f0845162004cef565b5110156202959d565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331303a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331303a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b90602001906001918281515103620297b6576002620296af825162004cef565b5151036202975c576020820151602681101562002a2357600d03620065c757620296da83926202b3bf565b60009182945b620296ed57505050905090565b815185101562016c555762029703858362004d46565b51620297146200680d835162004cef565b5111801562029736575b62016c4d576202972f849562004cdf565b94620296e0565b5062029743858362004d46565b5162029754620169f0835162004cef565b51106202971e565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331313a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331313a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b906020019060019182815151036202993757600262029830825162004cef565b515103620298dd576020820151602681101562002a2357600d03620065c7576202985b83926202b3bf565b60009182945b6202986e57505050905090565b815185101562016c555762029884858362004d46565b51620298956200680d835162004cef565b51118015620298b7575b62016c4d57620298b0849562004cdf565b9462029861565b50620298c4858362004d46565b51620298d5620169f0835162004cef565b51106202989f565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331323a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331323a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b9060200190600191828151510362029aba576002620299b1825162004cef565b51510362029a60576020820151602681101562002a2357600e03620065c757620299dc83926202b3bf565b906000925b620299ef5750505050600090565b815183101562017190578262029a0785948462004d46565b5162029a186200680d845162004cef565b5111158062029a39575b620051c45762029a329062004cdf565b92620299e1565b5062029a46818462004d46565b5162029a57620169f0845162004cef565b51101562029a22565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331333a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331333a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b9060200190600191828151510362029c3d57600262029b34825162004cef565b51510362029be3576020820151602681101562002a2357600e03620065c75762029b5f83926202b3bf565b906000925b62029b725750505050600090565b815183101562017190578262029b8a85948462004d46565b5162029b9b6200680d845162004cef565b5111158062029bbc575b620051c45762029bb59062004cdf565b9262029b64565b5062029bc9818462004d46565b5162029bda620169f0845162004cef565b51101562029ba5565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331343a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331343a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b9060200190600191828151510362029dbe57600262029cb7825162004cef565b51510362029d64576020820151602681101562002a2357600e03620065c75762029ce283926202b3bf565b60009182945b62029cf557505050905090565b815185101562016c555762029d0b858362004d46565b5162029d1c6200680d835162004cef565b5111801562029d3e575b62016c4d5762029d37849562004cdf565b9462029ce8565b5062029d4b858362004d46565b5162029d5c620169f0835162004cef565b511062029d26565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331353a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331353a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b9060200190600191828151510362029f3f57600262029e38825162004cef565b51510362029ee5576020820151602681101562002a2357600e03620065c75762029e6383926202b3bf565b60009182945b62029e7657505050905090565b815185101562016c555762029e8c858362004d46565b5162029e9d6200680d835162004cef565b5111801562029ebf575b62016c4d5762029eb8849562004cdf565b9462029e69565b5062029ecc858362004d46565b5162029edd620169f0835162004cef565b511062029ea7565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3331363a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3331363a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b6020808201908151602681101562002a2357600d1480156202a08b575b6202a03d57508051602681101562002a2357600f149081156202a026575b5062029fe05750600090565b6000805b606060408401510151805182101562017689576202a0058260c09262004d46565b5101511562022e325760406202a01d60609262004cdf565b91505062029fe4565b905051602681101562002a2357600c143862029fd4565b60009150815b816040850151015180518210156202a081576202a0638260019262004d46565b5115150362017682576202a07960409162004cdf565b90506202a043565b5050505050600190565b508151602681101562002a2357600e1462029fb6565b6020808201908151602681101562002a2357600d1480156202a18d575b6202a14957508051602681101562002a2357600f149081156202a132575b506202a0e85750600090565b6000805b6060604084015101518051821015620176895760c06202a10f8360019362004d46565b51015115151462022e325760406202a12960609262004cdf565b9150506202a0ec565b905051602681101562002a2357600c14386202a0dc565b60009150815b816040850151015180518210156202a081576202a16f8260019262004d46565b5115151462017682576202a18560409162004cdf565b90506202a14f565b508151602681101562002a2357600e146202a0be565b6020808201908151602681101562002a2357600d1480156202a2a2575b6202a25457508051602681101562002a2357600f149081156202a23d575b506202a1ea5750600090565b60005b6060604083015101518051821015620065c757819060c06202a213600193849362004d46565b5101511515146202a237575060406202a22e60609262004cdf565b9150506202a1ed565b91505090565b905051602681101562002a2357600c14386202a1de565b905060005b8160408401510151805182101562016d865781906202a27c600192839262004d46565b511515146202a29b57506202a29360409162004cdf565b90506202a259565b9250505090565b508151602681101562002a2357600e146202a1c0565b6020808201908151602681101562002a2357600d1480156202a3a9575b6202a36257508051602681101562002a2357600f149081156202a34b575b506202a2ff5750600090565b60005b6060604083015101518051821015620065c7576202a3238260c09262004d46565b510151156202a3445760406202a33b60609262004cdf565b9150506202a302565b5050600190565b905051602681101562002a2357600c14386202a2f3565b905060005b8160408401510151805182101562016d865781906202a38a600192839262004d46565b511515036202a29b57506202a3a160409162004cdf565b90506202a367565b508151602681101562002a2357600e146202a2d5565b60208092019160019283815151036202a4e0576202a3df84915162004cef565b5151036202a487578082018051602681101562002a2357600f141590816202a46f575b50620065c757600091835b6202a41b5750505050600090565b60408101926060845101519384518210156201e540576202a4566200680d60a0866202a449868b9a62004d46565b5101519351015162004cef565b5114620051c4576202a4689062004cdf565b926202a40d565b905051602681101562002a2357600c1415386202a402565b6084906040519062461bcd60e51b82526004820152603260248201527f43452049445f3332313a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152fd5b60405162461bcd60e51b815260048101839052602f60248201527f43452049445f3332313a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b60208092019160019283815151036202a642578183018051602681101562002a2357600f141590816202a62a575b5062016d865783926000945b6202a583575050505050600090565b6040810160608082510151518710156202a62257906000865b6202a5b8575b5050506202a5b1849562004cdf565b946202a574565b6202a5c4855162004cef565b51518110156202a61c57856202a5df89858551015162004d46565b5101516202a5f3826200743f885162004cef565b51146202a61157906202a60887939262004cdf565b9091926202a59c565b505050505050905090565b6202a5a2565b505062016f9a565b905051602681101562002a2357600c1415386202a568565b60405162461bcd60e51b815260048101839052602f60248201527f43452049445f3332323a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b60208092019160019283815151036202a8075760026202a6bd825162004cef565b5151036202a7ad578183018051602681101562002a2357600f141590816202a795575b5062016d8657600092845b6202a6fa575050505050600090565b604081019360609485815101519586518310156202a78c57828691826202a723838c9b62004d46565b5101516202a7366200680d895162004cef565b51111593846202a75c575b50505050620174c1576202a7559062004cdf565b936202a6eb565b6202a76c93945051015162004d46565b5101516202a77f620169f0855162004cef565b511015848238806202a741565b50505062016f9a565b905051602681101562002a2357600c1415386202a6e0565b60405162461bcd60e51b815260048101839052603260248201527f43452049445f3332333a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602f60248201527f43452049445f3332333a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b602080920160019283825151036202a98957836202a880835162004cef565b5151036202a92a578083018051602681101562002a2357600f141590816202a912575b5062016d8657600092845b6202a8bd575050505050600090565b6060604082015101519384518110156202a90b57826202a8df82889762004d46565b5101516202a8f26200680d865162004cef565b5110620174c1576202a9049062004cdf565b936202a8ae565b5062016f9a565b905051602681101562002a2357600c1415386202a8a3565b6084906040519062461bcd60e51b82526004820152603260248201527f43452049445f3332343a205468652055494e545f3235365f324441525241595b604482015271305d206c656e677468206973206e6f74203160701b6064820152fd5b6084906040519062461bcd60e51b82526004820152602f60248201527f43452049445f3332343a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152fd5b602080920160019283825151036202ab0357836202aa01835162004cef565b5151036202aaa4578083018051602681101562002a2357600f141590816202aa8c575b5062016d8657600092845b6202aa3e575050505050600090565b6060604082015101519384518110156202a90b57826202aa6082889762004d46565b5101516202aa736200680d865162004cef565b5111620174c1576202aa859062004cdf565b936202aa2f565b905051602681101562002a2357600c1415386202aa24565b6084906040519062461bcd60e51b82526004820152603260248201527f43452049445f3332353a205468652055494e545f3235365f324441525241595b604482015271305d206c656e677468206973206e6f74203160701b6064820152fd5b6084906040519062461bcd60e51b82526004820152602f60248201527f43452049445f3332353a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152fd5b906020019060019182815151036202ae4c57826202ab7b825162004cef565b5151036202adec57602082018051602681101562002a2357600f141590816202add4575b50620065c7576000939291825b6202abbb575b50600093505050565b60408101946060808751015180518310156202adcb576202abe1836202abe89262004d46565b5162005673565b906006918281101562002a235715806202adb2575b6202ad58576202ac166202abe184838b51015162004d46565b8281101562002a23578614806202ad98575b6202ad58576202ac416202abe184838b51015162004d46565b8281101562002a2357600280911490816202ad7d575b506202ad58576202ac716202abe184838b51015162004d46565b8281101562002a2357600380911490816202ad62575b506202ad58576202aca16202abe184838b51015162004d46565b978289101562002a23576004809914806202ad3e575b6202ad3357836202acd0926202abe19251015162004d46565b908110156202ad1e5784959650600580911490816202ad03575b50620051c4576202acfb9062004cdf565b94936202abac565b90506202ad156200680d855162004cef565b5114386202acea565b602187634e487b7160e01b6000525260246000fd5b509496505050505050565b50886202ad506200680d885162004cef565b51146202acb7565b5093955050505050565b90506202ad746200680d875162004cef565b5114386202ac87565b90506202ad8f6200680d875162004cef565b5114386202ac57565b50856202adaa6200680d875162004cef565b51146202ac28565b506202adc36200680d865162004cef565b51156202abfd565b5050506202abb2565b905051602681101562002a2357600c1415386202ab9f565b60405162461bcd60e51b815260206004820152603260248201527f43452049445f3332363a205468652055494e545f3235365f324441525241595b604482015271305d206c656e677468206973206e6f74203160701b6064820152608490fd5b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3332363a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b906020019060019182815151036202af9a57602082018051602681101562002a2357600f141590816202af82575b50620065c75782916000935b6202aeee5750505050600090565b6040810160608082510151518610156201e54057906000855b6202af23575b5050506202af1c839462004cdf565b936202aee0565b6202af2f855162004cef565b51518110156202af7c57826202af4a88828551015162004d46565b5101516202af5e826200743f885162004cef565b511462023bcd57906202af7386939262004cdf565b9091926202af07565b6202af0d565b905051602681101562002a2357600c1415386202aed4565b60405162461bcd60e51b815260206004820152602f60248201527f43452049445f3332373a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b6020810151602681101562002a2357601303620074b25760005b60408083015101518051821015620065c757819060c06202b033600193849362004d46565b5101511515146202a23757506202b04a9062004cdf565b6202b00e565b6020918201805151600094936001939091600019016202b1b95760026202b078845162004cef565b5151036202b15f5781810151602681101562002a23576013036202b155576000959493929190835b6202b0af575b50505050909150565b604080820190808251015180518a10156202b14c578491826202b0d48c809462004d46565b5101516202b0e76200680d895162004cef565b51111593846202b11c575b505050506202b112576202b1098495969762004cdf565b9695946202b0a0565b5050509150915090565b6202b12c93945051015162004d46565b5101516202b13f620169f0855162004cef565b511015828838806202b0f2565b5050506202b0a6565b5060009450505050565b60405162461bcd60e51b815260048101839052603260248201527f43452049445f3337323a205468652055494e545f3235365f324441525241595b60448201526000805160206203374c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101839052602f60248201527f43452049445f3337323a205468652055494e545f3235365f3244415252415920604482015260008051602062033a0c8339815191526064820152608490fd5b9060200160019182825151036202b36457826202b231835162004cef565b5151036202b306576020810151602681101562002a2357601303620065c75782916000935b6202b2645750505050600090565b6040808301908082510151518610156201e54057906000855b6202b299575b5050506202b292839462004cdf565b936202b256565b6202b2a987848451015162004d46565b5151518110156202b300576202b2d1816202b2c989868651015162004d46565b515162004d46565b516202b2e26200680d865162004cef565b511462023bcd57906202b2f786939262004cdf565b9091926202b27d565b6202b283565b60405162461bcd60e51b815260206004820152603060248201527f43452049445f3337333a2054686520535452494e475f324441525241595b305d60448201526f206c656e677468206973206e6f74203160801b6064820152608490fd5b60405162461bcd60e51b815260206004820152602d60248201527f43452049445f3337333a2054686520535452494e475f32444152524159206c6560448201526c6e677468206973206e6f74203160981b6064820152608490fd5b6020908181018051602681101562002a2357600d149081156202b4da575b506202b3ff5750506040516202b3f38162002b3f565b60008152600036813790565b6040019160a0916202b4216202b419848651015162004cef565b515162004e62565b93600092835b6202b436868451015162004cef565b51518110156202b493576202b45081858551015162004d46565b516202b46e575b6202b4666202b4369162004cdf565b90506202b427565b936202b4666202b489828762001ac76202b436958c62004d46565b959150506202b457565b50935050506202b4a38162004e62565b9060005b8181106202b4b6575090925050565b806202b4c76202b4d4928762004d46565b5162001ac7828662004d46565b6202b4a7565b905051602681101562002a2357600e14386202b3dd565b9161025981146202b86d5761025a81146202b77d5761025b81146202b68d5761025c81146202b5775761025d81146202b56b5761025e81146202b55f5761025f81146202b55357610260146202b548575050600090565b620032d2916202bd2b565b50620032d2916202bbb1565b50620032d2916202baa0565b50620032d2916202b95d565b50602001906001825151036202b6335760026202b595835162004cef565b5151036202b5d957602001908151516202b5b46200680d835162004cef565b51111591826202b5c357505090565b620169f7919250620169f0905151925162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3630343a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3630343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b50602001906001825151036202b7235760016202b6ab835162004cef565b5151036202b6c9576200680d602062016afb92015151925162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3630333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3630333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b50602001906001825151036202b8135760016202b79b835162004cef565b5151036202b7b9576200680d6020620168cd92015151925162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3630323a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3630323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b50602001906001825151036202b9035760016202b88b835162004cef565b5151036202b8a9576200680d6020620167cc92015151925162004cef565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3630313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3630313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b919091602080930160019182825151036202ba4657826202b97f835162004cef565b5151036202b9ec57938293946000935b6202b99e575050505050600090565b818101519384518110156202a90b576202b9c3620076a184620067a7848a9962004d46565b6202b9d36200680d865162004cef565b5114620174c1576202b9e59062004cdf565b936202b98f565b60405162461bcd60e51b815260048101869052603160248201527f43452049445f3630353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260048101869052602e60248201527f43452049445f3630353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b919060208091019060019182815151036202bb57578293946000945b6202bacb575050505050600090565b8281018051518610156202a90b576000855b6202baf8575b50506202baf1849562004cdf565b946202babc565b6202bb04845162004cef565b51518110156202bb51576202bb24620076a186620067a78a865162004d46565b6202bb35826200743f875162004cef565b511462023bcd57906202bb49869262004cdf565b90916202badd565b6202bae3565b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3630363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b91909160208093019060019182815151036202bcd157846202bbd4825162004cef565b5151920191825151036202bc565782939460009283955b6202bbfa575b50505050905090565b805180518710156202bc4f57620076a183620067a7896202bc1b9462004d46565b6202bc2c876200743f865162004cef565b51036202bc46576202bc3f859662004cdf565b956202bbeb565b50505091505090565b506202bbf1565b60405162461bcd60e51b815260048101869052604760248201527f43452049445f3630373a205468652055494e543235365f324441525241595b3060448201527f5d206c656e677468206973206e6f7420657175616c20746f2070726f6772616d606482015266040d8cadccee8d60cb1b608482015260a490fd5b60405162461bcd60e51b815260048101869052602e60248201527f43452049445f3630373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b919060208091019060019182815151036202bdfb578293946000935b6202bd53575050505090565b8281018051518510156202bdf457856000918183905b6202bd8b575b5050501562016f9a576202bd84859462004cdf565b936202bd47565b6202bd97865162004cef565b51518110156202bdee576202bdb7620076a188620067a78b865162004d46565b6202bdc8826200743f895162004cef565b51146202bde1576202bdda9062004cdf565b826202bd69565b505090508538806202bd6f565b6202bd6f565b50620051c4565b60405162461bcd60e51b815260048101839052602e60248201527f43452049445f3630383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b916101cd81146202bea7576101ce81146202be9b576101cf81146202be8f576101d0146202be84575050600090565b620032d2916202c4b5565b50620032d2916202c293565b50620032d2916202c0a0565b50620032d2919060200160019182825151036202c0465760026202becc835162004cef565b5151036202bfec576202bedf816202c6a8565b15620065c7576202bef0906202c705565b9180939150518251036202bf8157600092845b6202bf12575050505050600090565b8051841015620174c957836202bf2a86958362004d46565b516202bf3b6200680d855162004cef565b5114806202bf5b575b620174c1576202bf549062004cdf565b936202bf03565b506202bf68818562004d46565b516202bf79620169f0855162004cef565b51106202bf44565b60405162461bcd60e51b815260206004820152604860248201527f43452049445f3436313a2054686520746f6b656e20636c617373206c6973742060448201526000805160206203382c8339815191526064820152670e840d8cadccee8d60c31b608482015260a490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3436313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3436313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036202c2395760026202c0bf835162004cef565b5151036202c1df576202c0d2816202c6a8565b15620065c7576202c0e3906202c705565b9180939150518251036202c17457600092845b6202c105575050505050600090565b8051841015620174c957836202c11d86958362004d46565b516202c12e6200680d855162004cef565b5114806202c14e575b620174c1576202c1479062004cdf565b936202c0f6565b506202c15b818562004d46565b516202c16c620169f0855162004cef565b51116202c137565b60405162461bcd60e51b815260206004820152604860248201527f43452049445f3436323a2054686520746f6b656e20636c617373206c6973742060448201526000805160206203382c8339815191526064820152670e840d8cadccee8d60c31b608482015260a490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3436323a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3436323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036202c45b5760036202c2b2835162004cef565b5151036202c401576202c2c5816202c6a8565b15620065c7576202c2d6906202c705565b9180939150518251036202c39657600092845b6202c2f8575050505050600090565b8051841015620174c957836202c31086958362004d46565b516202c3216200680d855162004cef565b5114806202c36f575b806202c348575b620174c1576202c3419062004cdf565b936202c2e9565b506202c355818562004d46565b516202c3666201d46a855162004cef565b5110156202c331565b506202c37c818562004d46565b516202c38d620169f0855162004cef565b5111156202c32a565b60405162461bcd60e51b815260206004820152604860248201527f43452049445f3436333a2054686520746f6b656e20636c617373206c6973742060448201526000805160206203382c8339815191526064820152670e840d8cadccee8d60c31b608482015260a490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3436333a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3436333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b9060200160019182825151036202c64e5760026202c4d4835162004cef565b5151036202c5f4576202c4e7816202c6a8565b15620065c7576202c4f8906202c705565b9180939150518251036202c58957600092845b6202c51a575050505050600090565b8051841015620174c957836202c53286958362004d46565b516202c5436200680d855162004cef565b5114806202c563575b620174c1576202c55c9062004cdf565b936202c50b565b506202c570818562004d46565b516202c581620169f0855162004cef565b51146202c54c565b60405162461bcd60e51b815260206004820152604860248201527f43452049445f3436343a2054686520746f6b656e20636c617373206c6973742060448201526000805160206203382c8339815191526064820152670e840d8cadccee8d60c31b608482015260a490fd5b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3436343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3436343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b6020018051602681101562002a23576014149081156202c6ed575b81156202c6d6575b506202401c57600090565b905051602681101562002a2357601e14386202c6cb565b80915051602681101562002a2357601514906202c6c3565b6202c710816202c6a8565b156202c81657602081018051602681101562002a23576014146202c801578051602681101562002a23576015146202c7ca5751602681101562002a2357601e146202c79857506040516202c7648162002b3f565b60008152604051916202c7778362002b3f565b60008352604051916202c78a8362002b3f565b600083526000368137929190565b604001906202c7ac60a08351015162004cef565b51906202c7c360a062007446818651015162004d13565b5191929190565b50604001906202c7df60a08351015162004cef565b51906202c7c360a06202c7f6818651015162004d24565b519451015162004d35565b50604001906202c7ac60a08351015162004cef565b60405162461bcd60e51b815260206004820152606860248201527f43452049445f3436313a20546865206f7065726174696f6e206973206e6f742060448201527f746f6b656e206f7065726174696f6e20776974682063617368287061792d746f60648201527f2d6d696e742c207061792d746f2d7472616e736665722c206275726e2d616e646084820152672d726566756e642960c01b60a482015260c490fd5b916101af81146202c962576101b081146202c956576101b181146202c94a576101b281146202c93e576101b381146202c932576101b481146202c926576101b581146202c91a576101b6146202c90f575050600090565b620032d2916202d3ab565b50620032d2916202d206565b50620032d2916202d0a1565b50620032d2916202cf3c565b50620032d2916202cdd7565b50620032d2916202cc32565b50620032d2916202cacd565b50620032d291906020019060019182815151036202ca7357826202c987825162004cef565b5151036202ca19576020820151602681101562002a2357601103620065c757600091835b6202c9b95750505050600090565b604081019260a0936202c9d0858251015162004cef565b51518210156201e54057816200743f87966202c9ef9351015162004cef565b516202ca006200680d855162004cef565b5110620051c4576202ca129062004cdf565b926202c9ab565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433313a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433313a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202cbd857826202caec825162004cef565b5151036202cb7e576020820151602681101562002a2357601103620065c757600091835b6202cb1e5750505050600090565b604081019260a0936202cb35858251015162004cef565b51518210156201e54057816200743f87966202cb549351015162004cef565b516202cb656200680d855162004cef565b5111620051c4576202cb779062004cdf565b926202cb10565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433323a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433323a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202cd7d5760026202cc52825162004cef565b5151036202cd23576020820151602681101562002a2357601103620065c757600091835b6202cc845750505050600090565b604081019260a0936202cc9b858251015162004cef565b51518210156201e5405781856202ccbc826200743f8a998651015162004cef565b516202cccd6200680d885162004cef565b51111592836202ccf2575b505050620051c4576202cceb9062004cdf565b926202cc76565b5101516202cd0692506200743f9062004cef565b516202cd17620169f0855162004cef565b5110158138806202ccd8565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433333a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433333a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202cee257826202cdf6825162004cef565b5151036202ce88576020820151602681101562002a2357601103620065c757600091835b6202ce285750505050600090565b604081019260a0936202ce3f858251015162004cef565b51518210156201e54057816200743f87966202ce5e9351015162004cef565b516202ce6f6200680d855162004cef565b5114620051c4576202ce819062004cdf565b926202ce1a565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433343a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433343a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202d04757826202cf5b825162004cef565b5151036202cfed576020820151602681101562002a2357601203620065c757600091835b6202cf8d5750505050600090565b604081019260a0936202cfa4858251015162004cef565b51518210156201e54057816200743f87966202cfc39351015162004cef565b516202cfd46200680d855162004cef565b5110620051c4576202cfe69062004cdf565b926202cf7f565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433353a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433353a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202d1ac57826202d0c0825162004cef565b5151036202d152576020820151602681101562002a2357601203620065c757600091835b6202d0f25750505050600090565b604081019260a0936202d109858251015162004cef565b51518210156201e54057816200743f87966202d1289351015162004cef565b516202d1396200680d855162004cef565b5111620051c4576202d14b9062004cdf565b926202d0e4565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433363a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433363a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202d3515760026202d226825162004cef565b5151036202d2f7576020820151602681101562002a2357601203620065c757600091835b6202d2585750505050600090565b604081019260a0936202d26f858251015162004cef565b51518210156201e5405781856202d290826200743f8a998651015162004cef565b516202d2a16200680d885162004cef565b51111592836202d2c6575b505050620051c4576202d2bf9062004cdf565b926202d24a565b5101516202d2da92506200743f9062004cef565b516202d2eb620169f0855162004cef565b5110158138806202d2ac565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433373a205468652055494e543235365f324441525241595b306044820152600080516020620339ac8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433373a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b906020019060019182815151036202d4b657826202d3ca825162004cef565b5151036202d45c576020820151602681101562002a2357601203620065c757600091835b6202d3fc5750505050600090565b604081019260a0936202d413858251015162004cef565b51518210156201e54057816200743f87966202d4329351015162004cef565b516202d4436200680d855162004cef565b5114620051c4576202d4559062004cdf565b926202d3ee565b60405162461bcd60e51b815260206004820152603160248201527f43452049445f3433383a205468652055494e543235365f324441525241595b3060448201526000805160206203384c8339815191526064820152608490fd5b60405162461bcd60e51b815260206004820152602e60248201527f43452049445f3433383a205468652055494e543235365f32444152524159206c6044820152600080516020620338ac8339815191526064820152608490fd5b156202d51857565b60405162461bcd60e51b815260206004820152601c60248201527b496e76616c6964206e756d626572206f6620706172616d657465727360201b6044820152606490fd5b6202d5678162002fc4565b6202d5756200e52e620332ea565b6202d5808162002fc4565b600181036202d59e57506202d5986200e55a620332ea565b611faf55565b6202d5a98162002fc4565b600281036202d5b95750611fb055565b6202d5c48162002fc4565b600381036202d5d45750611fb155565b806202d5e260049262002fc4565b146202d5eb5750565b611fb255565b60609060208152601e60208201527f496e76616c69642072657475726e20747970653a20554e444546494e4544000060408201520190565b7f496e76616c69642061667465722d6f7020706c7567696e206c6576656c2e204c815264032bb32b6160dd1b602082015260250190565b7f496e76616c6964206265666f72652d6f7020706c7567696e206c6576656c2e2081526502632bb32b6160d51b602082015260260190565b9060005b8251811015620115b15760c06202d6b4828562004d46565b510151156202da6b576202d6cd6202abe1828562004d46565b60068082101562002a235760049182036202d818575060209060016003836202d6f7868962004d46565b51015106036202d7145750506202d70e9062004cdf565b6202d69c565b62004cdb82846202d7fd60636202d7456202d73e856202d735868e62004d46565b510151620050f5565b93620050f5565b92847f20697320776974682072657475726e2074797065205945535f414e445f534b4960409586519788946202d78162004db08388016202d660565b016000805160206203388c83398151915281526202d7aa82518093601396878501910162002e01565b01918201527f505f53414e44424f582c2073686f756c64206265206f6e206c6576656c205b3160338201526f2c20342c20372c2031302c202e2e2e5d60801b605382015203604381018552018362002b94565b5193849362461bcd60e51b8552840152602483019062002e26565b6202d8286202abe1848762004d46565b818110156201e0f6576001036202d938575060209060026003836202d84e868962004d46565b51015106036202d8655750506202d70e9062004cdf565b62004cdb82846202d7fd605d6202d8866202d73e856202d735868e62004d46565b92847f20697320776974682072657475726e20747970652053414e44424f585f4e454560409586519788946202d8c262004db08388016202d660565b016000805160206203388c83398151915281526202d8eb82518093601396878501910162002e01565b01918201527f4445442c2073686f756c64206265206f6e206c6576656c205b322c20352c20386033820152692c2031312c202e2e2e5d60b01b605382015203603d81018552018362002b94565b6202d9486202abe1848762004d46565b9081101562015501576002036202da4f576020906003826202d96b858862004d46565b510151066202d9815750506202d70e9062004cdf565b62004cdb82846202d7fd6202d9a76202d9a0846202d735858d62004d46565b92620050f5565b916202da4060409384519586936202d9c562004db08387016202d660565b016000805160206203388c83398151915281528151906202d9ef826013948d868501910162002e01565b01017f20697320776974682072657475726e2074797065204e4f2c2073686f756c642081527f6265206f6e206c6576656c205b332c20362c20392c2031322c202e2e2e5d00006020820152603e0190565b03601f19810184528362002b94565b60405162461bcd60e51b815290819062004cdb9082016202d5f1565b6202da7b6202abe1828562004d46565b6006908181101562002a23576005036202db965750602060016003826202daa3858862004d46565b51015106036202dab957506202d70e9062004cdf565b62004cdb826202db7960526202dada6202d73e866202d73581998c62004d46565b926040937f20697320776974682072657475726e2074797065205945532c2073686f756c6485519889936202db1562004db08387016202d629565b016000805160206203388c83398151915281528251906202db3f826013958c878501910162002e01565b01918201527f206265206f6e206c6576656c205b312c20342c20372c2031302c202e2e2e5d00603382015203603281018752018562002b94565b5192839262461bcd60e51b84526004840152602483019062002e26565b6202dba66202abe1838662004d46565b908082101562002a235760039182036202dcb557506002602091826202dbcd858862004d46565b51015106036202dbe357506202d70e9062004cdf565b62004cdb826202db79605c6202dc046202d73e866202d73581998c62004d46565b926040937f20697320776974682072657475726e207479706520564f54494e475f4e45454485519889936202dc3f62004db08387016202d629565b016000805160206203388c83398151915281528251906202dc69826013958c878501910162002e01565b01918201527f45442c2073686f756c64206265206f6e206c6576656c205b322c20352c20382c6033820152682031312c202e2e2e5d60b81b605382015203603c81018752018562002b94565b6202dcc56202abe1848762004d46565b9081101562002a23576002036202dd7157602090816202dce6848762004d46565b510151066202dcfb57506202d70e9062004cdf565b62004cdb826202db796202dd1a6202d9a0856202d73581988b62004d46565b916202dd6260409384519788936202dd3862004db08387016202d629565b016000805160206203388c83398151915281528151906202d9ef826013948b868501910162002e01565b03601f19810186528562002b94565b60405162461bcd60e51b81528062004cdb600482016202d5f1565b156202dd9457565b60405162461bcd60e51b815260206004820152604d60248201527f546865206c656e677468206f662074686520706c7567696e20696e646578657360448201527f20617272617920616e642074686520626f6f6c65616e206172726179206d757360648201526c74206265207468652073616d6560981b608482015260a490fd5b156202de1d57565b60405162461bcd60e51b815260206004820152602260248201527f496e76616c696420706c7567696e20696e64657820746f20626520656e61626c604482015261195960f21b6064820152608490fd5b156202de7557565b60405162461bcd60e51b815260206004820152602b60248201527f54686520706c7567696e20746f20626520656e61626c656420697320616c726560448201526a18591e48195b98589b195960aa1b6064820152608490fd5b156202ded657565b60405162461bcd60e51b815260206004820152602360248201527f496e76616c696420706c7567696e20696e64657820746f2062652064697361626044820152621b195960ea1b6064820152608490fd5b156202df2f57565b60405162461bcd60e51b815260206004820152602d60248201527f54686520706c7567696e20746f2062652064697361626c656420697320616c7260448201526c1958591e48191a5cd8589b1959609a1b6064820152608490fd5b156202df9257565b60405162461bcd60e51b815260206004820152603060248201527f546865206c656e677468206f662074617267657420616e6420746f6b656e436c60448201526f185cdcc81a5cc81b9bdd08195c5d585b60821b6064820152608490fd5b156202dff857565b60405162461bcd60e51b815260206004820152602c60248201527f546865206c656e677468206f662074617267657420616e6420616d6f756e742060448201526b1a5cc81b9bdd08195c5d585b60a21b6064820152608490fd5b156202e05a57565b60405162461bcd60e51b815260206004820152602260248201527f54686520746f6b656e20636c617373206973206e6f7420696e697469616c697a604482015261195960f21b6064820152608490fd5b156202e0b257565b60405162461bcd60e51b815260206004820152602960248201527f54686520746f74616c20737570706c79206f662074686520746f6b656e206973604482015268206f766572666c6f7760b81b6064820152608490fd5b156202e11157565b60405162461bcd60e51b8152602060048201526024808201527f5468652062616c616e6365206f662074686520746f6b656e206973206f766572604482015263666c6f7760e01b6064820152608490fd5b156202e16a57565b606460405162461bcd60e51b815260206004820152602060248201527f54686520746f6b656e20697320616c726561647920696e697469616c697a65646044820152fd5b60408101906202e1c360c08351015162004cef565b51916202e1e560a06202e1da818451015162004cef565b519251015162004d13565b51936202e1fa845183511462000fa3620331b7565b6202e20d845186511462000fa3620331b7565b60005b84518110156202e26a576202e226818462004d46565b51906103e882101562004cfd576202e2649160018060a01b03865116600052600390811b0160205262000faa60406000205462007ce9838a62004d46565b6202e210565b5092919360005b83518110156202e395576202e287818462004d46565b51906103e8918281101562004cfd5760018060a01b03908189511660005260039081602091811b0181526202e2c760406000205462007d56868962004d46565b906202e2d4868a62004d46565b51918783101562004cfd57846202e30193878f5116600052811b01845260406000205562000fa3620332bb565b6202e30d848862004d46565b518581101562004cfd578290846202e326878c62004d46565b5116600052811b0181526202e34660406000205462006814868962004d46565b9190926202e355868a62004d46565b519687101562004cfd576202e38f9662000faa956202e375888d62004d46565b5116600052811b01905260406000205562000fa362033320565b6202e271565b5050620121cd6202e3a69162032f53565b90604051936202e3b68562002b78565b60018552602036818701376001600160a01b03610ba08190529051166202e3dd8562004cef565b526000935b81518510156202e700576202e3f8858362004d46565b51946202e406845162004e62565b916000936202e416825162004e62565b610b80528496855b87518110156202e4bf576202e445610ba0516202e43c838b62004d46565b51168b62032d3b565b15806202e487575b6202e464575b6202e45e9062004cdf565b6202e41e565b956202e47e6202e45e91610ba0516200a36b8a8c62004d46565b9690506202e453565b506103e88a101562004cfd57610ba0516202e4a3828a62004d46565b511660005260038a811b0160205260406000205415156202e44d565b509793929096949195976000986103e88610159560031b9860038a019a5b89518110156202e559578762004cfd57610ba0516202e4fd828c62004d46565b51166000528b602052604060002054156202e524575b6202e51e9062004cdf565b6202e4dd565b976202e5506202e51e918b6202e53f8c610ba0519262004d46565b511662001ac782610b805162004d46565b9890506202e513565b5094959193965098509690959680610b405262004cfd5760040180610b005254956202e58a62008068868962006200565b610b605260009788610b20525b610b405162004cfd57610b2051888110156202e635576202e5c66202e5dc916000610b4052610b005162004f5e565b610ba05191549060031b1c16610b805162032dea565b156202e5fb575b6202e5f1610b205162004cdf565b610b20526202e597565b976202e62e906202e613610b2051610b005162004f5e565b610ba05191549060031b1c1662001ac782610b605162004d46565b976202e5e3565b5095939096509690969391936000915b8383106202e6cf5750505050610b405162004cfd57610b6051516001600160401b03811162002a9b576202e67d81610b00516200509a565b6020610b605101610b005160005260206000206000610ba051905b8481106202e6b85750505050506202e6b09062004cdf565b93926202e3e2565b60019060208386511695019481850155016202e698565b620081fe6202e6f991610ba0516202e6e8868662004d46565b511662001ac782610b605162004d46565b916202e645565b5050509050565b60408101906202e71c60c08351015162004cef565b51916202e73360a06202e1da818451015162004cef565b51936202e748845183511462000fa3620331b7565b6202e75b845186511462000fa3620331b7565b60005b84518110156202e7b8576202e774818462004d46565b51906103e882101562004cfd576202e7b29160018060a01b03865116600052600390811b0160205262000faa60406000205462007ce9838a62004d46565b6202e75e565b5092919360005b83518110156202e8c9576202e7d5818462004d46565b51906103e8918281101562004cfd5760018060a01b03908189511660005260039081602091811b0181526202e81560406000205462007d56868962004d46565b906202e822868a62004d46565b51918783101562004cfd57846202e84f93878f5116600052811b01845260406000205562000fa3620332bb565b6202e85b848862004d46565b518581101562004cfd578290846202e874878c62004d46565b5116600052811b0181526202e89460406000205462006814868962004d46565b9190926202e8a3868a62004d46565b519687101562004cfd576202e8c39662000faa956202e375888d62004d46565b6202e7bf565b5050620121cd6202e8da9162032f53565b90604051936202e8ea8562002b78565b60018552602036818701376001600160a01b03610b008190529051166202e9118562004cef565b526000935b81518510156202e700576202e92c858362004d46565b51946202e93a845162004e62565b916000936202e94a825162004e62565b610b60528496855b87518110156202e9ea576202e970610b00516202e43c838b62004d46565b15806202e9b2575b6202e98f575b6202e9899062004cdf565b6202e952565b956202e9a96202e98991610b00516200a36b8a8c62004d46565b9690506202e97e565b506103e88a101562004cfd57610b00516202e9ce828a62004d46565b511660005260038a811b0160205260406000205415156202e978565b509793929096949195976000986103e88610159560031b9860038a019a5b89518110156202ea73578762004cfd57610b00516202ea28828c62004d46565b51166000528b602052604060002054156202ea4f575b6202ea499062004cdf565b6202ea08565b976202ea6a6202ea49918b6202e6e88c610b00519262004d46565b9890506202ea3e565b5094959193965098509690959680610ba05262004cfd5760040180610b405254956202eaa462008068868962006200565b610b205260009788610b80525b610ba05162004cfd57610b8051888110156202eb4f576202eae06202eaf6916000610ba052610b405162004f5e565b610b005191549060031b1c16610b605162032dea565b156202eb15575b6202eb0b610b805162004cdf565b610b80526202eab1565b976202eb48906202eb2d610b8051610b405162004f5e565b610b005191549060031b1c1662001ac782610b205162004d46565b976202eafd565b5095939096509690969391936000915b8383106202ebe95750505050610ba05162004cfd57610b2051516001600160401b03811162002a9b576202eb9781610b40516200509a565b6020610b205101610b405160005260206000206000610b0051905b8481106202ebd25750505050506202ebca9062004cdf565b93926202e916565b60019060208386511695019481850155016202ebb2565b620081fe6202ec1391610b00516202ec02868662004d46565b511662001ac782610b205162004d46565b916202eb5f565b9060408201916202ec3560a06200779b818651015162004cef565b519280518451036200ad0a5760005b81518110156202ec9e576202ec5a818362004d46565b51906103e882101562004cfd576202ec989160018060a01b03855116600052600390811b0160205262000faa60406000205462007ce9838962004d46565b6202ec44565b5060005b81518110156202ed3c576202ecb8818362004d46565b51906103e8918281101562004cfd5760018060a01b03908186511660005260039081602091811b0181526202ecf860406000205462007d56868c62004d46565b9190926202ed07868962004d46565b519687101562004cfd576202ed369662000faa958a5116600052811b01905260406000205562000fa3620332bb565b6202eca2565b506202ed4a91935062032f53565b604051926202ed598462002b78565b60018452602036818601376001600160a01b03610b008190529051166202ed808462004cef565b52604051906202ed908262002b3f565b6000825260003681376000935b81518510156202e700576202edb3858362004d46565b51946202edc1845162004e62565b916000936202edd1825162004e62565b610b60528496855b87518110156202ee71576202edf7610b00516202e43c838b62004d46565b15806202ee39575b6202ee16575b6202ee109062004cdf565b6202edd9565b956202ee306202ee1091610b00516200a36b8a8c62004d46565b9690506202ee05565b506103e88a101562004cfd57610b00516202ee55828a62004d46565b511660005260038a811b0160205260406000205415156202edff565b509793929096949195976000986103e88610159560031b9860038a019a5b89518110156202eefa578762004cfd57610b00516202eeaf828c62004d46565b51166000528b602052604060002054156202eed6575b6202eed09062004cdf565b6202ee8f565b976202eef16202eed0918b6202e6e88c610b00519262004d46565b9890506202eec5565b5094959193965098509690959680610ba05262004cfd5760040180610b205254956202ef2b62008068868962006200565b610b805260009788610b40525b610ba05162004cfd57610b4051888110156202efc0576202eae06202ef67916000610ba052610b205162004f5e565b156202ef86575b6202ef7c610b405162004cdf565b610b40526202ef38565b976202efb9906202ef9e610b4051610b205162004f5e565b610b005191549060031b1c1662001ac782610b805162004d46565b976202ef6e565b5095939096509690969391936000915b8383106202f05a5750505050610ba05162004cfd57610b8051516001600160401b03811162002a9b576202f00881610b20516200509a565b6020610b805101610b205160005260206000206000610b0051905b8481106202f0435750505050506202f03b9062004cdf565b93926202ed9d565b60019060208386511695019481850155016202f023565b620081fe6202f07391610b00516202e53f868662004d46565b916202efd0565b156202f08257565b60405162461bcd60e51b815260206004820152601d60248201527f54686520726566756e6420616d6f756e74206973206f766572666c6f770000006044820152606490fd5b156202f0cf57565b60405162461bcd60e51b815260206004820152602360248201527f54686520746f74616c20726566756e6420616d6f756e74206973206f766572666044820152626c6f7760e81b6064820152608490fd5b156202f12857565b60405162461bcd60e51b815260206004820152602960248201527f54686520746f74616c20776974686472617761626c6520616d6f756e74206973604482015268206f766572666c6f7760b81b6064820152608490fd5b611f44805482101562004cfd576000526007602060002091020190600090565b815180519192916001600160401b03811162002a9b576202f1c181856200509a565b6020809201846000528260002060005b8381106202f238575050505060c08260069262002c3b95940151600185015560408101516002850155606081015160038501556202f2196080820151151560048601620057f2565b6202f22c60a0820151600586016200571f565b015115159101620057f2565b825182820155918401916001016202f1d1565b611f448054600160401b81101562002a9b576202f26e916001820190556202f17f565b91909162005d305762002c3b916202f19f565b611fb4908154600160401b81101562002a9b576001810180845581101562004cfd5762002c3b926000526020600020016200571f565b620069d06202f2c691620074f5565b613f78805480600052613f76908160205260ff60096040600020015460081c16620322fb57613f73600160ff19825416179055600052602052600960406000200161010061ff0019825416179055546000526202f32760406000206200370e565b90600080611f4a54905b818110620322b4575b50501562032298575b60005b60208301519081518110156202f37e5762000faa620076c162011f56620076a16020620067a7866202f3789862004d46565b6202f346565b505060005b602083015180518210156202f3cb57620076a16020620067a7846202f3a89462004d46565b90606482101562004cfd576202f3c5914290611f4b015562004cdf565b6202f383565b50506000905b602083015180518310156200b07257826202f3ec9162004d46565b516020810151602681101562002a2357156200b02f576020810151602681101562002a23576001036202f5fd57604001906202f42d60c08351015162004cef565b51936202f44460a06200779b818651015162004cef565b51916202f45586518551146202df8a565b6202f46486518451146202dff0565b60005b86518110156202f58b576202f47d818662004d46565b516103e881101562004cfd57600160ff60076202f4a39360031b0154161515146202e052565b6202f4af818562004d46565b516202f4bc828762004d46565b51906103e882101562004cfd576202f4de906006809360031b0154906200608f565b6202f4ea848962004d46565b51926103e884101562004cfd576202f5079360031b01556202e0aa565b6202f513818562004d46565b516202f520828762004d46565b51906103e882101562004cfd576202f549916003906001600160a01b0362012148868d62004d46565b91906202f557828862004d46565b51906103e882101562004cfd576202f5859362000faa926003906001600160a01b036201219c878f62004d46565b6202f467565b5094915091620121cd6202f59f9162032f53565b93604051926202f5af8462002b3f565b60008452600036813760005b83518110156202f5e0578062000faa620079626202f5da938762004d46565b6202f5bb565b50945092602092506202f5f4915062004cdf565b9190506202f3d1565b602081949293940151602681101562002a23576002036202f895576040018051928351906202f635620079c260a08097015162004cef565b519382518651036202f8405782518451036202f7ea5782518551036202f7915760005b86518110156202f77b576202f66e818862004d46565b516103e881101562004cfd5760ff60076202f6909260031b015416156202e162565b6202f69c818862004d46565b516103e881101562004cfd5760031b600701805460ff191660011790556202f6c5818562004d46565b516202f6d2828962004d46565b51906103e882101562004cfd5760056202f6f09260031b016200571f565b6202f6fc818662004d46565b516202f709828962004d46565b516103e881101562004cfd5760031b600101556202f728818762004d46565b516202f735828962004d46565b516103e881101562004cfd5760031b600201556202f754818862004d46565b51906103e882101562004cfd57600060066202f7759360031b015562004cdf565b6202f658565b509591509350602092506202f5f4915062004cdf565b60405162461bcd60e51b815260206004820152603c6024820152600080516020620337ec83398151915260448201527b1b911a5d9a59195b9915d95a59da1d081a5cc81b9bdd08195c5d585b60221b6064820152608490fd5b60405162461bcd60e51b81526020600482015260396024820152600080516020620337ec8339815191526044820152781b959bdd1a5b99d41bddd95c881a5cc81b9bdd08195c5d585b603a1b6064820152608490fd5b60405162461bcd60e51b81526020600482015260386024820152600080516020620337ec8339815191526044820152771b925b99195e105c9c985e481a5cc81b9bdd08195c5d585b60421b6064820152608490fd5b602081949392940151602681101562002a23576003036202f8c3576020919262000faa6202f5f4926202e707565b6020810151602681101562002a23576004036202faf95760400160c0936202f8f36200ca5c868451015162004cef565b51906202f90a60a06200779b818651015162004cef565b51936202f91f875184511462000fa3620331b7565b6202f932875185511462000fa3620331b7565b6202f945875186511462000fa3620331b7565b60005b87518110156202f98d576202f95e818662004d46565b51906103e882101562004cfd576202f987916003906001600160a01b03620124d9848d62004d46565b6202f948565b509095919593929360005b83518110156202fab6576202f9ae818762004d46565b516103e881101562004cfd576003906001600160a01b036202f9d1848862004d46565b5116600052811b016020526202f9f260406000205462007d56838862004d46565b906202f9ff838962004d46565b51916103e883101562004cfd576202fa28926003906001600160a01b036201259b878b62004d46565b6202fa34818762004d46565b516103e881101562004cfd576003906001600160a01b036202fa57848c62004d46565b5116600052811b016020526202fa7860406000205462006814838862004d46565b9190506202fa87818862004d46565b51916103e883101562004cfd576202fab0926003906001600160a01b036201263e858e62004d46565b6202f998565b50936202fad091929693506200847962007e479162032f53565b9260005b83518110156202f5e0578062000faa620079626202faf3938762004d46565b6202fad4565b92906020840151602681101562002a2357600503620300585760408401906202fb2c60a06200851e818551015162004cef565b519282518451036200ad0a5760005b83518110156202fb94576202fb51818562004d46565b51906103e882101562004cfd5760036202fb8e9260018060a01b038a5116600052811b0160205262000faa60406000205462007ce9838962004d46565b6202fb3b565b509060005b83518110156202fc37576202fbaf818562004d46565b516103e881101562004cfd5760039060018060a01b03895116600052811b016020526202fbe760406000205462007d56838862004d46565b91906202fbf5828762004d46565b51906103e882101562004cfd576202fc3193600362000faa9360018060a01b038d5116600052811b0160205260406000205562000fa3620332bb565b6202fb99565b50916202fc48919495935062032f53565b92604051926202fc588462002b78565b6001845260203681860137516001600160a01b03166202fc788462004cef565b52604051926202fc888462002b3f565b6000845260003681376000945b805186101562030044576202fcab868262004d46565b516109e0526202fcbc855162004e62565b966000946202fccc845162004e62565b6109005260009460005b88518110156202fd9c578a896202fd066001600160a01b036202fcfa858462004d46565b51166109e05162032d3b565b15806202fd56575b6202fd27575b50506202fd219062004cdf565b6202fcd6565b986202fd4b9162001ac782859c62007f376202fd219760018060a01b039262004d46565b9790508a896202fd14565b5050506103e86109e051101562004cfd576001600160a01b036202fd7b828b62004d46565b511660005260036109e051811b016020528a8960406000205415156202fd0e565b50909895979498969291939660005b88518110156202fe3f576103e86109e051101562004cfd576001600160a01b036202fdd7828b62004d46565b511660005260036109e051811b01602052604060002054156202fe06575b6202fe009062004cdf565b6202fdab565b996202fe00906202fe36906001600160a01b036202fe258e8d62004d46565b511662001ac7826109005162004d46565b9a90506202fdf5565b509850969592919093966109e0516103e881101580610ac05262004cfd5760031b60040154986202fe7562008068898c62006200565b610940526000610ae05260006108e0525b610ac05162004cfd576108e0518a8110156202ff4f576202febb6202fed8916000610ac05260046109e05160031b0162004f5e565b90546109005160039290921b1c6001600160a01b03169062032dea565b156202fef7575b6202feed6108e05162004cdf565b6108e0526202fe86565b6000610ac0526202ff156108e05160046109e05160031b0162004f5e565b60018060a01b0391549060031b1c166202ff36610ae0516109405162004d46565b526202ff45610ae05162004cdf565b610ae0526202fedf565b50979294959093985095909560005b8281106202fff857505050610ac05162004cfd5761094051516001600160401b03811162002a9b576202ff9b8160046109e05160031b016200509a565b6020610940510160046109e05160031b01600052602060002060005b8381106202ffda57505050506202ffce9062004cdf565b9492959091956202fc95565b82516001600160a01b0316818301556020909201916001016202ffb7565b6203003e906001600160a01b0362030011828562004d46565b511662030025610ae0516109405162004d46565b5262030034610ae05162004cdf565b610ae05262004cdf565b6202ff5e565b5050936202f5f49193506020925062004cdf565b90926020810151602681101562002a2357600603620301f0576040016203008460c08251015162004cef565b51936203009b60a06200851e818551015162004cef565b519285518351036200db485785518451036200dafb5760005b8651811015620300f957620300ca818562004d46565b51906103e882101562004cfd57620300f3916003906001600160a01b0362012771848c62004d46565b620300b4565b509060005b86518110156203019a5762030114818562004d46565b516103e881101562004cfd576003906001600160a01b0362030137848b62004d46565b5116600052811b016020526203015860406000205462007d56838862004d46565b919062030166828762004d46565b51906103e882101562004cfd57620301949362000faa926003906001600160a01b036201259b878f62004d46565b620300fe565b509491620301af919350620121cd9062032f53565b9160405194620301bf8662002b3f565b60008652600036813760005b83518110156202f5e0578062000faa62007962620301ea938762004d46565b620301cb565b6020810151602681101562002a23576007036203027657604001926203021b60c08551015162004cef565b51916203022d60a08651015162004cef565b519451519162030245845187511462000fa3620331b7565b60005b84518110156202f5e057620302709062000faa6001600160a01b03806201290f848a62004d46565b62030248565b6020819493940151602681101562002a2357600803620302e45760c06040620302a3920151015162004cef565b519160005b8351811015620302d257620302cc906001600160a01b0380620129f7838862004d46565b620302a8565b509260209192506202f5f49062004cdf565b6020810151602681101562002a23576009036203033d5760c060406203030e920151015162004cef565b519160005b8351811015620302d25762030337906001600160a01b038062012a8b838862004d46565b62030313565b6020810151602681101562002a2357600a03620303c357604001906203036e60a06200df3360c08551015162004cef565b519262030383835185511462000fa3620331b7565b60005b8351811015620303b057620303aa906001600160a01b038062012b27838862004d46565b62030386565b50936202f5f49193506020925062004cdf565b602081949392940151602681101562002a2357600b036203044e5760400192620303f260c08551015162004cef565b51935151916203040a855184511462000fa3620331b7565b60005b85518110156203043b57620304359062000faa6001600160a01b038062012bda848b62004d46565b6203040d565b50935091602091506202f5f49062004cdf565b9091926020820151602681101562002a2357600c036203052b57606060408301510151926203047d846202d698565b60005b8451811015620303b05760c0620304a08260606040880151015162004d46565b51015115620304ed57620304c162008c808260606040880151015162004d46565b611f4254908160001981011162001e0757600562008ca9620304e7936000190162005cba565b62030480565b6203050562008cd38260606040880151015162004d46565b611f4254908160001981011162001e0757600562008ca9620304e7936000190162005c7a565b9291906020810151602681101562002a2357600d0362030594576040019260206203055b60a08651015162004cef565b5194510151916203057085518451146202dd8c565b60005b85518110156203043b578062012d5b6203058e928662004d46565b62030573565b6020819492940151602681101562002a2357600e03620305fd57604001906020620305c460a08451015162004cef565b519251015193620305d983518651146202dd8c565b60005b83518110156203043b578062012e3f620305f7928862004d46565b620305dc565b906020829493940151602681101562002a2357600f03620306db57606060408301510151926203062d846202d698565b60005b8451811015620303b05760c0620306508260606040880151015162004d46565b510151156203069d576203067162008c808260606040880151015162004d46565b611f4254908160001981011162001e0757600562008dd262030697936000190162005cba565b62030630565b620306b562008cd38260606040880151015162004d46565b611f4254908160001981011162001e0757600562008dd262030697936000190162005c7a565b906020819493940151602681101562002a23576010036203074c5760400151906203070f60a0608084015193015162004cef565b519362030724835186511462000fa3620331b7565b60005b83518110156203043b578062000faa6200902b62030746938762004d46565b62030727565b6020819492940151602681101562002a23576011036203096557604001906203078060a06200df3360c08551015162004cef565b51936203079183518651146202d510565b60005b8351811015620307c257620307bc9062000faa6001600160a01b03806201304a848962004d46565b62030794565b50935090620307d19062032e37565b90611f465493620307e86200806884518762006200565b9060009260005b8781106203094a575060005b8551811015620308a2576000805b89811062030853575b50156203082b575b620308259062004cdf565b620307fb565b9362030825906203084a906001600160a01b036200e724888a62004d46565b9490506203081a565b6203085e8162004eb6565b90546001600160a01b0360039290921b1c8116906203087e858b62004d46565b5116146203089757620308919062004cdf565b62030809565b505060013862030812565b509550939250620308b38262004e62565b8051906001600160401b03821162002a9b57602090620308d38362004ff7565b01611f46600052602060002060005b8381106203092c575050505060005b82811062030909575050506202f5f460209162004cdf565b620309269062000faa6001600160a01b03620019fb838662004d46565b620308f1565b82516001600160a01b031681830155602090920191600101620308e2565b936200e8706203095f916200e8528762004eb6565b620307ef565b6020819492940151602681101562002a235760120362030b8857604001906203099960a06200df3360c08551015162004cef565b5193620309aa83518651146202d510565b60005b8351811015620309db57620309d59062000faa6001600160a01b0380620132ac848962004d46565b620309ad565b5093509190620309eb9062032e37565b611f4654620309fa8162004e62565b906000926000915b80831062030aaf5750505062030a188262004e62565b8051906001600160401b03821162002a9b5760209062030a388362004ff7565b01611f46600052602060002060005b83811062030a91575050505060005b82811062030a6e575050506202f5f460209162004cdf565b62030a8b9062000faa6001600160a01b03620019fb838662004d46565b62030a56565b82516001600160a01b03168183015560209092019160010162030a47565b91956000959193959760005b855181101562030b795762030ad08962004eb6565b90546001600160a01b0360039290921b1c81169062030af0838962004d46565b51161462030b095762030b039062004cdf565b62030abb565b509750956001959391955b8062030b48575b1562030b335762030b2c9062004cdf565b9162030a02565b936200e87062030b2c916200e8528762004eb6565b5062030b548162004eb6565b60018060a01b0391549060031b1c16600052611f456020526040600020541562030b1b565b50979690969593919562030b14565b6020810151602681101562002a235760130362030be15760408091015101519260005b845181101562030bd0578062000faa6200959f62030bca938862004d46565b62030bab565b509250906202f5f460209162004cdf565b6020810151602681101562002a235760140362030d8e576040019062030c0c60c08351015162004cef565b519362030c2360a06200779b818651015162004cef565b519162030c3486518551146202df8a565b62030c4386518451146202dff0565b60005b865181101562030d395762030c5c818562004d46565b5162030c69828762004d46565b51906103e882101562004cfd57600662030c899260031b0154906200608f565b9062030c96838862004d46565b51916103e883101562004cfd57600662030cb59360031b01556202e0aa565b62030cc1818562004d46565b5162030cce828762004d46565b51906103e882101562004cfd5762030cf7916003906001600160a01b0362012148868d62004d46565b919062030d05828862004d46565b51906103e882101562004cfd5762030d339362000faa926003906001600160a01b036201219c878f62004d46565b62030c46565b5094915091620121cd62030d4d9162032f53565b936040519262030d5d8462002b3f565b60008452600036813760005b83518110156202f5e0578062000faa6200796262030d88938762004d46565b62030d69565b6020810151602681101562002a235760150362030db8576020919262000faa6202f5f4926202e707565b6020810151602681101562002a235760160362030e145760c0604062030de2920151015162004cef565b519260005b845181101562030bd05762030e0e9062000faa6001600160a01b0362009d36838962004d46565b62030de7565b6020810151602681101562002a235760170362030e715760405162461bcd60e51b81526020600482015260296024820152600080516020620339cc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a235760180362030edb5760c0604062030e9b920151015162004cef565b51611fb6805460ff191660011790559260005b845181101562030bd05762030ed59062000faa6001600160a01b0362009e02838962004d46565b62030eae565b6020819392930151602681101562002a235760190362030fc25760008091604082910160a08082510151805162030f89575b5050519060e08201519162030f316200680d60c060018060a01b0393015162004cef565b511690602083519301915af13d1562030f80573d9062030f518262002f5b565b9162030f61604051938462002b94565b82523d6000602084013e5b156201387a57506202f5f460209162004cdf565b60609062030f6c565b62030f949062004cef565b515162030fa3575b8062030f0d565b8192506200680d9062030fb99251015162004cef565b51903862030f9c565b6020810151602681101562002a2357601a03620310445760a0604062030fec920151015162004cef565b5162030ffc60038251146202d510565b620310078162004cef565b519162031018620139a08362004d13565b51916200f9d5576020926202f5f4926001036200a043576200a023906200a016611fb19182546200608f565b6020810151602681101562002a2357601b036203142f5750919062031074611faf546200225a6200a0b962033044565b50506203108062033108565b506000805b6103e88110620313e3575b50506203109c62006161565b90620310ab613f745462004e62565b906000946000905b6103e8821015620313d7578160031b9260ff60078501541615620311bf57600096600285015415620311a6576000975b62004cfd576004850154881015620311a6576203119f62031198899a62031112620311499b60048a0162004f5e565b60018060a01b0391549060031b1c1680600052600389016020526203113d8b60406000205462005eb0565b9c9062000fa362033108565b6203118c620311706203116460009e60028d01549062005eb0565b919062000fa362033108565b82600052611f476020526200a01660406000209182546200608f565b62001ac7828b62004d46565b9962004cdf565b97620310e3565b92909350620311b791965062004cdf565b9094620310b3565b95969392509350505b620311d38262004e62565b9160009160005b8281106203134157505050611f485491620311fa62008068848462006200565b926000906000905b8082106203132457505060005b8381106203128e5750508251929150506001600160401b03821162002a9b576020906203123c8362004fbc565b01611f48600052602060002060005b8381106203127057505050506202f5f46020916000611fb1556000611fb25562004cdf565b82516001600160a01b0316818301556020909201916001016203124b565b6000805b838110620312dc575b5015620312b4575b620312ae9062004cdf565b6203120f565b90620312ae90620312d3906001600160a01b03620081f0858762004d46565b919050620312a3565b6001600160a01b0380620312f1858862004d46565b51169062031300838a62004d46565b5116146203131957620313139062004cdf565b62031292565b50506001386203129b565b9091620081fe6203133a91620094f58562004e9a565b9062031202565b6000805b8581106203138f575b501562031367575b620313619062004cdf565b620311da565b92620313619062031386906001600160a01b03620081f0878662004d46565b93905062031356565b6001600160a01b0380620313a4858762004d46565b511690620313b3838a62004d46565b511614620313cc57620313c69062004cdf565b62031345565b50506001386203134e565b935050929390620311c8565b8060039594951b9060ff6007830154161562031425576200a4f86200746162000faa946200a4ec6203141c9560026200a4e28762005e1c565b93929362031085565b5093929362031090565b6020810151602681101562002a2357601c036203148c5760405162461bcd60e51b8152602060048201526029602482015260008051602062033acc8339815191526044820152683632b6b2b73a32b21760b91b6064820152608490fd5b6020810151602681101562002a2357601d03620314b2575b506202f5f460209162004cdf565b9290916020840151602681101562002a2357601e0362031bc357604084019060a090620314e3828451015162004cef565b5151620314f4838551015162004d13565b5151036200ade9576203150b828451015162004cef565b51516203151c838551015162004d24565b5151036200ad6d5762031533828451015162004cef565b519462031544838551015162004d13565b5191620315596200a641858751015162004d24565b519585518751036200ad0a5760005b8651811015620315c1576203157e818862004d46565b51906103e882101562004cfd576003620315bb9260018060a01b038d5116600052811b0160205262000faa60406000205462007ce9838c62004d46565b62031568565b5090969192939660005b86518110156203166a57620315e1818862004d46565b516103e881101562004cfd5760039060018060a01b038c5116600052811b016020526203161960406000205462007d56838b62004d46565b919062031627828a62004d46565b51906103e882101562004cfd576203166493600362000faa938f60018060a01b03905116600052811b0160205260406000205562000fa3620332bb565b620315cb565b50939692979550936203167d9062032f53565b96604051966203168d8862002b78565b60018852602036818a013786516001600160a01b0316620316ae8962004cef565b5260405196620316be8862002b3f565b600088526000610a60525b8951610a60519081101562031a6a57620316e4908b62004d46565b51610a4052620316f5885162004e62565b99600097620317058b5162004e62565b6109c05260009760005b8b51811015620317d5578d8c6203173f6001600160a01b0362031733858462004d46565b5116610a405162032d3b565b15806203178f575b62031760575b50506203175a9062004cdf565b6203170f565b9b620317849162001ac782859f62007f376203175a9760018060a01b039262004d46565b9a90508d8c6203174d565b5050506103e8610a4051101562004cfd576001600160a01b03620317b4828e62004d46565b51166000526003610a4051811b016020528d8c604060002054151562031747565b50909b989a99949691929395979b60005b8b5181101562031869576103e8610a4051101562004cfd576001600160a01b0362031812828e62004d46565b51166000526003610a4051811b016020526040600020541562031841575b6203183b9062004cdf565b620317e6565b9c620318606203183b918f6200d8da8f9160018060a01b039262004d46565b9d905062031830565b509b50989590929496919396610a4051996103e88b10159c8d62004cfd57620318a06200806860048f9e60031b01549e8f62006200565b610960526000610980528d60009e5b62004cfd578d8f10156203196e575060009d620318f7620318da826004610a405160031b0162004f5e565b90546109c05160039290921b1c6001600160a01b03169062032dea565b1562031911575b6203190a8f9162004cdf565b9e620318af565b6203190a9e5060009e8f9162031931816004610a405160031b0162004f5e565b60018060a01b0391549060031b1c1662031952610980516109605162004d46565b52620319616109805162004cdf565b61098052915050620318fe565b9396999b929d509396999094979b5060005b82811062031a1e5750505062004cfd5761096051516001600160401b03811162002a9b57620319b9816004610a405160031b016200509a565b60206109605101906004610a405160031b0160005260206000209160005b82811062031a005750505050620319f1610a605162004cdf565b610a60529598909498620316c9565b81516001600160a01b031681850155602090910190600101620319d7565b62031a64906001600160a01b0362031a37828562004d46565b511662031a4b610980516109605162004d46565b5262031a5a6109805162004cdf565b6109805262004cdf565b62031980565b509492975094955091965060009460005b875181101562031ace5762031a996200abc66200abb9838962004d46565b8062031ab2575b5062031aac9062004cdf565b62031a7b565b906200abfc62031ac79862031aac936200608f565b9062031aa0565b5096509450929091508062031af0575b50506202f5f46020915b9150620314a4565b62031b1b9060018060a01b038351166000526200ac5a611f459182602052604060002054906200608f565b60018060a01b03835116600052602052604060002055600080611f4654905b81811062031b79575b5050916202f5f4916020931562031b5d575b509162031ade565b5162031b72906001600160a01b0316620065d6565b3862031b55565b62031b848162004eb6565b9054855160039290921b1c6001600160a01b0390811691161462031bb35762031bad9062004cdf565b62031b3a565b5060019150829050602062031b43565b9190926020810151602681101562002a2357601f0362031bfe5760209162031bf86200ae9d60406202f5f49401515162004cef565b62031ae8565b6020810151602681101562002a235760200362031c24575b506202f5f460209162031ae8565b6020810151602681101562002a2357602180910362031c45575b5062031c16565b602082015160268110156200b01a5760220362031c815750506202f5f4602091611fb660ff19815416905562031c7a62005087565b9162031c3e565b602082015160268110156200b01a5760230362031ca8575b50506202f5f460209162031c7a565b602082015160268110156200b01a5760241462031c9957602082015160268110156200b01a5760251462031c99576020829593949201519060268210156201478c575060150362010ee557604084019062031d0860c08351015162004cef565b519062031d1f60a06200779b818651015162004cef565b519362031d34835185511462000fa3620331b7565b62031d47835186511462000fa3620331b7565b60005b835181101562031da35762031d60818662004d46565b51906103e882101562004cfd57600362031d9d9260018060a01b038b5116600052811b0160205262000faa60406000205462007ce9838a62004d46565b62031d4a565b509095919560005b875181101562031ece5762031dc1818662004d46565b516103e881101562004cfd5760039060018060a01b03865116600052811b0160205262031df960406000205462007d56838962004d46565b9062031e06838862004d46565b51916103e883101562004cfd57600362031e3d9360018060a01b03895116600052811b0160205260406000205562000fa3620332bb565b62031e49818662004d46565b516103e881101562004cfd576003906001600160a01b0362031e6c848c62004d46565b5116600052811b0160205262031e8d60406000205462006814838962004d46565b919062031e9b828862004d46565b51906103e882101562004cfd5762031ec893600362000faa938d62007e0f8760018060a01b039262004d46565b62031dab565b509262031ee6919294506200c6369096959662032f53565b926040519062031ef68262002b78565b6001825260203681840137516001600160a01b031662031f168262004cef565b526000945b8051861015620322835762031f31868262004d46565b51610aa05262031f42855162004e62565b9660009462031f52845162004e62565b6109205260009460005b885181101562032022578a8962031f8c6001600160a01b0362031f80858462004d46565b5116610aa05162032d3b565b158062031fdc575b62031fad575b505062031fa79062004cdf565b62031f5c565b9862031fd19162001ac782859c62007f3762031fa79760018060a01b039262004d46565b9790508a8962031f9a565b5050506103e8610aa051101562004cfd576001600160a01b0362032001828b62004d46565b51166000526003610aa051811b016020528a89604060002054151562031f94565b50909895979498969291939660005b8851811015620320b4576103e8610aa051101562004cfd576001600160a01b036203205d828b62004d46565b51166000526003610aa051811b01602052604060002054156203208c575b620320869062004cdf565b62032031565b996203208690620320ab906001600160a01b036200a9638e8d62004d46565b9a90506203207b565b50985096959291909396610aa0516103e881101580610a205262004cfd5760031b6004015498620320ea62008068898c62006200565b610a00526000610a805260006109a0525b610a205162004cfd576109a0518a811015620321a7576200a9ff62032130916000610a20526004610aa05160031b0162004f5e565b156203214f575b620321456109a05162004cdf565b6109a052620320fb565b6000610a20526203216d6109a0516004610aa05160031b0162004f5e565b60018060a01b0391549060031b1c166203218e610a8051610a005162004d46565b526203219d610a805162004cdf565b610a805262032137565b50979294959093985095909560005b8281106203225057505050610a205162004cfd57610a0051516001600160401b03811162002a9b57620321f3816004610aa05160031b016200509a565b6020610a0051016004610aa05160031b01600052602060002060005b838110620322325750505050620322269062004cdf565b94929590919562031f1b565b82516001600160a01b0316818301556020909201916001016203220f565b6203227d906001600160a01b0362032269828562004d46565b51166200c214610a8051610a005162004d46565b620321b6565b5050936202f5f4919350602092509162031c99565b8151620322ae906001600160a01b031662006600565b6202f343565b620322bf8162004f0a565b9054865160039290921b1c6001600160a01b03908116911614620322ee57620322e89062004cdf565b6202f331565b505050600138806202f33a565b60405162461bcd60e51b815260206004820152604860248201527f5468652070656e64696e672070726f6772616d20686173206265656e2065786560448201527f63757465642c20616e642073686f756c64206e6f742062652065786563757465606482015267321030b3b0b4b71760c11b608482015260a490fd5b908062032382575050565b62002c3b91600052601f6020600020910160051c81019062004fa3565b90600160401b811162002a9b578154818355808210620323be57505050565b62002c3b92600052601f6020600020918180850160051c8401941680620323ed575b500160051c019062004fa3565b600019908186019182549160200360031b1c16905538620323e0565b9060ff809160031b9316831b921b19161790565b620324356203242e6000936202f17f565b506200356f565b92825b845180518210156203252b5781620324509162004d46565b516103e881101562004cfd57600390811b9460018060a01b038516600052602091860182526203248d604096600188600020549101549062005eb0565b919015620324f65790620324a1916200608f565b959015620324bc575050620324b69062004cdf565b62032438565b60649250519062461bcd60e51b825260048201526014602482015273746f74616c20706f776572206f766572666c6f7760601b6044820152fd5b865162461bcd60e51b815260048101849052600e60248201526d706f776572206f766572666c6f7760901b6044820152606490fd5b505092505090565b60005b613f78549081600052613f7691602092808452600393604092858460002001805486101562032694576203256f866203257b9262004f5e565b905490881b1c6202f17f565b509560ff60068098015416620325a3575b50505050506203259d915062004cdf565b62032536565b81600052838352620325cb620325bf8783886000200162004f5e565b905490831b1c6202f17f565b5096620325eb876001809a01549285600052878752886000200162004f5e565b905490831b1c91836000528585526203260b886005896000200162004f5e565b9054911b1c90600092606492838102938185041490151715620326805790620326349162004f77565b1062032678575b6203264757806203258c565b6009945060005252600020019060ff19918183825416179055613f73918254161790556000613f71556000613f7255565b50856203263b565b634e487b7160e01b84526011600452602484fd5b505050505050506000613f7854905b81600052613f76602052600380604060002001805483101562032719576006620326e0620326d48560ff9462004f5e565b905490851b1c6202f17f565b50015416156203271457620326f58262032929565b9081101562002a235762014d61576203270e9062004cdf565b620326a3565b505050565b50505060ff1990613f73600383825416179055600052613f766020526009604060002001908154169055565b613f785490600090828252613f769160209280845260039060409082828520015495620327728762002c61565b96620327818451988962002b94565b80885262032792601f199162002c61565b013682890137845b888652828252848487200154811015620327e35790620327d88262000faa620327c68897969562032929565b620327d2838d62004d46565b620052db565b90919293506203279a565b5050505090919350815b83518110156203285a5762032803818562004d46565b518281101562032846576001809114620328295750620328239062004cdf565b620327ed565b613f73805460ff191690911790555050613f71819055613f725550565b634e487b7160e01b84526021600452602484fd5b50909150613f7280544210600014620328815750613f739060ff19825416179055613f7155565b9050613f73600160ff1982541617905581613f715555565b15620328a157565b60405162461bcd60e51b815260206004820152601e60248201527f766f74696e672072756c6520696e646578206f7574206f662072616e676500006044820152606490fd5b15620328ee57565b60405162461bcd60e51b815260206004820152601360248201527263757272656e74596573206f766572666c6f7760681b6044820152606490fd5b613f785490600091808352613f76806020528260408520600301906203294f9162004f5e565b90549060031b1c62032961816202f17f565b50600101549383865282602052806040872060040190620329829162004f5e565b90549060031b1c9284875280602052816040882060050190620329a59162004f5e565b90549060031b1c9487526020526040862060060190620329c59162004f5e565b90549060031b1c90620329d8906202f17f565b506006015460ff1662032a24575062032a149262005e4362022e1f938362032a0462032a0c9562005e7a565b9690620328e6565b9290620328e6565b111562032a1e5790565b50600190565b6200fab9925062032a149362032a3e62032a0c9362005e7a565b9490620328e6565b9092919262032a56825162004e62565b60009162032a65815162004e62565b8390845b865181101562032b00576001600160a01b0362032a8c816202e43c848b62004d46565b158062032acb575b62032aac575b5062032aa69062004cdf565b62032a69565b819662032ac391620081f062032aa6948b62004d46565b959062032a9a565b506103e88a101562004cfd578062032ae4838a62004d46565b511660005260038a811b01602052604060002054151562032a94565b509295919694509260005b875181101562032b81576103e886101562004cfd576001600160a01b038062032b35838b62004d46565b5116600052600387811b016020526040600020541562032b62575b5062032b5c9062004cdf565b62032b0b565b819562032b79916200e72462032b5c948c62004d46565b949062032b50565b5092509450926103e8831015938462004cfd5760049586600395861b019687549462032bb262008068828862006200565b9460009689889a5b62032d2657818b101562032c5b57506000998b62032bf562032bdd838362004f5e565b90546001600160a01b0392918e1b1c82168a62032dea565b1562032c18575b50509062032c0d8b94939262004cdf565b9a9091929362032bba565b91998c95949392909162032c2e908c9062004f5e565b9054908d1b1c1662032c41828b62004d46565b5262032c4d9062004cdf565b9890919293508b3862032bfc565b9697949a98505091975092506000915b83831062032d01575050505062032cec578051926001600160401b03841162032cd7575062032c9b83836200509a565b602080910191600052806000209060005b84811062032cbb575050505050565b83516001600160a01b0316838201559281019260010162032cac565b604190634e487b7160e01b6000525260246000fd5b603283634e487b7160e01b6000525260246000fd5b62032d1f90620081fe906001600160a01b036200a36b868662004d46565b9162032c6b565b603285634e487b7160e01b6000525260246000fd5b9060005b6103e883101562004cfd576003600484821b01805483101562016f9a578262032d689162004f5e565b9054911b1c6001600160a01b0390811690831614620065b45762032d8c9062004cdf565b62032d3f565b9060005b6103e883101562004cfd576003611fbc84821b01805483101562016f9a578262032dc09162004f5e565b9054911b1c6001600160a01b0390811690831614620065b45762032de49062004cdf565b62032d96565b9060005b8251811015620065c7576001600160a01b038062032e0d838662004d46565b511690831614620065b45762032e239062004cdf565b62032dee565b801562001e07576000190190565b9081519060005b60001983810184811162001e075782101562032f05576001820180831162001e07575b84811062032e7c57505062032e769062004cdf565b62032e3e565b6001600160a01b038062032e91858962004d46565b51168162032ea0848a62004d46565b51161462032ebb575b5062032eb59062004cdf565b62032e61565b828692960182811162001e075762032eb59262032efe9262032ee262032ef7938b62004d46565b511662032ef0898b62004d46565b5262032e29565b9562032e29565b9062032ea9565b50509062032f138162004e62565b9060005b81811062032f26575090925050565b62032f4d906001600160a01b0362032f3f828862004d46565b511662001ac7828662004d46565b62032f17565b80519160005b60001984810185811162001e07578210156203300b576001820180831162001e07575b85811062032f9757505062032f919062004cdf565b62032f59565b62032fa3838662004d46565b5162032fb0828762004d46565b511462032fc9575b62032fc39062004cdf565b62032f7c565b948181019080821162001e075762032ffc620330039162032fef62032fc3948962004d46565b5162032ef08a8a62004d46565b9662032e29565b905062032fb8565b505090916203301a8162004e62565b9060005b8181106203302d575090925050565b806202b4c76203303e928762004d46565b6203301e565b604051620330528162002a7f565b604481527f496e76616c6964206469766964656e64207065726d797269616420706572207460208201527f72616e73616374696f6e2e2053686f756c64206265206c657373207468616e206040820152630313030360e41b606082015290565b604051620330c08162002b06565b603281527f4e6f20656e6f756768206e756d626572206f66207472616e73616374696f6e7360208201527108199bdc88191a5d9a59195b991cc81e595d60721b604082015290565b604051620331168162002b78565b601c81527b6469766964656e6473206f7065726174696f6e206f766572666c6f7760201b602082015290565b604051620331508162002b78565b600d81526c2ab735b737bbb71022b93937b960991b602082015290565b6040516203317b8162002b06565b602681527f4572726f7220696e20776974686472617761626c6520636173682063616c63756020820152653630ba34b7b760d11b604082015290565b604051620331c58162002b78565b6012815271496e76616c696420506172616d657465727360701b602082015290565b604051620331f58162002b78565b601581527413595b58995c88191bd95cc81b9bdd08195e1a5cdd605a1b602082015290565b604051620332288162002b78565b601781527613595b58995c881a5cc81b9bdd081cdd5cdc195b991959604a1b602082015290565b6040516203325d8162002b78565b601b81527a13595b58995c881a5cc8185b1c9958591e481cdd5cdc195b991959602a1b602082015290565b604051620332968162002b78565b60158152744d656d62657220616c72656164792065786973747360581b602082015290565b604051620332c98162002b78565b60118152704e6f20656e6f7567682062616c616e636560781b602082015290565b604051620332f88162002b78565b6018815277125b9d985b1a59081c185c985b595d195c881d1bc81cd95d60421b602082015290565b6040516203332e8162002b78565b6015815274546f6b656e20616d6f756e74206f766572666c6f7760581b602082015290565b602681101562002a23578015620074b2576001811462032a1e57600281146203358657600381146203358057600481146203357a57600581146203357457600681146203356e57600781146203356857600881146203356257600981146203355c57600a81146203355657600b81146203355057600c81146203354a57600d81146203354457600e81146203353e57600f81146203353857601081146203353257601181146203352c57601281146203352657601381146203352057601481146203351a57601581146203351457601681146203350e5760178114620335085760188114620335025760198114620334fc57601a8114620334f657601b8114620334f057601c8114620334ea57601d8114620334e457601e8114620334de57601f8114620334d85760208114620334d25760218114620334cc5760228114620334c65760238114620334c05760248114620334ba57602514620334b557600090565b602590565b50602490565b50602390565b50602290565b50602190565b50602090565b50601f90565b50601e90565b50601d90565b50601c90565b50601b90565b50601a90565b50601990565b50601890565b50601790565b50601690565b50601590565b50601490565b50601390565b50601290565b50601190565b50601090565b50600f90565b50600e90565b50600d90565b50600c90565b50600b90565b50600a90565b50600990565b50600890565b50600790565b50600690565b50600590565b50600490565b50600390565b50600290565b908151815103620065cf57600090815b835181101562017689576001600160f81b031980620335bc838762006506565b511690620335cb838562006506565b5116036201768257620335de9062004cdf565b6203359c565b60405190620335f38262002b06565b60288252604036602084013760005b601481106203361057505090565b60139080820391821162001e0757600382901b916001600160fd1b0381160362001e075760ff80831162001e0757600192620336599084901b6001600160a01b038616620050d4565b60f081168282160391821162001e07576203367d9060f41b600f60f81b16620336e6565b82841b916001600160ff1b038416840362001e0757620336ba9160001a620336a6848962006506565b5360f81b6001600160f81b031916620336e6565b92810180911162001e0757620336d9620336e09360001a918662006506565b5362004cdf565b62033602565b60f81c600a8110156203370f5760300160ff811162001e075760f81b6001600160f81b03191690565b60570160ff811162001e075760f81b6001600160f81b0319169056fe546865206c656e677468206f662061646472657373657320616e6420746f6b65305d206c656e677468206973206e6f742032000000000000000000000000000034dd862f2dd4c33543972cb453e26b9cc23a6eb518176c0de5db12d08007dc6d617665203120656c656d656e7400000000000000000000000000000000000000dd388e0eb473c306304080e96aea031c0fb4686a37f7b1a3c8a2301cd0627f0b7420686176652074776f20656c656d656e747300000000000000000000000000546865206c656e677468206f6620746f6b656e496e666f20616e6420746f6b656e20746865206c656e677468206f6620746f6b656e4c697374000000000000006c656e677468206973206e6f7420657175616c20746f207072696365206c69735d206c656e677468206973206e6f742031000000000000000000000000000000742068617665206f6e6520656c656d656e74000000000000000000000000000020706c7567696e207769746820696e6465782000000000000000000000000000656e677468206973206e6f7420310000000000000000000000000000000000005468652063616c6c20746f2074686520636f6e7472616374206973206e6f74202e55494e543235365f324441525241595b305d5b305d29206973206f7574206f2e55494e543235365f324441525241595b305d5b695d29206973206f7574206f742068617665203220656c656d656e7473000000000000000000000000000000546865206265666f7265206f7065726174696f6e20706c7567696e20737973748b3bb33683ac4daad017d30a0e9972b15e6854cd1f296e14295598f57ce03d506470626d4cb7d88e800a628455fe3f45216f254e8294f25d17ea4ac7e2f4f0a35d206c656e677468206973206e6f7420320000000000000000000000000000005265736572766564206f70636f6465206964203233206973206e6f7420696d70546865206c656e677468206f6620746f6b656e436c617373417272617920616e6c656e677468206973206e6f74203100000000000000000000000000000000005d206c656e677468206973206e6f742067726561746572207468616e20310000617665206f6e6520656c656d656e740000000000000000000000000000000000742068617665203120656c656d656e7400000000000000000000000000000000746f6b656e206c6576656c205829206d757374206265206c657373207468616e28746f6b656e206c6576656c205829206d757374206265206c657373207468615265736572766564206f70636f6465206964203238206973206e6f7420696d70546865206c656e677468206f662061646472657373657320616e6420616d6f75a26469706673582212200b7dff630712f4e35e13cd6b52bb4915fdb7f860f9ed94b9e17edff45824d9ad64736f6c63430008130033",
"linkReferences": {},
"deployedLinkReferences": {}
}
diff --git a/darc-js/src/darcjs.ts b/darc-js/src/darcjs.ts
index 3894370e..eddd5f33 100644
--- a/darc-js/src/darcjs.ts
+++ b/darc-js/src/darcjs.ts
@@ -1,20 +1,534 @@
-import {deployDARC} from './deployDARC/deployDARC';
-import { transpiler } from './SDK/transpiler';
-import { DARC, InitParam, TokenInfo, MemberInfo } from './DARC/DARC';
-import { darcBinary, DARCBinaryStruct, DARC_VERSION } from './darcBinary/darcBinary';
-import { ethers } from 'ethers';
-import {run} from './SDK/runtime';
+/**
+ * Below are core darcjs
+ */
+export {deployDARC} from './deployDARC/deployDARC';
+export { transpile } from './SDK/transpiler';
+export { DARC, InitParam } from './DARC/DARC';
+export { darcBinary, DARCBinaryStruct, DARC_VERSION } from './darcBinary/darcBinary';
+export { ethers } from 'ethers';
+export {run} from './SDK/runtime';
+
+
+/**
+ * Below are core interpreter functions for the By-law Script
+ */
+export { transpileAndRun } from "./SDK/runtime";
+
+/**
+ * Below are all necessary functions for the SDK.
+ */
+import * as instructions from "./SDK/includes";
+import { OperationStruct, OperationStructOutput, ProgramStruct, VotingRuleStruct, PluginStruct, PluginStructWithNode } from "./types/basicTypes";
+import {ethers} from "ethers";
+import * as DARC from "./DARC/DARC";
+
+/**
+ * Below are return types
+ */
+export const UNDEFINED = 0;
+export const SANDBOX_NEEDED = 1;
+export const NO = 2;
+export const VOTING_NEEDED = 3;
+export const YES_AND_SKIP_SANDBOX = 4;
+export const YES = 5;
+
+export enum EnumReturnType {
+ UNDEFINED = 0,
+ SANDBOX_NEEDED = 1,
+ NO = 2,
+ VOTING_NEEDED = 3,
+ YES_AND_SKIP_SANDBOX = 4,
+ YES = 5
+}
+
+import {
+ OPCODE_ID_1_BATCH_MINT_TOKENS,
+ OPCODE_ID_2_BATCH_CREATE_TOKEN_CLASSES,
+ OPCODE_ID_3_BATCH_TRANSFER_TOKENS,
+ OPCODE_ID_4_BATCH_TRANSFER_TOKENS_FROM_TO,
+ OPCODE_ID_5_BATCH_BURN_TOKENS,
+ OPCODE_ID_6_BATCH_BURN_TOKENS_FROM,
+ OPCODE_ID_7_BATCH_ADD_MEMBERSHIPS,
+ OPCODE_ID_8_BATCH_SUSPEND_MEMBERSHIPS,
+ OPCODE_ID_9_BATCH_RESUME_MEMBERSHIPS,
+ OPCODE_ID_10_BATCH_CHANGE_MEMBER_ROLES,
+ OPCODE_ID_11_BATCH_CHANGE_MEMBER_NAMES,
+ OPCODE_ID_12_BATCH_ADD_PLUGINS,
+ OPCODE_ID_13_BATCH_ENABLE_PLUGINS,
+ OPCODE_ID_14_BATCH_DISABLE_PLUGINS,
+ OPCODE_ID_15_BATCH_ADD_AND_ENABLE_PLUGINS,
+ OPCODE_ID_16_BATCH_SET_PARAMETERS,
+ OPCODE_ID_17_BATCH_ADD_WITHDRAWABLE_BALANCES,
+ OPCODE_ID_18_BATCH_REDUCE_WITHDRAWABLE_BALANCES,
+ OPCODE_ID_19_BATCH_ADD_VOTING_RULES,
+ OPCODE_ID_20_BATCH_PAY_TO_MINT_TOKENS,
+ OPCODE_ID_21_BATCH_PAY_TO_TRANSFER_TOKENS,
+ OPCODE_ID_22_ADD_EMERGENCY,
+ OPCODE_ID_24_CALL_EMERGENCY,
+ OPCODE_ID_25_CALL_CONTRACT_ABI,
+ OPCODE_ID_26_PAY_CASH,
+ OPCODE_ID_27_OFFER_DIVIDENDS,
+ OPCODE_ID_29_SET_APPROVAL_FOR_ALL_OPERATIONS,
+ OPCODE_ID_30_BATCH_BURN_TOKENS_AND_REFUND,
+ OPCODE_ID_31_ADD_STORAGE_STRING,
+ OPCODE_ID_32_VOTE,
+ OPCODE_ID_33_EXECUTE_PENDING_PROGRAM,
+ OPCODE_ID_34_END_EMERGENCY,
+ OPCODE_ID_35_UPGRADE_TO_ADDRESS,
+ OPCODE_ID_36_CONFIRM_UPGRAED_FROM_ADDRESS,
+ OPCODE_ID_37_UPGRADE_TO_THE_LATEST
+} from "./SDK/opcodes/opcodeTable";
+
+/**
+ * The core function of the SDK. It takes in a list of operations and a wallet, and then sends the operations to the DARC contract. This is different from the By-law Script, which compile and run the code directly.
+ * @param operationList The list of operations to be sent to the DARC contract
+ * @param wallet The wallet to be used to sign the transaction (provider must be set)
+ * @param targetDARCAddress The address of the DARC contract to be used
+ * @param notes The notes to be attached to the program
+ * @param delegateToAddress If the signer is not the operator, but the operator has approved the signer to sign on its behalf, then the signer can set this parameter to the operator's address. Otherwise, leave it undefined.
+ */
+export async function executeOperationList(
+ operationList: OperationStruct[],
+ wallet: ethers.Wallet,
+ targetDARCAddress: string,
+ notes?: string,
+ delegateToAddress?: string
+ ) {
+
+ const operatorAddress = delegateToAddress? delegateToAddress : wallet.address;
+ for (let i = 0; i < operationList.length; i++) {
+ operationList[i].operatorAddress = operatorAddress;
+ }
+ const program:ProgramStruct = {
+ programOperatorAddress: operatorAddress,
+ operations: operationList,
+ notes: notes? notes : ""
+ };
+
+ const attachedDARC = new DARC.DARC({
+ address: targetDARCAddress,
+ version: DARC.DARC_VERSION.Latest,
+ wallet: wallet,
+ });
+
+ await attachedDARC.entrance(program);
+}
+
+
+
+
+export function batch_mint_tokens(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_1_BATCH_MINT_TOKENS(addressArray, tokenClassArray, amountArray);
+ return operation;
+}
+
+export function batch_create_token_classes(nameArray: string[], tokenIndexArray: bigint[] | number[], votingWeightArray: bigint[] | number[], dividendWeightArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_2_BATCH_CREATE_TOKEN_CLASSES(nameArray, tokenIndexArray, votingWeightArray, dividendWeightArray);
+ return operation;
+}
+
+export function batch_transfer_tokens(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_3_BATCH_TRANSFER_TOKENS(addressArray, tokenClassArray, amountArray);
+ return operation;
+}
+
+export function batch_transfer_tokens_from_to(fromAddressArray: string[], toAddressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_4_BATCH_TRANSFER_TOKENS_FROM_TO(fromAddressArray, toAddressArray, tokenClassArray, amountArray);
+ return operation;
+}
+
+export function batch_burn_tokens(tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_5_BATCH_BURN_TOKENS(tokenClassArray, amountArray);
+ return operation;
+}
+
+export function batch_burn_tokens_from(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_6_BATCH_BURN_TOKENS_FROM(addressArray, tokenClassArray, amountArray);
+ return operation;
+}
+
+export function batch_add_memberships(addressArray: string[], roleArray: bigint[] | number[], nameArray: string[]): OperationStruct {
+ let operation = OPCODE_ID_7_BATCH_ADD_MEMBERSHIPS(addressArray, roleArray, nameArray);
+ return operation;
+}
+
+export function batch_suspend_memberships(addressArray: string[]): OperationStruct {
+ let operation = OPCODE_ID_8_BATCH_SUSPEND_MEMBERSHIPS(addressArray);
+ return operation;
+}
+
+export function batch_resume_memberships(addressArray: string[]): OperationStruct {
+ let operation = OPCODE_ID_9_BATCH_RESUME_MEMBERSHIPS(addressArray);
+ return operation;
+}
+
+export function batch_change_member_roles(addressArray: string[], roleArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_10_BATCH_CHANGE_MEMBER_ROLES(addressArray, roleArray);
+ return operation;
+}
+
+export function batch_change_member_names(addressArray: string[], nameArray: string[]): OperationStruct {
+ let operation = OPCODE_ID_11_BATCH_CHANGE_MEMBER_NAMES(addressArray, nameArray);
+ return operation;
+}
+
+export function batch_add_plugins(pluginArray: PluginStruct[] | PluginStructWithNode[]): OperationStruct {
+ if (pluginArray instanceof Array && typeof pluginArray[0] !== "object") {
+ let operation = OPCODE_ID_12_BATCH_ADD_PLUGINS(pluginArray);
+ return operation;
+ }
+ let operation = OPCODE_ID_12_BATCH_ADD_PLUGINS(pluginArray);
+ return operation;
+}
+
+export function batch_enable_plugins(pluginIndexArray: bigint[] | number[], isBeforeOperationArray: boolean[]): OperationStruct {
+ let operation = OPCODE_ID_13_BATCH_ENABLE_PLUGINS(pluginIndexArray, isBeforeOperationArray);
+ return operation;
+}
+
+export function batch_disable_plugins(pluginIndexArray: bigint[] | number[], isBeforeOperationArray: boolean[]): OperationStruct {
+ let operation = OPCODE_ID_14_BATCH_DISABLE_PLUGINS(pluginIndexArray, isBeforeOperationArray);
+ return operation;
+}
+
+export function batch_add_and_enable_plugins(pluginArray: PluginStruct[] | PluginStructWithNode[]): OperationStruct {
+ let operation = OPCODE_ID_15_BATCH_ADD_AND_ENABLE_PLUGINS(pluginArray);
+ return operation;
+}
+
+export function batch_set_parameters(parameterIndexArray: bigint[] | number[], parameterValueArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_16_BATCH_SET_PARAMETERS(parameterIndexArray, parameterValueArray);
+ return operation;
+}
+
+export function batch_add_withdrawable_balances(addressArray: string[], amountArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_17_BATCH_ADD_WITHDRAWABLE_BALANCES(addressArray, amountArray);
+ return operation;
+}
+
+export function batch_reduce_withdrawable_balances(addressArray: string[], amountArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_18_BATCH_REDUCE_WITHDRAWABLE_BALANCES(addressArray, amountArray);
+ return operation;
+}
+
+export function batch_add_voting_rules(ruleArray: VotingRuleStruct[]): OperationStruct {
+ let operation = OPCODE_ID_19_BATCH_ADD_VOTING_RULES(ruleArray);
+ return operation;
+}
+
+export function batch_pay_to_mint_tokens(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[], priceArray: bigint[] | number[], dividendable: bigint): OperationStruct {
+ let operation = OPCODE_ID_20_BATCH_PAY_TO_MINT_TOKENS(addressArray, tokenClassArray, amountArray, priceArray, dividendable);
+ return operation;
+}
+
+export function batch_pay_to_transfer_tokens( toAddressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[], priceArray: bigint[] | number[], dividendable: bigint): OperationStruct {
+ let operation = OPCODE_ID_21_BATCH_PAY_TO_TRANSFER_TOKENS(toAddressArray, tokenClassArray, amountArray, priceArray, dividendable);
+ return operation;
+}
+
+export function add_emergency(emergencyAddressArray: string[]): OperationStruct {
+ let operation = OPCODE_ID_22_ADD_EMERGENCY(emergencyAddressArray);
+ return operation;
+}
+
+export function call_emergency(emergencyAddressArrayIndex: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_24_CALL_EMERGENCY(emergencyAddressArrayIndex);
+ return operation;
+}
+
+export function call_contract_abi(contractAddress: string, abi: string | Uint8Array, value: bigint): OperationStruct {
+ let operation = OPCODE_ID_25_CALL_CONTRACT_ABI(contractAddress, abi, value);
+ return operation;
+}
+
+export function pay_cash(amount: bigint, paymentType: bigint, dividendable: bigint): OperationStruct {
+ let operation = OPCODE_ID_26_PAY_CASH(amount, paymentType, dividendable);
+ return operation;
+}
+
+export function offer_dividends(): OperationStruct {
+ let operation = OPCODE_ID_27_OFFER_DIVIDENDS();
+ return operation;
+}
+
+export function set_approval_for_all_operations(address: string): OperationStruct {
+ let operation = OPCODE_ID_29_SET_APPROVAL_FOR_ALL_OPERATIONS(address);
+ return operation;
+}
+
+export function batch_burn_tokens_and_refund(tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[], priceArray: bigint[] | number[]): OperationStruct {
+ let operation = OPCODE_ID_30_BATCH_BURN_TOKENS_AND_REFUND(tokenClassArray, amountArray, priceArray);
+ return operation;
+}
+
+export function add_storage_string(value: string): OperationStruct {
+ let operation = OPCODE_ID_31_ADD_STORAGE_STRING(value);
+ return operation;
+}
+
+export function vote(voteArray: boolean[]): OperationStruct {
+ let operation = OPCODE_ID_32_VOTE(voteArray);
+ return operation;
+}
+
+export function execute_pending_program(): OperationStruct {
+ let operation = OPCODE_ID_33_EXECUTE_PENDING_PROGRAM();
+ return operation;
+}
+
+export function end_emergency(): OperationStruct {
+ let operation = OPCODE_ID_34_END_EMERGENCY();
+ return operation;
+}
+
+export function upgrade_to_address(newAddress: string): OperationStruct {
+ let operation = OPCODE_ID_35_UPGRADE_TO_ADDRESS(newAddress);
+ return operation;
+}
+
+export function confirm_upgrade_from_address(newAddress: string): OperationStruct {
+ let operation = OPCODE_ID_36_CONFIRM_UPGRAED_FROM_ADDRESS(newAddress);
+ return operation;
+}
+
+export function upgrade_to_the_latest(): OperationStruct {
+ let operation = OPCODE_ID_37_UPGRADE_TO_THE_LATEST();
+ return operation;
+}
+
+
+/**
+ * Below are all condition nodes for composing plugins
+ */
+export {
+ batch_op_size_greater_than,
+ batch_op_size_less_than,
+ batch_op_size_in_range,
+ batch_op_size_equals,
+ batch_op_each_target_addresses_equals,
+ batch_op_each_target_addresses_in_list,
+ batch_op_each_target_addresses_in_member_role,
+ batch_op_any_target_address_equals,
+ batch_op_any_target_address_in_list,
+ batch_op_any_target_address_in_member_role,
+ batch_op_each_target_address_to_itself,
+ batch_op_any_target_address_to_itself,
+ batch_op_each_source_address_equals,
+ batch_op_each_source_address_in_list,
+ batch_op_each_source_address_in_member_role,
+ batch_op_any_source_address_equal,
+ batch_op_any_source_address_in_list,
+ batch_op_any_source_address_in_member_role,
+ batch_op_each_source_address_from_itself,
+ batch_op_any_source_address_from_itself,
+ batch_op_each_token_class_equals,
+ batch_op_each_token_class_in_list,
+ batch_op_each_token_class_in_range,
+ batch_op_each_token_class_greater_than,
+ batch_op_each_token_class_less_than,
+ batch_op_total_token_amount_greater_than,
+ batch_op_total_token_amount_less_than,
+ batch_op_total_token_amount_in_range,
+ batch_op_total_token_amount_equals,
+ batch_op_any_token_amount_greater_than,
+ batch_op_any_token_amount_less_than,
+ batch_op_any_token_amount_in_range,
+ batch_op_any_token_amount_equals,
+ batch_op_any_token_class_greater_than,
+ batch_op_any_token_class_less_than,
+ batch_op_any_token_class_in_range,
+ batch_op_any_token_class_equals,
+ batch_op_any_token_class_in_list,
+ batch_op_each_source_address_in_member_role_list,
+ batch_op_any_source_address_in_member_role_list,
+ batch_op_each_target_address_in_member_role_list,
+ batch_op_any_target_address_in_member_role_list,
+ batch_op_each_target_address_withdrawable_cash_greater_than,
+ batch_op_each_target_address_withdrawable_cash_less_than,
+ batch_op_each_target_address_withdrawable_cash_in_range,
+ batch_op_each_target_address_withdrawable_cash_equals,
+ batch_op_any_target_address_withdrawable_cash_greater_than,
+ batch_op_any_target_address_withdrawable_cash_less_than,
+ batch_op_any_target_address_withdrawable_cash_in_range,
+ batch_op_each_target_address_total_voting_weight_greater_than,
+ batch_op_each_target_address_total_voting_weight_less_than,
+ batch_op_each_target_address_total_voting_weight_in_range,
+ batch_op_each_target_address_total_voting_weight_equals,
+ batch_op_any_target_address_total_voting_weight_greater_than,
+ batch_op_any_target_address_total_voting_weight_less_than,
+ batch_op_any_target_address_total_voting_weight_in_range,
+ batch_op_each_target_address_total_dividend_weight_greater_than,
+ batch_op_each_target_address_total_dividend_weight_less_than,
+ batch_op_each_target_address_total_dividend_weight_in_range,
+ batch_op_any_target_address_total_dividend_weight_greater_than,
+ batch_op_any_target_address_total_dividend_weight_less_than,
+ batch_op_any_target_address_total_dividend_weight_in_range,
+ batch_op_each_target_address_owns_token_x_greater_than,
+ batch_op_each_target_address_owns_token_x_less_than,
+ batch_op_each_target_address_owns_token_x_in_range,
+ batch_op_any_target_address_owns_token_x_greater_than,
+ batch_op_any_target_address_owns_token_x_less_than,
+ batch_op_any_target_address_owns_token_x_in_range
+} from "./SDK/conditionNodes/Condition_BatchOp";
+
+export {
+ create_token_classes_any_token_dividend_weight_greater_than,
+ create_token_classes_any_token_dividend_weight_less_than,
+ create_token_classes_any_token_dividend_weight_in_range,
+ create_token_classes_any_token_dividend_weight_equals,
+ create_token_classes_any_voting_weight_greater_than,
+ create_token_classes_any_voting_weight_less_than,
+ create_token_classes_any_voting_weight_in_range,
+ create_token_classes_any_voting_weight_equals
+} from "./SDK/conditionNodes/Condition_CreateTokenClass";
+
+export {
+ timestamp_greater_than,
+ timestamp_less_than,
+ timestamp_in_range,
+ date_year_greater_than,
+ date_year_less_than,
+ date_year_in_range,
+ date_month_greater_than,
+ date_month_less_than,
+ date_month_in_range,
+ date_day_greater_than,
+ date_day_less_than,
+ date_day_in_range,
+ date_hour_greater_than,
+ date_hour_less_than,
+ date_hour_in_range,
+ address_voting_weight_greater_than,
+ address_voting_weight_less_than,
+ address_voting_weight_in_range,
+ address_dividend_weight_greater_than,
+ address_dividend_weight_less_than,
+ address_dividend_weight_in_range,
+ address_token_x_greater_than,
+ address_token_x_less_than,
+ address_token_x_in_range,
+ total_voting_weight_greater_than,
+ total_voting_weight_less_than,
+ total_voting_weight_in_range,
+ total_dividend_weight_greater_than,
+ total_dividend_weight_less_than,
+ total_dividend_weight_in_range,
+ total_cash_greater_than,
+ total_cash_less_than,
+ total_cash_in_range,
+ total_cash_equals,
+ token_in_list_voting_weight_greater_than,
+ token_in_list_voting_weight_less_than,
+ token_in_list_voting_weight_in_range,
+ token_in_list_dividend_weight_greater_than,
+ token_in_list_dividend_weight_less_than,
+ token_in_list_dividend_weight_in_range,
+ token_in_list_amount_greater_than,
+ token_in_list_amount_less_than,
+ token_in_list_amount_in_range,
+ token_in_list_amount_equals,
+ address_voting_weight_percenrage_greater_than,
+ address_voting_weight_percenrage_less_than,
+ address_voting_weight_percenrage_in_range,
+ address_dividend_weight_percenrage_greater_than,
+ address_dividend_weight_percenrage_less_than,
+ address_dividend_weight_percenrage_in_range
+} from "./SDK/conditionNodes/Condition_MachineState";
+
+export { change_member_role_to_any_role_equals, change_member_role_to_any_role_in_list, change_member_role_to_any_role_in_range, change_member_name_to_any_string_in_list, change_member_name_to_any_string_contains } from "./SDK/conditionNodes/Condition_MembershipOp";
+
+export { operation_equals, operation_in_list, EnumOpcode } from "./SDK/conditionNodes/Condition_Operation";
+
+export {
+ operation_by_operator_since_last_time_greater_than,
+ operation_by_operator_since_last_time_less_than,
+ operation_by_operator_since_last_time_in_range,
+ operation_global_since_last_time_greater_than,
+ operation_global_since_last_time_less_than,
+ operation_global_since_last_time_in_range,
+ operation_by_any_address_in_list_since_last_time_greater_than,
+ operation_by_any_address_in_list_since_last_time_less_than,
+ operation_by_any_address_in_list_since_last_time_in_range,
+ operation_by_each_address_in_list_since_last_time_greater_than,
+ operation_by_each_address_in_list_since_last_time_less_than,
+ operation_by_each_address_in_list_since_last_time_in_range
+} from "./SDK/conditionNodes/Condition_OperationLog";
+
+export {
+ operator_name_equals,
+ operator_role_equals,
+ operator_address_equals,
+ operator_role_greater_than,
+ operator_role_less_than,
+ operator_role_in_range,
+ operator_role_in_list,
+ operator_token_x_amount_greater_than,
+ operator_token_x_amount_less_than,
+ operator_token_x_amount_in_range,
+ operator_token_x_amount_equals,
+ operator_token_x_percentage_greater_than,
+ operator_token_x_percentage_less_than,
+ operator_token_x_percentage_in_range,
+ operator_token_x_percentage_equals,
+ operator_voting_weight_greater_than,
+ operator_voting_weight_less_than,
+ operator_voting_weight_in_range,
+ operator_dividend_weight_greater_than,
+ operator_dividend_weight_less_than,
+ operator_dividend_weight_in_range,
+ operator_withdrawable_cash_greater_than,
+ operator_withdrawable_cash_less_than,
+ operator_withdrawable_cash_in_range,
+ operator_withdrawable_dividends_greater_than,
+ operator_withdrawable_dividends_less_than,
+ operator_withdrawable_dividends_in_range,
+ operator_address_in_list
+} from "./SDK/conditionNodes/Condition_Operator";
+
+export {
+ enable_any_before_op_plugin_index_in_list,
+ enable_any_after_op_plugin_index_in_list,
+ enable_each_before_op_plugin_index_in_list,
+ enable_each_after_op_plugin_index_in_list,
+ disable_any_before_op_plugin_index_in_list,
+ disable_any_after_op_plugin_index_in_list,
+ disable_each_before_op_plugin_index_in_list,
+ disable_each_after_op_plugin_index_in_list,
+ enable_any_before_op_plugin_index_in_range,
+ enable_any_after_op_plugin_index_in_range,
+ enable_each_before_op_plugin_index_in_range,
+ enable_each_after_op_plugin_index_in_range,
+ disable_any_before_op_plugin_index_in_range,
+ disable_any_after_op_plugin_index_in_range,
+ disable_each_before_op_plugin_index_in_range,
+ disable_each_after_op_plugin_index_in_range,
+ are_all_plugins_before_operation,
+ are_all_plugins_after_operation,
+ is_any_plugin_before_operation,
+ is_any_plugin_after_operation,
+ add_plugin_any_level_equals,
+ add_plugin_any_level_in_list,
+ add_plugin_any_level_in_range,
+ add_plugin_any_level_greater_than,
+ add_plugin_any_level_less_than,
+ add_plugin_any_return_type_equals,
+ add_plugin_any_voting_rule_index_in_list,
+ add_any_voting_rule_is_absolute_majority,
+ add_any_voting_rule_approval_percentage_in_range,
+ add_any_voting_rule_token_class_contains
+} from "./SDK/conditionNodes/Condition_PluginAndVoting";
+
+export { program_op_length_greater_than, program_op_length_less_than, program_op_length_in_range, program_op_length_equals, program_contains_op, program_contains_op_in_list, program_every_op_equals, program_every_op_in_list } from "./SDK/conditionNodes/Condition_Program";
+
+export { token_x_op_any_price_greater_than, token_x_op_any_price_less_than, token_x_op_any_price_in_range, token_x_op_any_price_equals } from "./SDK/conditionNodes/Condition_TokenAndCash";
export {
- deployDARC,
- transpiler,
- DARC,
- InitParam,
- TokenInfo,
- MemberInfo,
- darcBinary,
- DARCBinaryStruct,
- DARC_VERSION,
- ethers,
- run
-};
\ No newline at end of file
+ add_withdrawable_balance_any_amount_greater_than,
+ add_withdrawable_balance_any_amount_less_than,
+ add_withdrawable_balance_any_amount_in_range,
+ add_withdrawable_balance_any_amount_equals,
+ reduce_withdrawable_balance_any_amount_greater_than,
+ reduce_withdrawable_balance_any_amount_less_than,
+ reduce_withdrawable_balance_any_amount_in_range,
+ reduce_withdrawable_balance_any_amount_equals
+} from "./SDK/conditionNodes/Condition_Withdrawable";
\ No newline at end of file
diff --git a/darc-js/src/deployDARC/deployDARC.ts b/darc-js/src/deployDARC/deployDARC.ts
index ac8f3334..988e4e96 100644
--- a/darc-js/src/deployDARC/deployDARC.ts
+++ b/darc-js/src/deployDARC/deployDARC.ts
@@ -1,4 +1,3 @@
-import * as prelude from '../codeGenerator/codeGenerator';
import {ethers} from 'ethers';
import {DARC_VERSION, DARCBinaryStruct, darcBinary} from '../darcBinary/darcBinary';
diff --git a/darc-js/src/index.ts b/darc-js/src/index.ts
index ff66f293..866caf6d 100644
--- a/darc-js/src/index.ts
+++ b/darc-js/src/index.ts
@@ -1,2 +1,517 @@
-import * as darcjs from './darcjs';
-export { darcjs };
\ No newline at end of file
+// /**
+// * Below are core darcjs
+// */
+// import {deployDARC} from './deployDARC/deployDARC';
+// import { transpile } from './SDK/transpiler';
+// import { InitParam } from './DARC/DARC';
+// import { darcBinary, DARCBinaryStruct, DARC_VERSION } from './darcBinary/darcBinary';
+
+// export {
+// deployDARC,
+// transpile,
+// DARC,
+// InitParam,
+// darcBinary,
+// DARCBinaryStruct,
+// DARC_VERSION,
+// ethers,
+// };
+
+// /**
+// * Below are core interpreter functions for the By-law Script
+// */
+// export { transpileAndRun } from "./SDK/runtime";
+
+// /**
+// * Below are all necessary functions for the SDK.
+// */
+// import * as instructions from "./SDK/includes";
+// import { OperationStruct, OperationStructOutput, ProgramStruct, VotingRuleStruct, PluginStruct, PluginStructWithNode } from "./types/basicTypes";
+// import {ethers} from "ethers";
+// import * as DARC from "./DARC/DARC";
+
+// import {
+// OPCODE_ID_1_BATCH_MINT_TOKENS,
+// OPCODE_ID_2_BATCH_CREATE_TOKEN_CLASSES,
+// OPCODE_ID_3_BATCH_TRANSFER_TOKENS,
+// OPCODE_ID_4_BATCH_TRANSFER_TOKENS_FROM_TO,
+// OPCODE_ID_5_BATCH_BURN_TOKENS,
+// OPCODE_ID_6_BATCH_BURN_TOKENS_FROM,
+// OPCODE_ID_7_BATCH_ADD_MEMBERSHIPS,
+// OPCODE_ID_8_BATCH_SUSPEND_MEMBERSHIPS,
+// OPCODE_ID_9_BATCH_RESUME_MEMBERSHIPS,
+// OPCODE_ID_10_BATCH_CHANGE_MEMBER_ROLES,
+// OPCODE_ID_11_BATCH_CHANGE_MEMBER_NAMES,
+// OPCODE_ID_12_BATCH_ADD_PLUGINS,
+// OPCODE_ID_13_BATCH_ENABLE_PLUGINS,
+// OPCODE_ID_14_BATCH_DISABLE_PLUGINS,
+// OPCODE_ID_15_BATCH_ADD_AND_ENABLE_PLUGINS,
+// OPCODE_ID_16_BATCH_SET_PARAMETERS,
+// OPCODE_ID_17_BATCH_ADD_WITHDRAWABLE_BALANCES,
+// OPCODE_ID_18_BATCH_REDUCE_WITHDRAWABLE_BALANCES,
+// OPCODE_ID_19_BATCH_ADD_VOTING_RULES,
+// OPCODE_ID_20_BATCH_PAY_TO_MINT_TOKENS,
+// OPCODE_ID_21_BATCH_PAY_TO_TRANSFER_TOKENS,
+// OPCODE_ID_22_ADD_EMERGENCY,
+// OPCODE_ID_24_CALL_EMERGENCY,
+// OPCODE_ID_25_CALL_CONTRACT_ABI,
+// OPCODE_ID_26_PAY_CASH,
+// OPCODE_ID_27_OFFER_DIVIDENDS,
+// OPCODE_ID_29_SET_APPROVAL_FOR_ALL_OPERATIONS,
+// OPCODE_ID_30_BATCH_BURN_TOKENS_AND_REFUND,
+// OPCODE_ID_31_ADD_STORAGE_STRING,
+// OPCODE_ID_32_VOTE,
+// OPCODE_ID_33_EXECUTE_PENDING_PROGRAM,
+// OPCODE_ID_34_END_EMERGENCY,
+// OPCODE_ID_35_UPGRADE_TO_ADDRESS,
+// OPCODE_ID_36_CONFIRM_UPGRAED_FROM_ADDRESS,
+// OPCODE_ID_37_UPGRADE_TO_THE_LATEST
+// } from "./SDK/opcodes/opcodeTable";
+
+// /**
+// * The core function of the SDK. It takes in a list of operations and a wallet, and then sends the operations to the DARC contract. This is different from the By-law Script, which compile and run the code directly.
+// * @param operationList The list of operations to be sent to the DARC contract
+// * @param wallet The wallet to be used to sign the transaction (provider must be set)
+// * @param targetDARCAddress The address of the DARC contract to be used
+// * @param notes The notes to be attached to the program
+// * @param delegateToAddress If the signer is not the operator, but the operator has approved the signer to sign on its behalf, then the signer can set this parameter to the operator's address. Otherwise, leave it undefined.
+// */
+// export async function executeOperationList(
+// operationList: OperationStruct[],
+// wallet: ethers.Wallet,
+// targetDARCAddress: string,
+// notes?: string,
+// delegateToAddress?: string
+// ) {
+
+// const operatorAddress = delegateToAddress? delegateToAddress : wallet.address;
+// for (let i = 0; i < operationList.length; i++) {
+// operationList[i].operatorAddress = operatorAddress;
+// }
+// const program:ProgramStruct = {
+// programOperatorAddress: operatorAddress,
+// operations: operationList,
+// notes: notes? notes : ""
+// };
+
+// const attachedDARC = new DARC.DARC({
+// address: targetDARCAddress,
+// version: DARC.DARC_VERSION.Latest,
+// wallet: wallet,
+// });
+
+// await attachedDARC.entrance(program);
+// }
+
+
+
+
+// export function batch_mint_tokens(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_1_BATCH_MINT_TOKENS(addressArray, tokenClassArray, amountArray);
+// return operation;
+// }
+
+// export function batch_create_token_classes(nameArray: string[], tokenIndexArray: bigint[] | number[], votingWeightArray: bigint[] | number[], dividendWeightArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_2_BATCH_CREATE_TOKEN_CLASSES(nameArray, tokenIndexArray, votingWeightArray, dividendWeightArray);
+// return operation;
+// }
+
+// export function batch_transfer_tokens(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_3_BATCH_TRANSFER_TOKENS(addressArray, tokenClassArray, amountArray);
+// return operation;
+// }
+
+// export function batch_transfer_tokens_from_to(fromAddressArray: string[], toAddressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_4_BATCH_TRANSFER_TOKENS_FROM_TO(fromAddressArray, toAddressArray, tokenClassArray, amountArray);
+// return operation;
+// }
+
+// export function batch_burn_tokens(tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_5_BATCH_BURN_TOKENS(tokenClassArray, amountArray);
+// return operation;
+// }
+
+// export function batch_burn_tokens_from(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_6_BATCH_BURN_TOKENS_FROM(addressArray, tokenClassArray, amountArray);
+// return operation;
+// }
+
+// export function batch_add_memberships(addressArray: string[], roleArray: bigint[] | number[], nameArray: string[]): OperationStruct {
+// let operation = OPCODE_ID_7_BATCH_ADD_MEMBERSHIPS(addressArray, roleArray, nameArray);
+// return operation;
+// }
+
+// export function batch_suspend_memberships(addressArray: string[]): OperationStruct {
+// let operation = OPCODE_ID_8_BATCH_SUSPEND_MEMBERSHIPS(addressArray);
+// return operation;
+// }
+
+// export function batch_resume_memberships(addressArray: string[]): OperationStruct {
+// let operation = OPCODE_ID_9_BATCH_RESUME_MEMBERSHIPS(addressArray);
+// return operation;
+// }
+
+// export function batch_change_member_roles(addressArray: string[], roleArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_10_BATCH_CHANGE_MEMBER_ROLES(addressArray, roleArray);
+// return operation;
+// }
+
+// export function batch_change_member_names(addressArray: string[], nameArray: string[]): OperationStruct {
+// let operation = OPCODE_ID_11_BATCH_CHANGE_MEMBER_NAMES(addressArray, nameArray);
+// return operation;
+// }
+
+// export function batch_add_plugins(pluginArray: PluginStruct[] | PluginStructWithNode[]): OperationStruct {
+// if (pluginArray instanceof Array && typeof pluginArray[0] !== "object") {
+// let operation = OPCODE_ID_12_BATCH_ADD_PLUGINS(pluginArray);
+// return operation;
+// }
+// let operation = OPCODE_ID_12_BATCH_ADD_PLUGINS(pluginArray);
+// return operation;
+// }
+
+// export function batch_enable_plugins(pluginIndexArray: bigint[] | number[], isBeforeOperationArray: boolean[]): OperationStruct {
+// let operation = OPCODE_ID_13_BATCH_ENABLE_PLUGINS(pluginIndexArray, isBeforeOperationArray);
+// return operation;
+// }
+
+// export function batch_disable_plugins(pluginIndexArray: bigint[] | number[], isBeforeOperationArray: boolean[]): OperationStruct {
+// let operation = OPCODE_ID_14_BATCH_DISABLE_PLUGINS(pluginIndexArray, isBeforeOperationArray);
+// return operation;
+// }
+
+// export function batch_add_and_enable_plugins(pluginArray: PluginStruct[] | PluginStructWithNode[]): OperationStruct {
+// let operation = OPCODE_ID_15_BATCH_ADD_AND_ENABLE_PLUGINS(pluginArray);
+// return operation;
+// }
+
+// export function batch_set_parameters(parameterIndexArray: bigint[] | number[], parameterValueArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_16_BATCH_SET_PARAMETERS(parameterIndexArray, parameterValueArray);
+// return operation;
+// }
+
+// export function batch_add_withdrawable_balances(addressArray: string[], amountArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_17_BATCH_ADD_WITHDRAWABLE_BALANCES(addressArray, amountArray);
+// return operation;
+// }
+
+// export function batch_reduce_withdrawable_balances(addressArray: string[], amountArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_18_BATCH_REDUCE_WITHDRAWABLE_BALANCES(addressArray, amountArray);
+// return operation;
+// }
+
+// export function batch_add_voting_rules(ruleArray: VotingRuleStruct[]): OperationStruct {
+// let operation = OPCODE_ID_19_BATCH_ADD_VOTING_RULES(ruleArray);
+// return operation;
+// }
+
+// export function batch_pay_to_mint_tokens(addressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[], priceArray: bigint[] | number[], dividendable: bigint): OperationStruct {
+// let operation = OPCODE_ID_20_BATCH_PAY_TO_MINT_TOKENS(addressArray, tokenClassArray, amountArray, priceArray, dividendable);
+// return operation;
+// }
+
+// export function batch_pay_to_transfer_tokens( toAddressArray: string[], tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[], priceArray: bigint[] | number[], dividendable: bigint): OperationStruct {
+// let operation = OPCODE_ID_21_BATCH_PAY_TO_TRANSFER_TOKENS(toAddressArray, tokenClassArray, amountArray, priceArray, dividendable);
+// return operation;
+// }
+
+// export function add_emergency(emergencyAddressArray: string[]): OperationStruct {
+// let operation = OPCODE_ID_22_ADD_EMERGENCY(emergencyAddressArray);
+// return operation;
+// }
+
+// export function call_emergency(emergencyAddressArrayIndex: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_24_CALL_EMERGENCY(emergencyAddressArrayIndex);
+// return operation;
+// }
+
+// export function call_contract_abi(contractAddress: string, abi: string | Uint8Array, value: bigint): OperationStruct {
+// let operation = OPCODE_ID_25_CALL_CONTRACT_ABI(contractAddress, abi, value);
+// return operation;
+// }
+
+// export function pay_cash(amount: bigint, paymentType: bigint, dividendable: bigint): OperationStruct {
+// let operation = OPCODE_ID_26_PAY_CASH(amount, paymentType, dividendable);
+// return operation;
+// }
+
+// export function offer_dividends(): OperationStruct {
+// let operation = OPCODE_ID_27_OFFER_DIVIDENDS();
+// return operation;
+// }
+
+// export function set_approval_for_all_operations(address: string): OperationStruct {
+// let operation = OPCODE_ID_29_SET_APPROVAL_FOR_ALL_OPERATIONS(address);
+// return operation;
+// }
+
+// export function batch_burn_tokens_and_refund(tokenClassArray: bigint[] | number[], amountArray: bigint[] | number[], priceArray: bigint[] | number[]): OperationStruct {
+// let operation = OPCODE_ID_30_BATCH_BURN_TOKENS_AND_REFUND(tokenClassArray, amountArray, priceArray);
+// return operation;
+// }
+
+// export function add_storage_string(value: string): OperationStruct {
+// let operation = OPCODE_ID_31_ADD_STORAGE_STRING(value);
+// return operation;
+// }
+
+// export function vote(voteArray: boolean[]): OperationStruct {
+// let operation = OPCODE_ID_32_VOTE(voteArray);
+// return operation;
+// }
+
+// export function execute_pending_program(): OperationStruct {
+// let operation = OPCODE_ID_33_EXECUTE_PENDING_PROGRAM();
+// return operation;
+// }
+
+// export function end_emergency(): OperationStruct {
+// let operation = OPCODE_ID_34_END_EMERGENCY();
+// return operation;
+// }
+
+// export function upgrade_to_address(newAddress: string): OperationStruct {
+// let operation = OPCODE_ID_35_UPGRADE_TO_ADDRESS(newAddress);
+// return operation;
+// }
+
+// export function confirm_upgrade_from_address(newAddress: string): OperationStruct {
+// let operation = OPCODE_ID_36_CONFIRM_UPGRAED_FROM_ADDRESS(newAddress);
+// return operation;
+// }
+
+// export function upgrade_to_the_latest(): OperationStruct {
+// let operation = OPCODE_ID_37_UPGRADE_TO_THE_LATEST();
+// return operation;
+// }
+
+
+// /**
+// * Below are all condition nodes for composing plugins
+// */
+// export {
+// batch_op_size_greater_than,
+// batch_op_size_less_than,
+// batch_op_size_in_range,
+// batch_op_size_equals,
+// batch_op_each_target_addresses_equals,
+// batch_op_each_target_addresses_in_list,
+// batch_op_each_target_addresses_in_member_role,
+// batch_op_any_target_address_equals,
+// batch_op_any_target_address_in_list,
+// batch_op_any_target_address_in_member_role,
+// batch_op_each_target_address_to_itself,
+// batch_op_any_target_address_to_itself,
+// batch_op_each_source_address_equals,
+// batch_op_each_source_address_in_list,
+// batch_op_each_source_address_in_member_role,
+// batch_op_any_source_address_equal,
+// batch_op_any_source_address_in_list,
+// batch_op_any_source_address_in_member_role,
+// batch_op_each_source_address_from_itself,
+// batch_op_any_source_address_from_itself,
+// batch_op_each_token_class_equals,
+// batch_op_each_token_class_in_list,
+// batch_op_each_token_class_in_range,
+// batch_op_each_token_class_greater_than,
+// batch_op_each_token_class_less_than,
+// batch_op_total_token_amount_greater_than,
+// batch_op_total_token_amount_less_than,
+// batch_op_total_token_amount_in_range,
+// batch_op_total_token_amount_equals,
+// batch_op_any_token_amount_greater_than,
+// batch_op_any_token_amount_less_than,
+// batch_op_any_token_amount_in_range,
+// batch_op_any_token_amount_equals,
+// batch_op_any_token_class_greater_than,
+// batch_op_any_token_class_less_than,
+// batch_op_any_token_class_in_range,
+// batch_op_any_token_class_equals,
+// batch_op_any_token_class_in_list,
+// batch_op_each_source_address_in_member_role_list,
+// batch_op_any_source_address_in_member_role_list,
+// batch_op_each_target_address_in_member_role_list,
+// batch_op_any_target_address_in_member_role_list,
+// batch_op_each_target_address_withdrawable_cash_greater_than,
+// batch_op_each_target_address_withdrawable_cash_less_than,
+// batch_op_each_target_address_withdrawable_cash_in_range,
+// batch_op_each_target_address_withdrawable_cash_equals,
+// batch_op_any_target_address_withdrawable_cash_greater_than,
+// batch_op_any_target_address_withdrawable_cash_less_than,
+// batch_op_any_target_address_withdrawable_cash_in_range,
+// batch_op_each_target_address_total_voting_weight_greater_than,
+// batch_op_each_target_address_total_voting_weight_less_than,
+// batch_op_each_target_address_total_voting_weight_in_range,
+// batch_op_each_target_address_total_voting_weight_equals,
+// batch_op_any_target_address_total_voting_weight_greater_than,
+// batch_op_any_target_address_total_voting_weight_less_than,
+// batch_op_any_target_address_total_voting_weight_in_range,
+// batch_op_each_target_address_total_dividend_weight_greater_than,
+// batch_op_each_target_address_total_dividend_weight_less_than,
+// batch_op_each_target_address_total_dividend_weight_in_range,
+// batch_op_any_target_address_total_dividend_weight_greater_than,
+// batch_op_any_target_address_total_dividend_weight_less_than,
+// batch_op_any_target_address_total_dividend_weight_in_range,
+// batch_op_each_target_address_owns_token_x_greater_than,
+// batch_op_each_target_address_owns_token_x_less_than,
+// batch_op_each_target_address_owns_token_x_in_range,
+// batch_op_any_target_address_owns_token_x_greater_than,
+// batch_op_any_target_address_owns_token_x_less_than,
+// batch_op_any_target_address_owns_token_x_in_range
+// } from "./SDK/conditionNodes/Condition_BatchOp";
+
+// export {
+// create_token_classes_any_token_dividend_weight_greater_than,
+// create_token_classes_any_token_dividend_weight_less_than,
+// create_token_classes_any_token_dividend_weight_in_range,
+// create_token_classes_any_token_dividend_weight_equals,
+// create_token_classes_any_voting_weight_greater_than,
+// create_token_classes_any_voting_weight_less_than,
+// create_token_classes_any_voting_weight_in_range,
+// create_token_classes_any_voting_weight_equals
+// } from "./SDK/conditionNodes/Condition_CreateTokenClass";
+
+// export {
+// timestamp_greater_than,
+// timestamp_less_than,
+// timestamp_in_range,
+// date_year_greater_than,
+// date_year_less_than,
+// date_year_in_range,
+// date_month_greater_than,
+// date_month_less_than,
+// date_month_in_range,
+// date_day_greater_than,
+// date_day_less_than,
+// date_day_in_range,
+// date_hour_greater_than,
+// date_hour_less_than,
+// date_hour_in_range,
+// address_voting_weight_greater_than,
+// address_voting_weight_less_than,
+// address_voting_weight_in_range,
+// address_dividend_weight_greater_than,
+// address_dividend_weight_less_than,
+// address_dividend_weight_in_range,
+// address_token_x_greater_than,
+// address_token_x_less_than,
+// address_token_x_in_range,
+// total_voting_weight_greater_than,
+// total_voting_weight_less_than,
+// total_voting_weight_in_range,
+// total_dividend_weight_greater_than,
+// total_dividend_weight_less_than,
+// total_dividend_weight_in_range,
+// total_cash_greater_than,
+// total_cash_less_than,
+// total_cash_in_range,
+// total_cash_equals,
+// token_in_list_voting_weight_greater_than,
+// token_in_list_voting_weight_less_than,
+// token_in_list_voting_weight_in_range,
+// token_in_list_dividend_weight_greater_than,
+// token_in_list_dividend_weight_less_than,
+// token_in_list_dividend_weight_in_range,
+// token_in_list_amount_greater_than,
+// token_in_list_amount_less_than,
+// token_in_list_amount_in_range,
+// token_in_list_amount_equals
+// } from "./SDK/conditionNodes/Condition_MachineState";
+
+// export { change_member_role_to_any_role_equals, change_member_role_to_any_role_in_list, change_member_role_to_any_role_in_range, change_member_name_to_any_string_in_list, change_member_name_to_any_string_contains } from "./SDK/conditionNodes/Condition_MembershipOp";
+
+// export { operation_equals, operation_in_list, EnumOpcode } from "./SDK/conditionNodes/Condition_Operation";
+
+// export {
+// operation_by_operator_since_last_time_greater_than,
+// operation_by_operator_since_last_time_less_than,
+// operation_by_operator_since_last_time_in_range,
+// operation_global_since_last_time_greater_than,
+// operation_global_since_last_time_less_than,
+// operation_global_since_last_time_in_range,
+// operation_by_any_address_in_list_since_last_time_greater_than,
+// operation_by_any_address_in_list_since_last_time_less_than,
+// operation_by_any_address_in_list_since_last_time_in_range,
+// operation_by_each_address_in_list_since_last_time_greater_than,
+// operation_by_each_address_in_list_since_last_time_less_than,
+// operation_by_each_address_in_list_since_last_time_in_range
+// } from "./SDK/conditionNodes/Condition_OperationLog";
+
+// export {
+// operator_name_equals,
+// operator_role_equals,
+// operator_address_equals,
+// operator_role_greater_than,
+// operator_role_less_than,
+// operator_role_in_range,
+// operator_role_in_list,
+// operator_token_x_amount_greater_than,
+// operator_token_x_amount_less_than,
+// operator_token_x_amount_in_range,
+// operator_token_x_amount_equals,
+// operator_token_x_percentage_greater_than,
+// operator_token_x_percentage_less_than,
+// operator_token_x_percentage_in_range,
+// operator_token_x_percentage_equals,
+// operator_voting_weight_greater_than,
+// operator_voting_weight_less_than,
+// operator_voting_weight_in_range,
+// operator_dividend_weight_greater_than,
+// operator_dividend_weight_less_than,
+// operator_dividend_weight_in_range,
+// operator_withdrawable_cash_greater_than,
+// operator_withdrawable_cash_less_than,
+// operator_withdrawable_cash_in_range,
+// operator_withdrawable_dividends_greater_than,
+// operator_withdrawable_dividends_less_than,
+// operator_withdrawable_dividends_in_range,
+// operator_address_in_list
+// } from "./SDK/conditionNodes/Condition_Operator";
+
+// export {
+// enable_any_before_op_plugin_index_in_list,
+// enable_any_after_op_plugin_index_in_list,
+// enable_each_before_op_plugin_index_in_list,
+// enable_each_after_op_plugin_index_in_list,
+// disable_any_before_op_plugin_index_in_list,
+// disable_any_after_op_plugin_index_in_list,
+// disable_each_before_op_plugin_index_in_list,
+// disable_each_after_op_plugin_index_in_list,
+// enable_any_before_op_plugin_index_in_range,
+// enable_any_after_op_plugin_index_in_range,
+// enable_each_before_op_plugin_index_in_range,
+// enable_each_after_op_plugin_index_in_range,
+// disable_any_before_op_plugin_index_in_range,
+// disable_any_after_op_plugin_index_in_range,
+// disable_each_before_op_plugin_index_in_range,
+// disable_each_after_op_plugin_index_in_range,
+// are_all_plugins_before_operation,
+// are_all_plugins_after_operation,
+// is_any_plugin_before_operation,
+// is_any_plugin_after_operation,
+// add_plugin_any_level_equals,
+// add_plugin_any_level_in_list,
+// add_plugin_any_level_in_range,
+// add_plugin_any_level_greater_than,
+// add_plugin_any_level_less_than,
+// add_plugin_any_return_type_equals,
+// add_plugin_any_voting_rule_index_in_list,
+// add_any_voting_rule_is_absolute_majority,
+// add_any_voting_rule_approval_percentage_in_range,
+// add_any_voting_rule_token_class_contains
+// } from "./SDK/conditionNodes/Condition_PluginAndVoting";
+
+// export { program_op_length_greater_than, program_op_length_less_than, program_op_length_in_range, program_op_length_equals, program_contains_op, program_contains_op_in_list, program_every_op_equals, program_every_op_in_list } from "./SDK/conditionNodes/Condition_Program";
+
+// export { token_x_op_any_price_greater_than, token_x_op_any_price_less_than, token_x_op_any_price_in_range, token_x_op_any_price_equals } from "./SDK/conditionNodes/Condition_TokenAndCash";
+
+// export {
+// add_withdrawable_balance_any_amount_greater_than,
+// add_withdrawable_balance_any_amount_less_than,
+// add_withdrawable_balance_any_amount_in_range,
+// add_withdrawable_balance_any_amount_equals,
+// reduce_withdrawable_balance_any_amount_greater_than,
+// reduce_withdrawable_balance_any_amount_less_than,
+// reduce_withdrawable_balance_any_amount_in_range,
+// reduce_withdrawable_balance_any_amount_equals
+// } from "./SDK/conditionNodes/Condition_Withdrawable";
\ No newline at end of file
diff --git a/darc-js/src/SDK/struct/Program.ts b/darc-js/src/sdk.ts
similarity index 100%
rename from darc-js/src/SDK/struct/Program.ts
rename to darc-js/src/sdk.ts
diff --git a/darc-js/src/types/basicTypes.ts b/darc-js/src/types/basicTypes.ts
index 6747afbe..9d8af417 100644
--- a/darc-js/src/types/basicTypes.ts
+++ b/darc-js/src/types/basicTypes.ts
@@ -12,6 +12,8 @@ import type {
utils,
} from "ethers";
+import {Node} from "../SDK/Node";
+
type PromiseOrValue = T | Promise;
@@ -95,7 +97,16 @@ export type PluginStruct = {
votingRuleIndex: PromiseOrValue;
notes: PromiseOrValue;
bIsEnabled: PromiseOrValue;
- bIsInitialized: PromiseOrValue;
+ bIsBeforeOperation: PromiseOrValue;
+};
+
+export type PluginStructWithNode = {
+ returnType: PromiseOrValue;
+ level: PromiseOrValue;
+ conditionNodes: Node;
+ votingRuleIndex: PromiseOrValue;
+ notes: PromiseOrValue;
+ bIsEnabled: PromiseOrValue;
bIsBeforeOperation: PromiseOrValue;
};
@@ -115,7 +126,6 @@ export type PluginStructOutput = [
votingRuleIndex: BigNumber;
notes: string;
bIsEnabled: boolean;
- bIsInitialized: boolean;
bIsBeforeOperation: boolean;
};
diff --git a/darc-js/tests/expression-test/expression-test.ts b/darc-js/tests/expression-test/expression-test.ts
new file mode 100644
index 00000000..f46892ac
--- /dev/null
+++ b/darc-js/tests/expression-test/expression-test.ts
@@ -0,0 +1,366 @@
+import {EnumReturnType, executeOperationList, operator_address_equals} from "../../src/darcjs";
+import { deployDARC, DARC_VERSION} from '../../src/darcjs';
+import { ethers, BigNumber } from 'ethers';
+import * as DARC from '../../src/DARC/DARC';
+import 'mocha';
+import { expect } from 'chai';
+import { batch_add_and_enable_plugins, batch_mint_tokens, batch_create_token_classes, EnumOpcode } from "../../src/darcjs";
+import {or, node, and, expression} from "../../src/SDK/Node";
+import { transpileAndRun } from "../../src/SDK/runtime";
+
+const programOperatorAddress = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
+
+const target1 = '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC';
+
+
+const target2 = '0x90F79bf6EB2c4f870365E785982E1f101E93b906';
+
+const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545/');
+
+// initialize signer 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 with private key
+
+
+const signer = new ethers.Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', provider);
+
+const signer1 = new ethers.Wallet('0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a', provider);
+const signer2 = new ethers.Wallet('0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6', provider);
+
+const my_wallet_address = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
+
+
+function toBigIntArray(array: number[]): bigint[] {
+ let bigIntArray: bigint[] = [];
+ for (let i = 0; i < array.length; i++) {
+ bigIntArray.push(BigInt(array[i]));
+ }
+ return bigIntArray;
+}
+
+describe('expression node basic test', () => {
+ it ('should run the program "add and enable plugin" with generated condition node list in SDK', async () => {
+ const darc_contract_address = await deployDARC(DARC_VERSION.Latest, signer);
+ await executeOperationList(
+ [
+
+ // operation 0
+ batch_create_token_classes(
+ ['token_0', 'token_1'],
+ toBigIntArray([0,1]),
+ toBigIntArray([10,20]),
+ toBigIntArray([20,30])
+ ),
+
+ // operation 1
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ ),
+
+ // operation 2
+ batch_add_and_enable_plugins(
+ [
+ // plugin 0: disable all operations
+ {
+ returnType: EnumReturnType.NO, // no
+ level: BigNumber.from(3), // level 3
+ votingRuleIndex: BigNumber.from(0),
+ notes: "disable all program",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:[{
+ id: BigNumber.from(0),
+ nodeType: BigNumber.from(3), // expression
+ logicalOperator: BigNumber.from(0), // no operator
+ conditionExpression: BigNumber.from(0), // always true
+ childList: [],
+ param: {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ }]
+ },
+ {
+ returnType: EnumReturnType.YES_AND_SKIP_SANDBOX, // yes and skip sandbox
+ level: BigInt(103),
+ votingRuleIndex: BigInt(0),
+ notes: "allow operatorAddress == target1 | operatorAddress == target2",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:
+ or(
+ operator_address_equals(target1),
+ operator_address_equals(target2)
+ ).generateConditionNodeList()
+ }
+ ]
+ )
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ ).then(async ()=>{
+
+ const attached_local_darc_signer1 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer1,
+ version: DARC_VERSION.Latest,
+ });
+
+ const attached_local_darc_signer2 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer2,
+ version: DARC_VERSION.Latest,
+ });
+
+ // signer 1 and signer 2 should be able to run the program
+ let isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer1,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+
+ expect (isSuccess).to.equal(true);
+
+ isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer2,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+
+ expect (isSuccess).to.equal(true);
+
+ // and signer0 and programOperatorAddress should not be able to run the program
+ isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+
+ isSuccess = false;
+ }
+ expect (isSuccess).to.equal(false);
+ });
+ });
+
+ it ('should also generate condition node automatically, without manually calling the function generateConditionNodeList', async () => {
+ const darc_contract_address = await deployDARC(DARC_VERSION.Latest, signer);
+ await executeOperationList(
+ [
+
+ // operation 0
+ batch_create_token_classes(
+ ['token_0', 'token_1'],
+ toBigIntArray([0,1]),
+ toBigIntArray([10,20]),
+ toBigIntArray([20,30])
+ ),
+
+ // operation 1
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
+ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ ),
+
+ // operation 2
+ batch_add_and_enable_plugins(
+ [
+ {
+ returnType: EnumReturnType.YES_AND_SKIP_SANDBOX, // yes and skip sandbox
+ level: BigInt(103),
+ votingRuleIndex: BigInt(0),
+ notes: "allow operatorAddress == target1 | operatorAddress == target2",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:
+ or(
+ operator_address_equals(target1),
+ operator_address_equals(target2)
+ )
+ }
+ ]
+ )
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ );
+ });
+
+ it ("should generate condition node successfully in bylaw script runtime", async () => {
+ const darc_contract_address = await deployDARC(DARC_VERSION.Latest, signer);
+
+ const code = `
+
+ const target1 = '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC';
+
+
+ const target2 = '0x90F79bf6EB2c4f870365E785982E1f101E93b906';
+
+
+ batch_create_token_classes(['token_0', 'token_1'],
+ [0,1],
+ [10,20],
+ [20,30]);
+
+
+ batch_mint_tokens([ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
+ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ [0, 1], [100,200]);
+
+ batch_add_and_enable_plugins(
+ [
+ // plugin 0: disable all operations
+ {
+ returnType: BigNumber.from(2), // no
+ level: BigNumber.from(3), // level 3
+ votingRuleIndex: BigNumber.from(0),
+ notes: "disable all program",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes: new TRUE() // always true
+ },
+ {
+ returnType: BigInt(4), // yes and skip sandbox
+ level: BigInt(103),
+ votingRuleIndex: BigInt(0),
+ notes: "allow operatorAddress == target1 | operatorAddress == target2",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:
+ operator_address_equals(target1) | operator_address_equals(target2)
+ // or(
+ // expression(3, {
+ // STRING_ARRAY: [],
+ // UINT256_2DARRAY: [],
+ // ADDRESS_2DARRAY: [[target1]],
+ // BYTES: []
+ // }),
+ // expression(3, {
+ // STRING_ARRAY: [],
+ // UINT256_2DARRAY: [],
+ // ADDRESS_2DARRAY: [[target2]],
+ // BYTES: []
+ // })
+ // )
+ }
+ ]
+ )
+ `;
+ await transpileAndRun(code, signer, darc_contract_address, DARC_VERSION.Latest);
+ // it should
+
+
+ const attached_local_darc_signer1 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer1,
+ version: DARC_VERSION.Latest,
+ });
+
+ const attached_local_darc_signer2 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer2,
+ version: DARC_VERSION.Latest,
+ });
+
+ // signer 1 and signer 2 should be able to run the program
+ let isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer1,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+
+ expect (isSuccess).to.equal(true);
+
+ isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer2,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+
+ expect (isSuccess).to.equal(true);
+
+ // and signer0 and programOperatorAddress should not be able to run the program
+ isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+
+ isSuccess = false;
+ }
+ expect (isSuccess).to.equal(false);
+ });
+});
\ No newline at end of file
diff --git a/darc-js/tests/runtime-test/basic-runtime-test.ts b/darc-js/tests/runtime-test/basic-runtime-test.ts
index 551bc533..5b2743eb 100644
--- a/darc-js/tests/runtime-test/basic-runtime-test.ts
+++ b/darc-js/tests/runtime-test/basic-runtime-test.ts
@@ -18,7 +18,7 @@ const my_wallet_address = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
* 2. mint 100 token_0 and 200 token_1 to address 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
*/
const code = `
-batch_create_token_class(['token_0', 'token_1'],
+batch_create_token_classes(['token_0', 'token_1'],
[0,1],
[10,20],
[20,30]);
diff --git a/darc-js/tests/runtime-test/pressure-mint-token-test.ts b/darc-js/tests/runtime-test/pressure-mint-token-test.ts
index ee930121..a5ac4225 100644
--- a/darc-js/tests/runtime-test/pressure-mint-token-test.ts
+++ b/darc-js/tests/runtime-test/pressure-mint-token-test.ts
@@ -20,7 +20,7 @@ const my_wallet_address = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
const code = `
-batch_create_token_class(['token_0', 'token_1'],
+batch_create_token_classes(['token_0', 'token_1'],
[0,1],
[10,20],
[20,30]);
@@ -42,7 +42,7 @@ for (let i = 0; i < 1000; i++) {
tokenClassList2.push(1);
tokenNumberList.push(100);
}
-batch_create_token_class(['token_0', 'token_1'],
+batch_create_token_classes(['token_0', 'token_1'],
[0,1],
[10,20],
[20,30]);
diff --git a/darc-js/tests/runtime-test/transpileAndRun.ts b/darc-js/tests/runtime-test/transpileAndRun.ts
new file mode 100644
index 00000000..579f4f33
--- /dev/null
+++ b/darc-js/tests/runtime-test/transpileAndRun.ts
@@ -0,0 +1,177 @@
+import {executeOperationList} from "../../src/darcjs";
+import {run, deployDARC, DARC_VERSION} from '../../src/darcjs';
+import { ethers, BigNumber } from 'ethers';
+import * as DARC from '../../src/DARC/DARC';
+import 'mocha';
+import { expect } from 'chai';
+import { batch_add_and_enable_plugins, batch_mint_tokens, batch_create_token_classes } from "../../src/darcjs";
+import {or, node, and, expression} from "../../src/SDK/Node";
+import { transpileAndRun } from "../../src/SDK/runtime";
+import { transpile } from "../../src/darcjs";
+
+
+const programOperatorAddress = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
+
+const target1 = '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC';
+
+
+const target2 = '0x90F79bf6EB2c4f870365E785982E1f101E93b906';
+
+const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545/');
+
+// initialize signer 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 with private key
+const signer = new ethers.Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', provider);
+
+const signer1 = new ethers.Wallet('0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a', provider);
+const signer2 = new ethers.Wallet('0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6', provider);
+
+const my_wallet_address = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
+
+
+function toBigIntArray(array: number[]): bigint[] {
+ let bigIntArray: bigint[] = [];
+ for (let i = 0; i < array.length; i++) {
+ bigIntArray.push(BigInt(array[i]));
+ }
+ return bigIntArray;
+}
+
+describe('transpile and execution test', () => {
+ it ('should run the by-law script with expression node, logical operation node generated successfully', async () => {
+ const darc_contract_address = await deployDARC(DARC_VERSION.Latest, signer);
+
+ const code = `
+
+ const target1 = '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC';
+
+
+ const target2 = '0x90F79bf6EB2c4f870365E785982E1f101E93b906';
+
+
+ batch_create_token_classes(['token_0', 'token_1'],
+ [0,1],
+ [10,20],
+ [20,30]);
+
+
+ batch_mint_tokens([ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
+ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ [0, 1], [100,200]);
+
+ batch_add_and_enable_plugins(
+ [
+ // plugin 0: disable all operations
+ {
+ returnType: BigNumber.from(2), // no
+ level: BigNumber.from(3), // level 3
+ votingRuleIndex: BigNumber.from(0),
+ notes: "disable all program",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes: new TRUE() // always true
+ },
+ {
+ returnType: BigInt(4), // yes and skip sandbox
+ level: BigInt(103),
+ votingRuleIndex: BigInt(0),
+ notes: "allow operatorAddress == target1 | operatorAddress == target2",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:
+ or(
+ expression(3, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [[target1]],
+ BYTES: []
+ }),
+ expression(3, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [[target2]],
+ BYTES: []
+ })
+ )
+ }
+ ]
+ )
+ `;
+ await transpileAndRun(code, signer, darc_contract_address, DARC_VERSION.Latest);
+ // it should
+
+
+ const attached_local_darc_signer1 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer1,
+ version: DARC_VERSION.Latest,
+ });
+
+ const attached_local_darc_signer2 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer2,
+ version: DARC_VERSION.Latest,
+ });
+
+ // signer 1 and signer 2 should be able to run the program
+ let isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer1,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+
+ expect (isSuccess).to.equal(true);
+
+ isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer2,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+
+ expect (isSuccess).to.equal(true);
+
+ // and signer0 and programOperatorAddress should not be able to run the program
+ isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+
+ isSuccess = false;
+ }
+ expect (isSuccess).to.equal(false);
+ });
+});
\ No newline at end of file
diff --git a/darc-js/tests/operator-test.ts b/darc-js/tests/runtime-test/transpiler-operator-test.ts
similarity index 79%
rename from darc-js/tests/operator-test.ts
rename to darc-js/tests/runtime-test/transpiler-operator-test.ts
index 6d029ce0..7e8371ad 100644
--- a/darc-js/tests/operator-test.ts
+++ b/darc-js/tests/runtime-test/transpiler-operator-test.ts
@@ -1,14 +1,14 @@
import { expect } from 'chai';
import 'mocha';
-import { transpiler } from '../src/SDK/transpiler';
+import { transpile } from '../../src/SDK/transpiler';
+import { Node } from '@babel/types';
describe('Operator Test',
() => {
it('should return true', () => {
const code = `
- 'operator-overloading enabled';
let ConditionNode1 = new ConditionNode(ConditionNodeType.ExpressionNode, Expression.Operation_Equals, null, [1, 2]);
let ConditionNode2 = new ConditionNode(ConditionNodeType.ExpressionNode, Expression.Operation_Equals, null, [1, 2]);
@@ -16,7 +16,7 @@ describe('Operator Test',
`;
- const transpiled_result = transpiler(code);
+ const transpiled_result = transpile(code);
console.log(transpiled_result);
expect(true).to.equal(true);
diff --git a/darc-js/tests/sdk-test/basic-node-test.ts b/darc-js/tests/sdk-test/basic-node-test.ts
new file mode 100644
index 00000000..897f017f
--- /dev/null
+++ b/darc-js/tests/sdk-test/basic-node-test.ts
@@ -0,0 +1,152 @@
+import { expect } from 'chai';
+import {Node, AND, OR, NOT, EXPRESSION, TRUE, FALSE, NodeType} from '../../src/SDK/Node';
+
+import 'mocha';
+
+
+
+describe('darc.js SDK Node test',
+ () => {
+ it('should pass test case 1', async () => {
+
+ // create a new AND node with 10 expression
+ const andNode = new AND(
+ new EXPRESSION(7),
+ new EXPRESSION(1),
+ new EXPRESSION(2),
+ );
+
+ // create a new OR node with 10 expression
+ const orNode = new OR(
+ new EXPRESSION(3),
+ new EXPRESSION(4),
+ new EXPRESSION(5),
+ );
+
+ const AND_and_OR = new AND(
+ andNode,
+ orNode,
+ ); // this node will merge the andNode.
+
+ // serialize the AND_and_OR node
+ const serialized_AND_and_OR = AND_and_OR.generateConditionNodeList();
+
+ // 8 nodes in total
+ expect(serialized_AND_and_OR.length).to.equal(8);
+
+ // all the nodes should have the correct id sequentially
+ for (let i = 0; i < serialized_AND_and_OR.length; i++) {
+ expect(serialized_AND_and_OR[i].id).to.equal(BigInt(i));
+ }
+
+ // the first node should be AND node
+ expect(serialized_AND_and_OR[0].nodeType).to.equal(2);
+ expect(serialized_AND_and_OR[0].logicalOperator).to.equal(1);
+ });
+
+ it ('should pass test case 2', async () => {
+
+ const expressionNode = new EXPRESSION(7);
+ const result = expressionNode.generateConditionNodeList();
+ expect(result.length).to.equal(1);
+ expect(result[0].id).to.equal(BigInt(0));
+ });
+
+ it ('should pass test case 3', async () => {
+ const trueNode = new TRUE();
+ const result = trueNode.generateConditionNodeList();
+ expect(result.length).to.equal(1);
+ expect(result[0].id).to.equal(BigInt(0));
+ expect (result[0].nodeType).to.equal(3);
+
+ const falseNode = new FALSE();
+ const result1 = falseNode.generateConditionNodeList();
+ expect(result1.length).to.equal(1);
+ expect(result1[0].id).to.equal(BigInt(0));
+ expect (result1[0].nodeType).to.equal(4);
+
+ });
+
+ it ('should pass test case 4', async () => {
+
+ const ORNode = new OR(
+ new OR(
+ new EXPRESSION(1),
+ new EXPRESSION(2),
+ new EXPRESSION(3),
+ ),
+
+ new OR(
+ new EXPRESSION(4),
+ new EXPRESSION(5),
+ new EXPRESSION(6),
+ ),
+
+ new OR(
+ new EXPRESSION(7),
+ new EXPRESSION(8),
+ new EXPRESSION(9),
+ ),
+ );
+
+ // should be a big OR node with 9 expression nodes
+ const result = ORNode.generateConditionNodeList();
+ expect(result.length).to.equal(10);
+ expect(result[0].nodeType).to.equal(2);
+ expect(result[0].logicalOperator).to.equal(2);
+ for (let i = 1; i < result.length; i++) {
+ expect(result[i].nodeType).to.equal(1);
+ expect(result[i].conditionExpression).to.equal(i);
+ expect(result[i].logicalOperator).to.equal(0);
+ expect(result[i].childList.length).to.equal(0);
+ }
+
+ // child list should be correct
+ expect(result[0].childList.length).to.equal(9);
+ for (let i = 1; i < result.length; i++) {
+ expect(result[0].childList[i - 1]).to.equal(BigInt(i));
+ }
+
+ });
+
+ it ('should pass test case 5', async () => {
+ const ANDNode = new AND(
+ new AND(
+ new EXPRESSION(1),
+ new EXPRESSION(2),
+ new EXPRESSION(3),
+ ),
+
+ new AND(
+ new EXPRESSION(4),
+ new EXPRESSION(5),
+ new EXPRESSION(6),
+ ),
+
+ new AND(
+ new EXPRESSION(7),
+ new EXPRESSION(8),
+ new EXPRESSION(9),
+ ),
+ );
+
+ // should be a big OR node with 9 expression nodes
+ const result = ANDNode.generateConditionNodeList();
+ expect(result.length).to.equal(10);
+ expect(result[0].nodeType).to.equal(2);
+ expect(result[0].logicalOperator).to.equal(1);
+ for (let i = 1; i < result.length; i++) {
+ expect(result[i].nodeType).to.equal(1);
+ expect(result[i].conditionExpression).to.equal(i);
+ expect(result[i].logicalOperator).to.equal(0);
+ expect(result[i].childList.length).to.equal(0);
+ }
+
+ // child list should be correct
+ expect(result[0].childList.length).to.equal(9);
+ for (let i = 1; i < result.length; i++) {
+ expect(result[0].childList[i - 1]).to.equal(BigInt(i));
+ }
+ });
+
+});
\ No newline at end of file
diff --git a/darc-js/tests/sdk-test/sdk-node-generation-test.ts b/darc-js/tests/sdk-test/sdk-node-generation-test.ts
new file mode 100644
index 00000000..5716baca
--- /dev/null
+++ b/darc-js/tests/sdk-test/sdk-node-generation-test.ts
@@ -0,0 +1,247 @@
+import {executeOperationList} from "../../src/darcjs";
+import {run, deployDARC, DARC_VERSION} from '../../src/darcjs';
+import { ethers, BigNumber } from 'ethers';
+import * as DARC from '../../src/DARC/DARC';
+import 'mocha';
+import { expect } from 'chai';
+import { batch_add_and_enable_plugins, batch_mint_tokens, batch_create_token_classes } from "../../src/darcjs";
+import {or, node, and, expression} from "../../src/SDK/Node";
+
+
+const programOperatorAddress = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
+
+const target1 = '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC';
+
+
+const target2 = '0x90F79bf6EB2c4f870365E785982E1f101E93b906';
+
+const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545/');
+
+// initialize signer 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 with private key
+
+
+const signer = new ethers.Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', provider);
+
+const signer1 = new ethers.Wallet('0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a', provider);
+const signer2 = new ethers.Wallet('0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6', provider);
+
+const my_wallet_address = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
+
+
+function toBigIntArray(array: number[]): bigint[] {
+ let bigIntArray: bigint[] = [];
+ for (let i = 0; i < array.length; i++) {
+ bigIntArray.push(BigInt(array[i]));
+ }
+ return bigIntArray;
+}
+
+describe('SDK node generation test', () => {
+ it ('should run the program "add and enable plugin" with generated condition node list in SDK', async () => {
+ const darc_contract_address = await deployDARC(DARC_VERSION.Latest, signer);
+ await executeOperationList(
+ [
+
+ // operation 0
+ batch_create_token_classes(
+ ['token_0', 'token_1'],
+ toBigIntArray([0,1]),
+ toBigIntArray([10,20]),
+ toBigIntArray([20,30])
+ ),
+
+ // operation 1
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ ),
+
+ // operation 2
+ batch_add_and_enable_plugins(
+ [
+ // plugin 0: disable all operations
+ {
+ returnType: BigNumber.from(2), // no
+ level: BigNumber.from(3), // level 3
+ votingRuleIndex: BigNumber.from(0),
+ notes: "disable all program",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:[{
+ id: BigNumber.from(0),
+ nodeType: BigNumber.from(3), // expression
+ logicalOperator: BigNumber.from(0), // no operator
+ conditionExpression: BigNumber.from(0), // always true
+ childList: [],
+ param: {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ }]
+ },
+ {
+ returnType: BigInt(4), // yes and skip sandbox
+ level: BigInt(103),
+ votingRuleIndex: BigInt(0),
+ notes: "allow operatorAddress == target1 | operatorAddress == target2",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:
+ or(
+ expression(3, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [[target1]],
+ BYTES: []
+ }),
+ expression(3, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [[target2]],
+ BYTES: []
+ })
+ ).generateConditionNodeList()
+ }
+ ]
+ )
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ ).then(async ()=>{
+
+ const attached_local_darc_signer1 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer1,
+ version: DARC_VERSION.Latest,
+ });
+
+ const attached_local_darc_signer2 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer2,
+ version: DARC_VERSION.Latest,
+ });
+
+ // signer 1 and signer 2 should be able to run the program
+ let isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer1,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+
+ expect (isSuccess).to.equal(true);
+
+ isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer2,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+
+ expect (isSuccess).to.equal(true);
+
+ // and signer0 and programOperatorAddress should not be able to run the program
+ isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+
+ isSuccess = false;
+ }
+ expect (isSuccess).to.equal(false);
+ });
+ });
+
+ it ('should also generate condition node automatically, without manually calling the function generateConditionNodeList', async () => {
+ const darc_contract_address = await deployDARC(DARC_VERSION.Latest, signer);
+ await executeOperationList(
+ [
+
+ // operation 0
+ batch_create_token_classes(
+ ['token_0', 'token_1'],
+ toBigIntArray([0,1]),
+ toBigIntArray([10,20]),
+ toBigIntArray([20,30])
+ ),
+
+ // operation 1
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266",
+ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ ),
+
+ // operation 2
+ batch_add_and_enable_plugins(
+ [
+ {
+ returnType: BigInt(4), // yes and skip sandbox
+ level: BigInt(103),
+ votingRuleIndex: BigInt(0),
+ notes: "allow operatorAddress == target1 | operatorAddress == target2",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:
+ or(
+ expression(3, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [[target1]],
+ BYTES: []
+ }),
+ expression(3, {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [[target2]],
+ BYTES: []
+ })
+ )
+ }
+ ]
+ )
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ );
+ });
+});
\ No newline at end of file
diff --git a/darc-js/tests/sdk-test/sdk-test.ts b/darc-js/tests/sdk-test/sdk-test.ts
new file mode 100644
index 00000000..9bf6a1a4
--- /dev/null
+++ b/darc-js/tests/sdk-test/sdk-test.ts
@@ -0,0 +1,273 @@
+import {executeOperationList} from "../../src/darcjs";
+import {run, deployDARC, DARC_VERSION} from '../../src/darcjs';
+import { ethers, BigNumber } from 'ethers';
+import * as DARC from '../../src/DARC/DARC';
+import 'mocha';
+import { expect } from 'chai';
+import { batch_add_and_enable_plugins, batch_mint_tokens, batch_create_token_classes } from "../../src/darcjs";
+import {or, node, and, expression} from "../../src/SDK/Node";
+
+
+const programOperatorAddress = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
+
+const target1 = '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC';
+
+
+const target2 = '0x90F79bf6EB2c4f870365E785982E1f101E93b906';
+
+const provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545/');
+
+// initialize signer 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 with private key
+
+
+const signer = new ethers.Wallet('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80', provider);
+
+const signer1 = new ethers.Wallet('0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a', provider);
+const signer2 = new ethers.Wallet('0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6', provider);
+
+const my_wallet_address = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
+
+
+function toBigIntArray(array: number[]): bigint[] {
+ let bigIntArray: bigint[] = [];
+ for (let i = 0; i < array.length; i++) {
+ bigIntArray.push(BigInt(array[i]));
+ }
+ return bigIntArray;
+}
+
+describe('SDK execution test', () => {
+ it('should run the program in SDK', async () => {
+ const darc_contract_address = await deployDARC(DARC_VERSION.Latest, signer);
+ await executeOperationList(
+ [
+ batch_create_token_classes(
+ ['token_0', 'token_1'],
+ toBigIntArray([0,1]),
+ toBigIntArray([10,20]),
+ toBigIntArray([20,30])
+ ),
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ ),
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ ).then(async ()=>{
+
+ const attached_local_darc2 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer,
+ version: DARC_VERSION.Latest,
+ });
+
+
+ // read the token info and make sure that address 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 has 100 token_0 and 200 token_1
+ const token_info = await attached_local_darc2.getTokenInfo(BigInt(0));
+ const token_info1 = await attached_local_darc2.getTokenInfo(BigInt(1));
+ // check the token info
+ expect(token_info.votingWeight.toString()).to.equal("10");
+ expect(token_info.dividendWeight.toString()).to.equal("20");
+ expect(token_info.tokenInfo).to.equal("token_0");
+ expect(token_info.totalSupply.toString()).to.equal("100");
+ // check the token info 1
+ expect(token_info1.votingWeight.toString()).to.equal("20");
+ expect(token_info1.dividendWeight.toString()).to.equal("30");
+ expect(token_info1.tokenInfo).to.equal("token_1");
+ expect(token_info1.totalSupply.toString()).to.equal("200");
+
+ // check the token owner balance
+ const token_owner_balance = await attached_local_darc2.getTokenOwnerBalance(BigInt(0),my_wallet_address);
+ expect(token_owner_balance.toString()).to.equal("100");
+ const token_owner_balance1 = await attached_local_darc2.getTokenOwnerBalance(BigInt(1),my_wallet_address);
+ expect(token_owner_balance1.toString()).to.equal("200");
+ });
+
+ });
+
+
+ it('should run the program "add and enable plugin" in SDK', async () => {
+ const darc_contract_address = await deployDARC(DARC_VERSION.Latest, signer);
+ await executeOperationList(
+ [
+
+ // operation 0
+ batch_create_token_classes(
+ ['token_0', 'token_1'],
+ toBigIntArray([0,1]),
+ toBigIntArray([10,20]),
+ toBigIntArray([20,30])
+ ),
+
+ // operation 1
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ ),
+
+ // operation 2
+ batch_add_and_enable_plugins(
+ [
+ // plugin 0: disable all operations
+ {
+ returnType: BigNumber.from(2), // no
+ level: BigNumber.from(3), // level 3
+ votingRuleIndex: BigNumber.from(0),
+ notes: "disable all program",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:[{
+ id: BigNumber.from(0),
+ nodeType: BigNumber.from(3), // expression
+ logicalOperator: BigNumber.from(0), // no operator
+ conditionExpression: BigNumber.from(0), // always true
+ childList: [],
+ param: {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ }]
+ },
+ {
+ returnType: BigInt(4), // yes and skip sandbox
+ level: BigInt(103),
+ votingRuleIndex: BigInt(0),
+ notes: "allow operatorAddress == target1 | operatorAddress == target2",
+ bIsEnabled: true,
+ bIsBeforeOperation: true,
+ conditionNodes:[
+ // node 0: boolean operator OR
+ {
+ id: BigNumber.from(0),
+ nodeType: BigNumber.from(2), // logical operator
+ logicalOperator: BigNumber.from(2), // OR
+ conditionExpression: 0, // no expression
+ childList: [BigNumber.from(1), BigNumber.from(2)],
+ param: {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: []
+ }
+ },
+
+ // node 1: operatorAddress == target1
+ {
+ id : BigNumber.from(1),
+ nodeType: BigNumber.from(1), // expression
+ logicalOperator: BigNumber.from(0), // no operator
+ conditionExpression: BigNumber.from(3), // OPERATOR_ADDRESS_EQUALS
+ childList: [],
+ param: {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [[target1]],
+ BYTES: []
+ }
+ },
+
+ // node 2: operatorAddress == target2
+ {
+ id : BigNumber.from(2),
+ nodeType: BigNumber.from(1), // expression
+ logicalOperator: BigNumber.from(0), // no operator
+ conditionExpression: BigNumber.from(3), // OPERATOR_ADDRESS_EQUALS
+ childList: [],
+ param: {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [[target2]],
+ BYTES: []
+ }
+ }
+ ]
+ }
+ ]
+ )
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ ).then(async ()=>{
+
+ const attached_local_darc_signer1 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer1,
+ version: DARC_VERSION.Latest,
+ });
+
+ const attached_local_darc_signer2 = new DARC.DARC({
+ address: darc_contract_address,
+ wallet: signer2,
+ version: DARC_VERSION.Latest,
+ });
+
+ // signer 1 and signer 2 should be able to run the program
+ let isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer1,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+
+ expect (isSuccess).to.equal(true);
+
+ isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer2,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+
+ expect (isSuccess).to.equal(true);
+
+ // and signer0 and programOperatorAddress should not be able to run the program
+ isSuccess = true;
+ try{
+ await executeOperationList([
+ batch_mint_tokens(
+ [ "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"],
+ toBigIntArray([0, 1]),
+ toBigIntArray([100,200])
+ )
+ ],
+ signer,
+ darc_contract_address,
+ "test program"
+ );
+ }
+ catch(e){
+ isSuccess = false;
+ }
+ expect (isSuccess).to.equal(false);
+ });
+ });
+});
\ No newline at end of file
diff --git a/darc-protocol/contracts/protocol/MachineState.sol b/darc-protocol/contracts/protocol/MachineState.sol
index d730ba3e..989e2086 100644
--- a/darc-protocol/contracts/protocol/MachineState.sol
+++ b/darc-protocol/contracts/protocol/MachineState.sol
@@ -102,7 +102,7 @@ struct MachineState {
* The balance sheet and information of each token class
* TODO: make the length of the tokenList dynamic (not fixed to 10000)
*/
- Token[100] tokenList;
+ Token[1000] tokenList;
/**
* The member list and internal role index number of each token owner,
diff --git a/darc-protocol/contracts/protocol/MachineStateManager.sol b/darc-protocol/contracts/protocol/MachineStateManager.sol
index 8493026a..58c68d32 100644
--- a/darc-protocol/contracts/protocol/MachineStateManager.sol
+++ b/darc-protocol/contracts/protocol/MachineStateManager.sol
@@ -124,7 +124,6 @@ contract MachineStateManager {
0,
"",
true,
- true,
true
));
@@ -154,7 +153,6 @@ contract MachineStateManager {
0,
"",
true,
- true,
false
));
diff --git a/darc-protocol/contracts/protocol/Opcodes.sol b/darc-protocol/contracts/protocol/Opcodes.sol
index 99a9cc1b..fbb40417 100644
--- a/darc-protocol/contracts/protocol/Opcodes.sol
+++ b/darc-protocol/contracts/protocol/Opcodes.sol
@@ -83,7 +83,7 @@ enum EnumOpcode {
*
* ID:7
*/
- BATCH_ADD_MEMBERSHIP,
+ BATCH_ADD_MEMBERSHIPS,
/**
* @notice Batch Suspend Member Operation
@@ -91,7 +91,7 @@ enum EnumOpcode {
*
* ID:8
*/
- BATCH_SUSPEND_MEMBERSHIP,
+ BATCH_SUSPEND_MEMBERSHIPS,
/**
* @notice Batch Resume Member Operation
@@ -99,7 +99,7 @@ enum EnumOpcode {
*
* ID:9
*/
- BATCH_RESUME_MEMBERSHIP,
+ BATCH_RESUME_MEMBERSHIPS,
/**
* @notice Batch Change Member Role Operation
@@ -278,11 +278,11 @@ enum EnumOpcode {
BATCH_BURN_TOKENS_AND_REFUND,
/**
- * @notice Add storage IPFS hash to the storage list permanently
- * @paran STRING_ARRAY[0][0] address: the address to set approval for all cash withdraw operations
+ * @notice Add a string (IPFS,JSON,raw text) to the storage list permanently
+ * @paran STRING_ARRAY[0][0] text: the string text to add to the storage list
* ID:31
*/
- ADD_STORAGE_IPFS_HASH,
+ ADD_STORAGE_STRING,
/**
diff --git a/darc-protocol/contracts/protocol/Plugin.sol b/darc-protocol/contracts/protocol/Plugin.sol
index 75d7c43f..7494ecae 100644
--- a/darc-protocol/contracts/protocol/Plugin.sol
+++ b/darc-protocol/contracts/protocol/Plugin.sol
@@ -257,11 +257,6 @@ struct Plugin {
*/
bool bIsEnabled;
- /**
- * the boolean that indicates whether the plugin is deleted or not
- */
- bool bIsInitialized;
-
/**
* the boolean that indicates whether the plugin is a before operation
* plugin or after operation plugin
diff --git a/darc-protocol/contracts/protocol/Plugin/ConditionExpressionFactory.sol b/darc-protocol/contracts/protocol/Plugin/ConditionExpressionFactory.sol
index 0e8547f3..e36eea2f 100644
--- a/darc-protocol/contracts/protocol/Plugin/ConditionExpressionFactory.sol
+++ b/darc-protocol/contracts/protocol/Plugin/ConditionExpressionFactory.sol
@@ -16,6 +16,7 @@ import "./Condition_TokenAndCash.sol";
import "./Condition_CreateTokenClass.sol";
import "./Condition_Program.sol";
import "./Condition_OperationLog.sol";
+import "./Condition_External.sol";
/**
@@ -26,7 +27,8 @@ import "./Condition_OperationLog.sol";
contract ConditionExpressionFactory is
Condition_Operator, Condition_MachineState, Condition_Operation, Condition_BatchOp, Condition_PluginAndVoting,
Condition_MembershipOp, Condition_Withdrawable, Condition_TokenAndCash,
- Condition_CreateTokenClass, Condition_Program, Condition_OperationLog
+ Condition_CreateTokenClass, Condition_Program, Condition_OperationLog,
+ Condition_External
{
/**
@@ -55,6 +57,8 @@ contract ConditionExpressionFactory is
if (exp >=151 && exp <= 180) { return operationExpressionCheck( operation, param, exp); }
+ if (exp >= 181 && exp <= 210) { return externalExpressionCheck(param, exp); }
+
if (exp >= 211 && exp <= 300) { return batchOpExpressionCheck(bIsBeforeOperation, operation, param, exp); }
if (exp >= 301 && exp < 400 ) { return pluginAndVotingOpExpressionCheck(bIsBeforeOperation, operation, param, exp); }
diff --git a/darc-protocol/contracts/protocol/Plugin/Condition_BatchOp.sol b/darc-protocol/contracts/protocol/Plugin/Condition_BatchOp.sol
index 46a0a330..8cd398a3 100644
--- a/darc-protocol/contracts/protocol/Plugin/Condition_BatchOp.sol
+++ b/darc-protocol/contracts/protocol/Plugin/Condition_BatchOp.sol
@@ -1424,9 +1424,9 @@ contract Condition_BatchOp is MachineStateManager {
if (op.opcode == EnumOpcode.BATCH_TRANSFER_TOKENS_FROM_TO) return true;
if (op.opcode == EnumOpcode.BATCH_BURN_TOKENS) return true;
if (op.opcode == EnumOpcode.BATCH_BURN_TOKENS_FROM) return true;
- if (op.opcode == EnumOpcode.BATCH_ADD_MEMBERSHIP) return true;
- if (op.opcode == EnumOpcode.BATCH_SUSPEND_MEMBERSHIP) return true;
- if (op.opcode == EnumOpcode.BATCH_RESUME_MEMBERSHIP) return true;
+ if (op.opcode == EnumOpcode.BATCH_ADD_MEMBERSHIPS) return true;
+ if (op.opcode == EnumOpcode.BATCH_SUSPEND_MEMBERSHIPS) return true;
+ if (op.opcode == EnumOpcode.BATCH_RESUME_MEMBERSHIPS) return true;
if (op.opcode == EnumOpcode.BATCH_CHANGE_MEMBER_ROLES) return true;
if (op.opcode == EnumOpcode.BATCH_CHANGE_MEMBER_NAMES) return true;
if (op.opcode == EnumOpcode.BATCH_ADD_PLUGINS) return true;
diff --git a/darc-protocol/contracts/protocol/Plugin/Condition_External.sol b/darc-protocol/contracts/protocol/Plugin/Condition_External.sol
new file mode 100644
index 00000000..0d031739
--- /dev/null
+++ b/darc-protocol/contracts/protocol/Plugin/Condition_External.sol
@@ -0,0 +1,79 @@
+// SPDX-License-Identifier: BUSL-1.1
+pragma solidity ^0.8.19;
+/**
+ * @title Condition of Oracle values
+ * @author DARC Team
+ * @notice All the condition expression functions related to Operator
+ */
+
+
+import "../MachineState.sol";
+import "../MachineStateManager.sol";
+import "../Utilities/StringUtils.sol";
+import "../Utilities/OpcodeMap.sol";
+import "../Plugin.sol";
+import "../Utilities/ExternalValueReader.sol";
+
+contract Condition_External is MachineStateManager {
+ /**
+ * The function to check the external(oracle) related condition expression
+ * @param param The parameter list of the condition expression
+ * @param id The id of the condition expression
+ */
+ function externalExpressionCheck(NodeParam memory param, uint256 id) internal view returns (bool) {
+ if (id== 181) return ID_181_EXTERNAL_CALL_UINT256_RESULT_EQUALS(param);
+ if (id== 182) return ID_182_EXTERNAL_CALL_UINT256_RESULT_GREATER_THAN(param);
+ if (id== 183) return ID_183_EXTERNAL_CALL_UINT256_RESULT_LESS_THAN(param);
+ if (id== 184) return ID_184_EXTERNAL_CALL_UINT256_RESULT_IN_RANGE(param);
+ if (id== 185) return ID_185_EXTERNAL_CALL_STRING_RESULT_EQUALS(param);
+ return false;
+ }
+
+ function ID_181_EXTERNAL_CALL_UINT256_RESULT_EQUALS(NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_181: The ADDRESS_2DARRAY length is not 1");
+ require(param.ADDRESS_2DARRAY[0].length == 1, "CE ID_181: The ADDRESS_2DARRAY[0] length is not 1");
+ (bool success, uint256 value) = ExternalValueReader.tryReadUINT256(param.ADDRESS_2DARRAY[0][0], param.BYTES);
+ if (!success) { return false; }
+ if (value == param.UINT256_2DARRAY[0][0]) { return true; }
+ return false;
+ }
+
+ function ID_182_EXTERNAL_CALL_UINT256_RESULT_GREATER_THAN(NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_182: The ADDRESS_2DARRAY length is not 1");
+ require(param.ADDRESS_2DARRAY[0].length == 1, "CE ID_182: The ADDRESS_2DARRAY[0] length is not 1");
+ (bool success, uint256 value) = ExternalValueReader.tryReadUINT256(param.ADDRESS_2DARRAY[0][0], param.BYTES);
+ if (!success) { return false; }
+ if (value > param.UINT256_2DARRAY[0][0]) { return true; }
+ return false;
+ }
+
+ function ID_183_EXTERNAL_CALL_UINT256_RESULT_LESS_THAN(NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_183: The ADDRESS_2DARRAY length is not 1");
+ require(param.ADDRESS_2DARRAY[0].length == 1, "CE ID_183: The ADDRESS_2DARRAY[0] length is not 1");
+
+ (bool success, uint256 value) = ExternalValueReader.tryReadUINT256(param.ADDRESS_2DARRAY[0][0], param.BYTES);
+ if (!success) { return false; }
+ if (value < param.UINT256_2DARRAY[0][0]) { return true; }
+ return false;
+ }
+
+ function ID_184_EXTERNAL_CALL_UINT256_RESULT_IN_RANGE(NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_184: The ADDRESS_2DARRAY length is not 1");
+ require(param.ADDRESS_2DARRAY[0].length == 1, "CE ID_184: The ADDRESS_2DARRAY[0] length is not 1");
+
+ (bool success, uint256 value) = ExternalValueReader.tryReadUINT256(param.ADDRESS_2DARRAY[0][0], param.BYTES);
+ if (!success) { return false; }
+ if (value >= param.UINT256_2DARRAY[0][0] && value <= param.UINT256_2DARRAY[0][1]) { return true; }
+ return false;
+ }
+
+ function ID_185_EXTERNAL_CALL_STRING_RESULT_EQUALS(NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_185: The ADDRESS_2DARRAY length is not 1");
+ require(param.ADDRESS_2DARRAY[0].length == 1, "CE ID_185: The ADDRESS_2DARRAY[0] length is not 1");
+ require(param.STRING_ARRAY.length == 1, "CE ID_185: The STRING_2DARRAY length is not 1");
+ (bool success, string memory value) = ExternalValueReader.tryReadString(param.ADDRESS_2DARRAY[0][0], param.BYTES);
+ if (!success) { return false; }
+ if (keccak256(abi.encodePacked(value)) == keccak256(abi.encodePacked(param.STRING_ARRAY[0]))) { return true; }
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/darc-protocol/contracts/protocol/Plugin/Condition_MachineState.sol b/darc-protocol/contracts/protocol/Plugin/Condition_MachineState.sol
index 2a163f76..1745b066 100644
--- a/darc-protocol/contracts/protocol/Plugin/Condition_MachineState.sol
+++ b/darc-protocol/contracts/protocol/Plugin/Condition_MachineState.sol
@@ -12,6 +12,7 @@ import "../MachineStateManager.sol";
import "../Utilities/StringUtils.sol";
import "../Utilities/OpcodeMap.sol";
import "../Plugin.sol";
+import "@openzeppelin/contracts-upgradeable/utils/math/SafeMathUpgradeable.sol";
//import "./Conditions";
contract Condition_MachineState is MachineStateManager {
@@ -53,11 +54,11 @@ contract Condition_MachineState is MachineStateManager {
else if (id==79) return ID_79_TOTAL_DIVIDEND_WEIGHT_LESS_THAN(bIsBeforeOperation, param);
else if (id==80) return ID_80_TOTAL_DIVIDEND_WEIGHT_IN_RANGE(bIsBeforeOperation, param);
- //todo: implement and uncomment the following functions
- // else if (id==81) return ID_81_TOTAL_CASH_GREATER_THAN(bIsBeforeOperation, param);
- // else if (id==82) return ID_82_TOTAL_CASH_LESS_THAN(bIsBeforeOperation, param);
- // else if (id==83) return ID_83_TOTAL_CASH_IN_RANGE(bIsBeforeOperation, param);
- // else if (id==84) return ID_84_TOTAL_CASH_EQUALS(bIsBeforeOperation, param);
+
+ else if (id==81) return ID_81_TOTAL_CASH_GREATER_THAN(param);
+ else if (id==82) return ID_82_TOTAL_CASH_LESS_THAN(param);
+ else if (id==83) return ID_83_TOTAL_CASH_IN_RANGE(param);
+ else if (id==84) return ID_84_TOTAL_CASH_EQUALS(param);
else if (id==85) return ID_85_TOKEN_IN_LIST_VOTING_WEIGHT_GREATER_THAN(bIsBeforeOperation, param);
else if (id==86) return ID_86_TOKEN_IN_LIST_VOTING_WEIGHT_LESS_THAN(bIsBeforeOperation, param);
@@ -69,6 +70,13 @@ contract Condition_MachineState is MachineStateManager {
else if (id==92) return ID_92_TOKEN_IN_LIST_AMOUNT_LESS_THAN(bIsBeforeOperation, param);
else if (id==93) return ID_93_TOKEN_IN_LIST_AMOUNT_IN_RANGE(bIsBeforeOperation, param);
else if (id==94) return ID_94_TOKEN_IN_LIST_AMOUNT_EQUALS(bIsBeforeOperation, param);
+
+ else if (id==95) return ID_95_ADDRESS_VOTING_WEIGHT_PERCENTAGE_GREATER_THAN(bIsBeforeOperation, param);
+ else if (id==96) return ID_96_ADDRESS_VOTING_WEIGHT_PERCENTAGE_LESS_THAN(bIsBeforeOperation, param);
+ else if (id==97) return ID_97_ADDRESS_VOTING_WEIGHT_PERCENTAGE_IN_RANGE(bIsBeforeOperation, param);
+ else if (id==98) return ID_98_ADDRESS_DIVIDEND_WEIGHT_PERCENTAGE_GREATER_THAN(bIsBeforeOperation, param);
+ else if (id==99) return ID_99_ADDRESS_DIVIDEND_WEIGHT_PERCENTAGE_LESS_THAN(bIsBeforeOperation, param);
+ else if (id==100) return ID_100_ADDRESS_DIVIDEND_WEIGHT_PERCENTAGE_IN_RANGE(bIsBeforeOperation, param);
else return false;
}
@@ -349,21 +357,28 @@ contract Condition_MachineState is MachineStateManager {
}
- function ID_81_TOTAL_CASH_GREATER_THAN(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
- // todo: need to implement
- return false;
+ function ID_81_TOTAL_CASH_GREATER_THAN(NodeParam memory param) private view returns (bool) {
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_81: UINT256_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY[0].length == 1, "CE ID_81: UINT256_2DARRAY[0] must have 1 element");
+ return address(this).balance > param.UINT256_2DARRAY[0][0];
}
- function ID_82_TOTAL_CASH_LESS_THAN(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
- // todo: need to implement
+ function ID_82_TOTAL_CASH_LESS_THAN(NodeParam memory param) private view returns (bool) {
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_82: UINT256_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY[0].length == 1, "CE ID_82: UINT256_2DARRAY[0] must have 1 element");
+ return address(this).balance < param.UINT256_2DARRAY[0][0];
}
- function ID_83_TOTAL_CASH_IN_RANGE(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
- // todo: need to implement
+ function ID_83_TOTAL_CASH_IN_RANGE( NodeParam memory param) private view returns (bool) {
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_83: UINT256_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY[0].length == 2, "CE ID_83: UINT256_2DARRAY[0] must have 2 elements");
+ return address(this).balance >= param.UINT256_2DARRAY[0][0] && address(this).balance <= param.UINT256_2DARRAY[0][1];
}
- function ID_84_TOTAL_CASH_EQUALS(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
- // todo: need to implement
+ function ID_84_TOTAL_CASH_EQUALS(NodeParam memory param) private view returns (bool) {
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_84: UINT256_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY[0].length == 1, "CE ID_84: UINT256_2DARRAY[0] must have 1 element");
+ return address(this).balance == param.UINT256_2DARRAY[0][0];
}
function ID_85_TOKEN_IN_LIST_VOTING_WEIGHT_GREATER_THAN(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
@@ -536,6 +551,72 @@ contract Condition_MachineState is MachineStateManager {
return totalAmount == param.UINT256_2DARRAY[1][0];
}
+ function ID_95_ADDRESS_VOTING_WEIGHT_PERCENTAGE_GREATER_THAN(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_95: ADDRESS_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_95: UINT256_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY[0].length == 1, "CE ID_95: UINT256_2DARRAY[0] must have 1 element");
+ if (bIsBeforeOp) {
+ return getAddressTotalVotingWeightPercentage(false, param.ADDRESS_2DARRAY[0][0]) > param.UINT256_2DARRAY[0][0];
+ } else {
+ return getAddressTotalVotingWeightPercentage(true, param.ADDRESS_2DARRAY[0][0]) > param.UINT256_2DARRAY[0][0];
+ }
+ }
+
+ function ID_96_ADDRESS_VOTING_WEIGHT_PERCENTAGE_LESS_THAN(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_96: ADDRESS_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_96: UINT256_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY[0].length == 1, "CE ID_96: UINT256_2DARRAY[0] must have 1 element");
+ if (bIsBeforeOp) {
+ return getAddressTotalVotingWeightPercentage(false, param.ADDRESS_2DARRAY[0][0]) < param.UINT256_2DARRAY[0][0];
+ } else {
+ return getAddressTotalVotingWeightPercentage(true, param.ADDRESS_2DARRAY[0][0]) < param.UINT256_2DARRAY[0][0];
+ }
+ }
+
+ function ID_97_ADDRESS_VOTING_WEIGHT_PERCENTAGE_IN_RANGE(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_97: ADDRESS_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_97: UINT256_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY[0].length == 2, "CE ID_97: UINT256_2DARRAY[0] must have 2 elements");
+ if (bIsBeforeOp) {
+ return getAddressTotalVotingWeightPercentage(false, param.ADDRESS_2DARRAY[0][0]) >= param.UINT256_2DARRAY[0][0] && getAddressTotalVotingWeightPercentage(false, param.ADDRESS_2DARRAY[0][0]) <= param.UINT256_2DARRAY[0][1];
+ } else {
+ return getAddressTotalVotingWeightPercentage(true, param.ADDRESS_2DARRAY[0][0]) >= param.UINT256_2DARRAY[0][0] && getAddressTotalVotingWeightPercentage(true, param.ADDRESS_2DARRAY[0][0]) <= param.UINT256_2DARRAY[0][1];
+ }
+ }
+
+ function ID_98_ADDRESS_DIVIDEND_WEIGHT_PERCENTAGE_GREATER_THAN(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_98: ADDRESS_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_98: UINT256_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY[0].length == 1, "CE ID_98: UINT256_2DARRAY[0] must have 1 element");
+ if (bIsBeforeOp) {
+ return getAddressTotalDividendWeightPercentage(false, param.ADDRESS_2DARRAY[0][0]) > param.UINT256_2DARRAY[0][0];
+ } else {
+ return getAddressTotalDividendWeightPercentage(true, param.ADDRESS_2DARRAY[0][0]) > param.UINT256_2DARRAY[0][0];
+ }
+ }
+
+ function ID_99_ADDRESS_DIVIDEND_WEIGHT_PERCENTAGE_LESS_THAN(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_99: ADDRESS_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_99: UINT256_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY[0].length == 1, "CE ID_99: UINT256_2DARRAY[0] must have 1 element");
+ if (bIsBeforeOp) {
+ return getAddressTotalDividendWeightPercentage(false, param.ADDRESS_2DARRAY[0][0]) < param.UINT256_2DARRAY[0][0];
+ } else {
+ return getAddressTotalDividendWeightPercentage(true, param.ADDRESS_2DARRAY[0][0]) < param.UINT256_2DARRAY[0][0];
+ }
+ }
+
+ function ID_100_ADDRESS_DIVIDEND_WEIGHT_PERCENTAGE_IN_RANGE(bool bIsBeforeOp, NodeParam memory param) private view returns (bool) {
+ require(param.ADDRESS_2DARRAY.length == 1, "CE ID_100: ADDRESS_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_100: UINT256_2DARRAY must have 1 element");
+ require(param.UINT256_2DARRAY[0].length == 2, "CE ID_100: UINT256_2DARRAY[0] must have 2 elements");
+ if (bIsBeforeOp) {
+ return getAddressTotalDividendWeightPercentage(false, param.ADDRESS_2DARRAY[0][0]) >= param.UINT256_2DARRAY[0][0] && getAddressTotalDividendWeightPercentage(false, param.ADDRESS_2DARRAY[0][0]) <= param.UINT256_2DARRAY[0][1];
+ } else {
+ return getAddressTotalDividendWeightPercentage(true, param.ADDRESS_2DARRAY[0][0]) >= param.UINT256_2DARRAY[0][0] && getAddressTotalDividendWeightPercentage(true, param.ADDRESS_2DARRAY[0][0]) <= param.UINT256_2DARRAY[0][1];
+ }
+ }
+
//below are the helper functions
function getDateTime(uint256 timestamp) public pure returns (uint256 year, uint256 month, uint256 day, uint256 hour, uint256 minute, uint256 second) {
@@ -577,4 +658,58 @@ contract Condition_MachineState is MachineStateManager {
return (_year, _month + 1, _day, _hour, _minute, _second);
}
+
+ /**
+ * @dev Get the total voting weight for a token class
+ */
+ function getAddressTotalVotingWeightPercentage(bool bIsBeforeOp, address addr) private view returns (uint256) {
+ if (bIsBeforeOp) {
+ bool bIsValid = false;
+ uint256 result = 0;
+
+ // multiply by 100 to get percentage
+ (bIsValid, result) = SafeMathUpgradeable.tryMul(addressTotalVotingWeight(false, addr), 100);
+ require(bIsValid, "CE getAddressTotalVotingWeightPercentage: SafeMathUpgradeable multiplication error");
+ (bIsValid, result) = SafeMathUpgradeable.tryDiv(result, totalVotingWeights(false));
+ require(bIsValid, "CE getAddressTotalVotingWeightPercentage: SafeMathUpgradeable division error");
+ return result;
+ } else {
+ bool bIsValid = false;
+ uint256 result = 0;
+
+ // multiply by 100 to get percentage
+ (bIsValid, result) = SafeMathUpgradeable.tryMul(addressTotalVotingWeight(true, addr), 100);
+ require(bIsValid, "CE getAddressTotalVotingWeightPercentage: SafeMathUpgradeable multiplication error");
+ (bIsValid, result) = SafeMathUpgradeable.tryDiv(result, totalVotingWeights(true));
+ require(bIsValid, "CE getAddressTotalVotingWeightPercentage: SafeMathUpgradeable division error");
+ return result;
+ }
+ }
+
+ /**
+ * @dev Get the total dividend weight for a token class
+ */
+ function getAddressTotalDividendWeightPercentage(bool bIsBeforeOp, address addr) private view returns (uint256) {
+ if (bIsBeforeOp) {
+ bool bIsValid = false;
+ uint256 result = 0;
+
+ // multiply by 100 to get percentage
+ (bIsValid, result) = SafeMathUpgradeable.tryMul(addressTotalDividendWeight(false, addr), 100);
+ require(bIsValid, "CE getAddressTotalDividendWeightPercentage: SafeMathUpgradeable multiplication error");
+ (bIsValid, result) = SafeMathUpgradeable.tryDiv(result, totalDividendWeights(false));
+ require(bIsValid, "CE getAddressTotalDividendWeightPercentage: SafeMathUpgradeable division error");
+ return result;
+ } else {
+ bool bIsValid = false;
+ uint256 result = 0;
+
+ // multiply by 100 to get percentage
+ (bIsValid, result) = SafeMathUpgradeable.tryMul(addressTotalDividendWeight(true, addr), 100);
+ require(bIsValid, "CE getAddressTotalDividendWeightPercentage: SafeMathUpgradeable multiplication error");
+ (bIsValid, result) = SafeMathUpgradeable.tryDiv(result, totalDividendWeights(true));
+ require(bIsValid, "CE getAddressTotalDividendWeightPercentage: SafeMathUpgradeable division error");
+ return result;
+ }
+ }
}
\ No newline at end of file
diff --git a/darc-protocol/contracts/protocol/Plugin/Condition_TokenAndCash.sol b/darc-protocol/contracts/protocol/Plugin/Condition_TokenAndCash.sol
index 4b3b745f..73025d90 100644
--- a/darc-protocol/contracts/protocol/Plugin/Condition_TokenAndCash.sol
+++ b/darc-protocol/contracts/protocol/Plugin/Condition_TokenAndCash.sol
@@ -12,6 +12,7 @@ import "../MachineStateManager.sol";
import "../Utilities/StringUtils.sol";
import "../Utilities/OpcodeMap.sol";
import "../Plugin.sol";
+import "../Utilities/ExternalValueReader.sol";
contract Condition_TokenAndCash is MachineStateManager {
/**
@@ -20,11 +21,15 @@ contract Condition_TokenAndCash is MachineStateManager {
* @param param The parameter list of the condition expression
* @param id The id of the condition expression
*/
- function tokenAndCashExpressionCheck(Operation memory op, NodeParam memory param, uint256 id) internal pure returns (bool) {
+ function tokenAndCashExpressionCheck(Operation memory op, NodeParam memory param, uint256 id) internal view returns (bool) {
if (id== 461) return ID_461_TOKEN_X_OP_ANY_PRICE_GREATER_THAN(op, param);
if (id== 462) return ID_462_TOKEN_X_OP_ANY_PRICE_LESS_THAN(op, param);
if (id== 463) return ID_463_TOKEN_X_OP_ANY_PRICE_IN_RANGE(op, param);
if (id== 464) return ID_464_TOKEN_X_OP_ANY_PRICE_EQUALS(op, param);
+ if (id== 465) return ID_465_TOKEN_X_OP_ANY_PRICE_GREATER_THAN_EXTERNAL_VALUE_UINT256(op, param);
+ if (id== 466) return ID_466_TOKEN_X_OP_ANY_PRICE_LESS_THAN_EXTERNAL_VALUE_UINT256(op, param);
+ if (id== 467) return ID_467_TOKEN_X_OP_ANY_PRICE_EQUALS_EXTERNAL_VALUE_UINT256(op, param);
+
return false;
}
@@ -76,6 +81,64 @@ contract Condition_TokenAndCash is MachineStateManager {
return false;
}
+ function ID_465_TOKEN_X_OP_ANY_PRICE_GREATER_THAN_EXTERNAL_VALUE_UINT256(Operation memory op, NodeParam memory param) private view returns (bool) {
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_465: The UINT256_2DARRAY length is not 1");
+ require(param.UINT256_2DARRAY[0].length == 2, "CE ID_465: The UINT256_2DARRAY[0] length is not 1");
+ if (bIsTokenOperationWithCash(op) == false) return false;
+
+
+ (uint256[] memory tokenClassList, , uint256[] memory priceList) = getTokenClassAmountPriceList(op);
+ require(tokenClassList.length == priceList.length, "CE ID_465: The token class list length is not equal to price list length");
+
+ // try to get external value
+ (bool success, uint256 externalValue) = ExternalValueReader.tryReadUINT256(op.param.ADDRESS_2DARRAY[0][0], op.param.BYTES);
+
+ if (success == false) return false;
+
+ for (uint256 i = 0; i < tokenClassList.length; i++) {
+ if (tokenClassList[i] == param.UINT256_2DARRAY[0][0] && priceList[i] > externalValue) { return true; }
+ }
+ return false;
+ }
+
+ function ID_466_TOKEN_X_OP_ANY_PRICE_LESS_THAN_EXTERNAL_VALUE_UINT256(Operation memory op, NodeParam memory param) private view returns (bool) {
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_466: The UINT256_2DARRAY length is not 1");
+ require(param.UINT256_2DARRAY[0].length == 2, "CE ID_466: The UINT256_2DARRAY[0] length is not 1");
+ if (bIsTokenOperationWithCash(op) == false) return false;
+
+ (uint256[] memory tokenClassList, , uint256[] memory priceList) = getTokenClassAmountPriceList(op);
+ require(tokenClassList.length == priceList.length, "CE ID_466: The token class list length is not equal to price list length");
+
+ // try to get external value
+ (bool success, uint256 externalValue) = ExternalValueReader.tryReadUINT256(op.param.ADDRESS_2DARRAY[0][0], op.param.BYTES);
+
+ if (success == false) return false;
+
+ for (uint256 i = 0; i < tokenClassList.length; i++) {
+ if (tokenClassList[i] == param.UINT256_2DARRAY[0][0] && priceList[i] < externalValue) { return true; }
+ }
+ return false;
+ }
+
+ function ID_467_TOKEN_X_OP_ANY_PRICE_EQUALS_EXTERNAL_VALUE_UINT256(Operation memory op, NodeParam memory param) private view returns (bool) {
+ require(param.UINT256_2DARRAY.length == 1, "CE ID_467: The UINT256_2DARRAY length is not 1");
+ require(param.UINT256_2DARRAY[0].length == 2, "CE ID_467: The UINT256_2DARRAY[0] length is not 1");
+ if (bIsTokenOperationWithCash(op) == false) return false;
+
+ (uint256[] memory tokenClassList, , uint256[] memory priceList) = getTokenClassAmountPriceList(op);
+ require(tokenClassList.length == priceList.length, "CE ID_467: The token class list length is not equal to price list length");
+
+ // try to get external value
+ (bool success, uint256 externalValue) = ExternalValueReader.tryReadUINT256(op.param.ADDRESS_2DARRAY[0][0], op.param.BYTES);
+
+ if (success == false) return false;
+
+ for (uint256 i = 0; i < tokenClassList.length; i++) {
+ if (tokenClassList[i] == param.UINT256_2DARRAY[0][0] && priceList[i] == externalValue) { return true; }
+ }
+ return false;
+ }
+
// -------------------------------- below are helper functions ----------------------------
diff --git a/darc-protocol/contracts/protocol/Plugin/PluginFactory.sol b/darc-protocol/contracts/protocol/Plugin/PluginFactory.sol
index c7fbccb2..f61151e0 100644
--- a/darc-protocol/contracts/protocol/Plugin/PluginFactory.sol
+++ b/darc-protocol/contracts/protocol/Plugin/PluginFactory.sol
@@ -35,15 +35,9 @@ contract PluginFactory is ConditionExpressionFactory{
if (bIsBeforeOperation)
{
require(pluginIndex < currentMachineState.beforeOpPlugins.length, "PluginFactory: plugin index out of range");
- if (currentMachineState.beforeOpPlugins[pluginIndex].bIsInitialized == false) {
- return (returnLevel, returnType, returnVotingRuleIndex);
- }
}
else {
require(pluginIndex < currentMachineState.afterOpPlugins.length, "PluginFactory: plugin index out of range");
- if (currentMachineState.afterOpPlugins[pluginIndex].bIsInitialized == false) {
- return (returnLevel, returnType, returnVotingRuleIndex);
- }
}
// start from expression condition root node idx = 0, recursively check the condition expression tree
diff --git a/darc-protocol/contracts/protocol/Runtime/Executable/InstructionMachine.sol b/darc-protocol/contracts/protocol/Runtime/Executable/InstructionMachine.sol
index 5d4641f5..dec68629 100644
--- a/darc-protocol/contracts/protocol/Runtime/Executable/InstructionMachine.sol
+++ b/darc-protocol/contracts/protocol/Runtime/Executable/InstructionMachine.sol
@@ -75,18 +75,18 @@ OfferDividendsInstructions
}
// opcode id == 7
- else if (operation.opcode == EnumOpcode.BATCH_ADD_MEMBERSHIP) {
- op_BATCH_ADD_MEMBERSHIP(operation, bIsSandbox);
+ else if (operation.opcode == EnumOpcode.BATCH_ADD_MEMBERSHIPS) {
+ op_BATCH_ADD_MEMBERSHIPS(operation, bIsSandbox);
}
// opcode id == 8
- else if (operation.opcode == EnumOpcode.BATCH_SUSPEND_MEMBERSHIP) {
- op_BATCH_SUSPEND_MEMBERSHIP(operation, bIsSandbox);
+ else if (operation.opcode == EnumOpcode.BATCH_SUSPEND_MEMBERSHIPS) {
+ op_BATCH_SUSPEND_MEMBERSHIPS(operation, bIsSandbox);
}
// opcode id == 9
- else if (operation.opcode == EnumOpcode.BATCH_RESUME_MEMBERSHIP){
- op_BATCH_RESUME_MEMBERSHIP(operation, bIsSandbox);
+ else if (operation.opcode == EnumOpcode.BATCH_RESUME_MEMBERSHIPS){
+ op_BATCH_RESUME_MEMBERSHIPS(operation, bIsSandbox);
}
// opcode id == 10
@@ -195,8 +195,8 @@ OfferDividendsInstructions
}
// opcode id == 31
- else if (operation.opcode == EnumOpcode.ADD_STORAGE_IPFS_HASH) {
- op_ADD_STORAGE_IPFS_HASH(operation, bIsSandbox);
+ else if (operation.opcode == EnumOpcode.ADD_STORAGE_STRING) {
+ op_ADD_STORAGE_STRING(operation, bIsSandbox);
}
// opcode id == 32
diff --git a/darc-protocol/contracts/protocol/Runtime/Executable/Instructions/MembershipInstructions.sol b/darc-protocol/contracts/protocol/Runtime/Executable/Instructions/MembershipInstructions.sol
index 72833cbf..7e750d69 100644
--- a/darc-protocol/contracts/protocol/Runtime/Executable/Instructions/MembershipInstructions.sol
+++ b/darc-protocol/contracts/protocol/Runtime/Executable/Instructions/MembershipInstructions.sol
@@ -17,11 +17,11 @@ import "../../../Utilities/ErrorMsg.sol";
contract MembershipInstructions is MachineStateManager {
/**
- * @notice The function that executes the BATCH_ADD_MEMBERSHIP operation
+ * @notice The function that executes the BATCH_ADD_MEMBERSHIPS operation
* @param operation The operation to be executed
* @param bIsSandbox The flag to indicate if the operation is being executed in sandbox
*/
- function op_BATCH_ADD_MEMBERSHIP(Operation memory operation, bool bIsSandbox) internal {
+ function op_BATCH_ADD_MEMBERSHIPS(Operation memory operation, bool bIsSandbox) internal {
// param 1 is the address of the members
// param 2 is the member role numbers
// param 3 is the member role name strings
@@ -57,11 +57,11 @@ contract MembershipInstructions is MachineStateManager {
}
}
/**
- * @notice The function that executes the BATCH_SUSPEND_MEMBERSHIP operation
+ * @notice The function that executes the BATCH_SUSPEND_MEMBERSHIPS operation
* @param operation The operation to be executed
* @param bIsSandbox The flag to indicate if the operation is being executed in sandbox
*/
- function op_BATCH_SUSPEND_MEMBERSHIP(Operation memory operation, bool bIsSandbox) internal {
+ function op_BATCH_SUSPEND_MEMBERSHIPS(Operation memory operation, bool bIsSandbox) internal {
// param 1 is the address of the members
address[] memory members = operation.param.ADDRESS_2DARRAY[0];
for (uint256 i=0;i 0) {
+
+ (bIsValid, totalRefundAmount) = SafeMathUpgradeable.tryAdd(refundAmount, totalRefundAmount);
+ require(bIsValid, "The total refund amount is overflow");
+ }
+ }
+
+ // if the total refund amount is greater than 0, add it to the withdrawable cash map
+ // and update the withdrawable cash owner list if the operator is not in the list
+ if (totalRefundAmount > 0) {
+ uint256 totalWithdrawableAmount = 0;
+ bool bIsValid = false;
+ (bIsValid, totalWithdrawableAmount) = SafeMathUpgradeable.tryAdd(totalRefundAmount, sandboxMachineState.withdrawableCashMap[operation.operatorAddress]);
+ require(bIsValid, "The total withdrawable amount is overflow");
+ sandboxMachineState.withdrawableCashMap[operation.operatorAddress] = totalWithdrawableAmount;
+
+ // if the operator is not in the withdrawable cash owner list, add it to the list
+ bool bIsInList = false;
+ for (uint256 i=0;i 0) {
+
+ (bIsValid, totalRefundAmount) = SafeMathUpgradeable.tryAdd(refundAmount, totalRefundAmount);
+ require(bIsValid, "The total refund amount is overflow");
+
+ }
+ }
+
+ // if the total refund amount is greater than 0, add it to the withdrawable cash map
+ // and update the withdrawable cash owner list if the operator is not in the list
+ if (totalRefundAmount > 0) {
+ uint256 totalWithdrawableAmount = 0;
+ bool bIsValid = false;
+ (bIsValid, totalWithdrawableAmount) = SafeMathUpgradeable.tryAdd(totalRefundAmount, currentMachineState.withdrawableCashMap[operation.operatorAddress]);
+ require(bIsValid, "The total withdrawable amount is overflow");
+ currentMachineState.withdrawableCashMap[operation.operatorAddress] = totalWithdrawableAmount;
+
+ // if the operator is not in the withdrawable cash owner list, add it to the list
+ bool bIsInList = false;
+ for (uint256 i=0;i=14'}
+ /@nomicfoundation/ethereumjs-block@5.0.4:
+ resolution: {integrity: sha512-AcyacJ9eX/uPEvqsPiB+WO1ymE+kyH48qGGiGV+YTojdtas8itUTW5dehDSOXEEItWGbbzEJ4PRqnQZlWaPvDw==}
+ engines: {node: '>=18'}
dependencies:
- '@nomicfoundation/ethereumjs-common': 3.1.2
- '@nomicfoundation/ethereumjs-rlp': 4.0.3
- '@nomicfoundation/ethereumjs-trie': 5.0.5
- '@nomicfoundation/ethereumjs-tx': 4.1.2
- '@nomicfoundation/ethereumjs-util': 8.0.6
+ '@nomicfoundation/ethereumjs-common': 4.0.4
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
+ '@nomicfoundation/ethereumjs-trie': 6.0.4
+ '@nomicfoundation/ethereumjs-tx': 5.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
ethereum-cryptography: 0.1.3
+ transitivePeerDependencies:
+ - c-kzg
dev: true
- /@nomicfoundation/ethereumjs-blockchain@6.2.2:
- resolution: {integrity: sha512-6AIB2MoTEPZJLl6IRKcbd8mUmaBAQ/NMe3O7OsAOIiDjMNPPH5KaUQiLfbVlegT4wKIg/GOsFH7XlH2KDVoJNg==}
- engines: {node: '>=14'}
+ /@nomicfoundation/ethereumjs-blockchain@7.0.4:
+ resolution: {integrity: sha512-jYsd/kwzbmpnxx86tXsYV8wZ5xGvFL+7/P0c6OlzpClHsbFzeF41KrYA9scON8Rg6bZu3ZTv6JOAgj3t7USUfg==}
+ engines: {node: '>=18'}
dependencies:
- '@nomicfoundation/ethereumjs-block': 4.2.2
- '@nomicfoundation/ethereumjs-common': 3.1.2
- '@nomicfoundation/ethereumjs-ethash': 2.0.5
- '@nomicfoundation/ethereumjs-rlp': 4.0.3
- '@nomicfoundation/ethereumjs-trie': 5.0.5
- '@nomicfoundation/ethereumjs-util': 8.0.6
- abstract-level: 1.0.3
+ '@nomicfoundation/ethereumjs-block': 5.0.4
+ '@nomicfoundation/ethereumjs-common': 4.0.4
+ '@nomicfoundation/ethereumjs-ethash': 3.0.4
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
+ '@nomicfoundation/ethereumjs-trie': 6.0.4
+ '@nomicfoundation/ethereumjs-tx': 5.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
debug: 4.3.4(supports-color@8.1.1)
ethereum-cryptography: 0.1.3
- level: 8.0.0
- lru-cache: 5.1.1
- memory-level: 1.0.0
+ lru-cache: 10.2.0
transitivePeerDependencies:
+ - c-kzg
- supports-color
dev: true
- /@nomicfoundation/ethereumjs-common@3.1.2:
- resolution: {integrity: sha512-JAEBpIua62dyObHM9KI2b4wHZcRQYYge9gxiygTWa3lNCr2zo+K0TbypDpgiNij5MCGNWP1eboNfNfx1a3vkvA==}
+ /@nomicfoundation/ethereumjs-common@4.0.4:
+ resolution: {integrity: sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==}
dependencies:
- '@nomicfoundation/ethereumjs-util': 8.0.6
- crc-32: 1.2.2
+ '@nomicfoundation/ethereumjs-util': 9.0.4
+ transitivePeerDependencies:
+ - c-kzg
dev: true
- /@nomicfoundation/ethereumjs-ethash@2.0.5:
- resolution: {integrity: sha512-xlLdcICGgAYyYmnI3r1t0R5fKGBJNDQSOQxXNjVO99JmxJIdXR5MgPo5CSJO1RpyzKOgzi3uIFn8agv564dZEQ==}
- engines: {node: '>=14'}
+ /@nomicfoundation/ethereumjs-ethash@3.0.4:
+ resolution: {integrity: sha512-xvIrwIMl9sSaiYKRem68+O7vYdj7Q2XWv5P7JXiIkn83918QzWHvqbswTRsH7+r6X1UEvdsURRnZbvZszEjAaQ==}
+ engines: {node: '>=18'}
dependencies:
- '@nomicfoundation/ethereumjs-block': 4.2.2
- '@nomicfoundation/ethereumjs-rlp': 4.0.3
- '@nomicfoundation/ethereumjs-util': 8.0.6
- abstract-level: 1.0.3
+ '@nomicfoundation/ethereumjs-block': 5.0.4
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
bigint-crypto-utils: 3.2.2
ethereum-cryptography: 0.1.3
+ transitivePeerDependencies:
+ - c-kzg
dev: true
- /@nomicfoundation/ethereumjs-evm@1.3.2:
- resolution: {integrity: sha512-I00d4MwXuobyoqdPe/12dxUQxTYzX8OckSaWsMcWAfQhgVDvBx6ffPyP/w1aL0NW7MjyerySPcSVfDJAMHjilw==}
- engines: {node: '>=14'}
+ /@nomicfoundation/ethereumjs-evm@2.0.4(@nomicfoundation/ethereumjs-verkle@0.0.2):
+ resolution: {integrity: sha512-lTyZZi1KpeMHzaO6cSVisR2tjiTTedjo7PcmhI/+GNFo9BmyY6QYzGeSti0sFttmjbEMioHgXxl5yrLNRg6+1w==}
+ engines: {node: '>=18'}
dependencies:
- '@nomicfoundation/ethereumjs-common': 3.1.2
- '@nomicfoundation/ethereumjs-util': 8.0.6
- '@types/async-eventemitter': 0.2.1
- async-eventemitter: 0.2.4
+ '@nomicfoundation/ethereumjs-common': 4.0.4
+ '@nomicfoundation/ethereumjs-statemanager': 2.0.4(@nomicfoundation/ethereumjs-verkle@0.0.2)
+ '@nomicfoundation/ethereumjs-tx': 5.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
+ '@types/debug': 4.1.12
debug: 4.3.4(supports-color@8.1.1)
ethereum-cryptography: 0.1.3
- mcl-wasm: 0.7.9
- rustbn.js: 0.2.0
+ rustbn-wasm: 0.2.0
transitivePeerDependencies:
+ - '@nomicfoundation/ethereumjs-verkle'
+ - c-kzg
- supports-color
dev: true
- /@nomicfoundation/ethereumjs-rlp@4.0.3:
- resolution: {integrity: sha512-DZMzB/lqPK78T6MluyXqtlRmOMcsZbTTbbEyAjo0ncaff2mqu/k8a79PBcyvpgAhWD/R59Fjq/x3ro5Lof0AtA==}
- engines: {node: '>=14'}
+ /@nomicfoundation/ethereumjs-rlp@5.0.4:
+ resolution: {integrity: sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==}
+ engines: {node: '>=18'}
hasBin: true
dev: true
- /@nomicfoundation/ethereumjs-statemanager@1.0.5:
- resolution: {integrity: sha512-CAhzpzTR5toh/qOJIZUUOnWekUXuRqkkzaGAQrVcF457VhtCmr+ddZjjK50KNZ524c1XP8cISguEVNqJ6ij1sA==}
+ /@nomicfoundation/ethereumjs-statemanager@2.0.4(@nomicfoundation/ethereumjs-verkle@0.0.2):
+ resolution: {integrity: sha512-HPDjeFrxw6llEi+BzqXkZ+KkvFnTOPczuHBtk21hRlDiuKuZz32dPzlhpRsDBGV1b5JTmRDUVqCS1lp3Gghw4Q==}
+ peerDependencies:
+ '@nomicfoundation/ethereumjs-verkle': 0.0.2
+ peerDependenciesMeta:
+ '@nomicfoundation/ethereumjs-verkle':
+ optional: true
dependencies:
- '@nomicfoundation/ethereumjs-common': 3.1.2
- '@nomicfoundation/ethereumjs-rlp': 4.0.3
- '@nomicfoundation/ethereumjs-trie': 5.0.5
- '@nomicfoundation/ethereumjs-util': 8.0.6
+ '@nomicfoundation/ethereumjs-common': 4.0.4
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
+ '@nomicfoundation/ethereumjs-trie': 6.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
+ '@nomicfoundation/ethereumjs-verkle': 0.0.2
debug: 4.3.4(supports-color@8.1.1)
ethereum-cryptography: 0.1.3
- functional-red-black-tree: 1.0.1
+ js-sdsl: 4.4.2
+ lru-cache: 10.2.0
transitivePeerDependencies:
+ - c-kzg
- supports-color
dev: true
- /@nomicfoundation/ethereumjs-trie@5.0.5:
- resolution: {integrity: sha512-+8sNZrXkzvA1NH5F4kz5RSYl1I6iaRz7mAZRsyxOm0IVY4UaP43Ofvfp/TwOalFunurQrYB5pRO40+8FBcxFMA==}
- engines: {node: '>=14'}
+ /@nomicfoundation/ethereumjs-trie@6.0.4:
+ resolution: {integrity: sha512-3nSwQiFMvr2VFe/aZUyinuohYvtytUqZCUCvIWcPJ/BwJH6oQdZRB42aNFBJ/8nAh2s3OcroWpBLskzW01mFKA==}
+ engines: {node: '>=18'}
dependencies:
- '@nomicfoundation/ethereumjs-rlp': 4.0.3
- '@nomicfoundation/ethereumjs-util': 8.0.6
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
+ '@types/readable-stream': 2.3.15
ethereum-cryptography: 0.1.3
+ lru-cache: 10.2.0
readable-stream: 3.6.2
+ transitivePeerDependencies:
+ - c-kzg
dev: true
- /@nomicfoundation/ethereumjs-tx@4.1.2:
- resolution: {integrity: sha512-emJBJZpmTdUa09cqxQqHaysbBI9Od353ZazeH7WgPb35miMgNY6mb7/3vBA98N5lUW/rgkiItjX0KZfIzihSoQ==}
- engines: {node: '>=14'}
+ /@nomicfoundation/ethereumjs-tx@5.0.4:
+ resolution: {integrity: sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ c-kzg: ^2.1.2
+ peerDependenciesMeta:
+ c-kzg:
+ optional: true
dependencies:
- '@nomicfoundation/ethereumjs-common': 3.1.2
- '@nomicfoundation/ethereumjs-rlp': 4.0.3
- '@nomicfoundation/ethereumjs-util': 8.0.6
+ '@nomicfoundation/ethereumjs-common': 4.0.4
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
ethereum-cryptography: 0.1.3
dev: true
- /@nomicfoundation/ethereumjs-util@8.0.6:
- resolution: {integrity: sha512-jOQfF44laa7xRfbfLXojdlcpkvxeHrE2Xu7tSeITsWFgoII163MzjOwFEzSNozHYieFysyoEMhCdP+NY5ikstw==}
- engines: {node: '>=14'}
+ /@nomicfoundation/ethereumjs-util@9.0.4:
+ resolution: {integrity: sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ c-kzg: ^2.1.2
+ peerDependenciesMeta:
+ c-kzg:
+ optional: true
dependencies:
- '@nomicfoundation/ethereumjs-rlp': 4.0.3
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
ethereum-cryptography: 0.1.3
dev: true
- /@nomicfoundation/ethereumjs-vm@6.4.2:
- resolution: {integrity: sha512-PRTyxZMP6kx+OdAzBhuH1LD2Yw+hrSpaytftvaK//thDy2OI07S0nrTdbrdk7b8ZVPAc9H9oTwFBl3/wJ3w15g==}
- engines: {node: '>=14'}
- dependencies:
- '@nomicfoundation/ethereumjs-block': 4.2.2
- '@nomicfoundation/ethereumjs-blockchain': 6.2.2
- '@nomicfoundation/ethereumjs-common': 3.1.2
- '@nomicfoundation/ethereumjs-evm': 1.3.2
- '@nomicfoundation/ethereumjs-rlp': 4.0.3
- '@nomicfoundation/ethereumjs-statemanager': 1.0.5
- '@nomicfoundation/ethereumjs-trie': 5.0.5
- '@nomicfoundation/ethereumjs-tx': 4.1.2
- '@nomicfoundation/ethereumjs-util': 8.0.6
- '@types/async-eventemitter': 0.2.1
- async-eventemitter: 0.2.4
+ /@nomicfoundation/ethereumjs-verkle@0.0.2:
+ resolution: {integrity: sha512-bjnfZElpYGK/XuuVRmLS3yDvr+cDs85D9oonZ0YUa5A3lgFgokWMp76zXrxX2jVQ0BfHaw12y860n1+iOi6yFQ==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
+ lru-cache: 10.2.0
+ rust-verkle-wasm: 0.0.1
+ transitivePeerDependencies:
+ - c-kzg
+ dev: true
+
+ /@nomicfoundation/ethereumjs-vm@7.0.4(@nomicfoundation/ethereumjs-verkle@0.0.2):
+ resolution: {integrity: sha512-gsA4IhmtWHI4BofKy3kio9W+dqZQs5Ji5mLjLYxHCkat+JQBUt5szjRKra2F9nGDJ2XcI/wWb0YWUFNgln4zRQ==}
+ engines: {node: '>=18'}
+ dependencies:
+ '@nomicfoundation/ethereumjs-block': 5.0.4
+ '@nomicfoundation/ethereumjs-blockchain': 7.0.4
+ '@nomicfoundation/ethereumjs-common': 4.0.4
+ '@nomicfoundation/ethereumjs-evm': 2.0.4(@nomicfoundation/ethereumjs-verkle@0.0.2)
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
+ '@nomicfoundation/ethereumjs-statemanager': 2.0.4(@nomicfoundation/ethereumjs-verkle@0.0.2)
+ '@nomicfoundation/ethereumjs-trie': 6.0.4
+ '@nomicfoundation/ethereumjs-tx': 5.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
debug: 4.3.4(supports-color@8.1.1)
ethereum-cryptography: 0.1.3
- functional-red-black-tree: 1.0.1
- mcl-wasm: 0.7.9
- rustbn.js: 0.2.0
transitivePeerDependencies:
+ - '@nomicfoundation/ethereumjs-verkle'
+ - c-kzg
- supports-color
dev: true
- /@nomicfoundation/hardhat-chai-matchers@1.0.6(@nomiclabs/hardhat-ethers@2.2.2)(chai@4.3.7)(ethers@5.7.2)(hardhat@2.12.4):
+ /@nomicfoundation/hardhat-chai-matchers@1.0.6(@nomiclabs/hardhat-ethers@2.2.2)(chai@4.3.7)(ethers@5.7.2)(hardhat@2.20.0):
resolution: {integrity: sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==}
peerDependencies:
'@nomiclabs/hardhat-ethers': ^2.0.0
@@ -573,26 +613,26 @@ packages:
hardhat: ^2.9.4
dependencies:
'@ethersproject/abi': 5.7.0
- '@nomiclabs/hardhat-ethers': 2.2.2(ethers@5.7.2)(hardhat@2.12.4)
+ '@nomiclabs/hardhat-ethers': 2.2.2(ethers@5.7.2)(hardhat@2.20.0)
'@types/chai-as-promised': 7.1.5
chai: 4.3.7
chai-as-promised: 7.1.1(chai@4.3.7)
deep-eql: 4.1.3
ethers: 5.7.2
- hardhat: 2.12.4(ts-node@10.9.1)(typescript@5.0.4)
+ hardhat: 2.20.0(ts-node@10.9.1)(typescript@5.0.4)
ordinal: 1.0.3
dev: true
- /@nomicfoundation/hardhat-network-helpers@1.0.8(hardhat@2.12.4):
+ /@nomicfoundation/hardhat-network-helpers@1.0.8(hardhat@2.20.0):
resolution: {integrity: sha512-MNqQbzUJZnCMIYvlniC3U+kcavz/PhhQSsY90tbEtUyMj/IQqsLwIRZa4ctjABh3Bz0KCh9OXUZ7Yk/d9hr45Q==}
peerDependencies:
hardhat: ^2.9.5
dependencies:
ethereumjs-util: 7.1.5
- hardhat: 2.12.4(ts-node@10.9.1)(typescript@5.0.4)
+ hardhat: 2.20.0(ts-node@10.9.1)(typescript@5.0.4)
dev: true
- /@nomicfoundation/hardhat-toolbox@2.0.0(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(@nomicfoundation/hardhat-chai-matchers@1.0.6)(@nomicfoundation/hardhat-network-helpers@1.0.8)(@nomiclabs/hardhat-ethers@2.2.2)(@nomiclabs/hardhat-etherscan@3.1.7)(@typechain/ethers-v5@10.2.1)(@typechain/hardhat@6.1.6)(@types/chai@4.3.5)(@types/mocha@9.1.1)(@types/node@20.1.3)(chai@4.3.7)(ethers@5.7.2)(hardhat-gas-reporter@1.0.9)(hardhat@2.12.4)(solidity-coverage@0.8.2)(ts-node@10.9.1)(typechain@8.1.1)(typescript@5.0.4):
+ /@nomicfoundation/hardhat-toolbox@2.0.0(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(@nomicfoundation/hardhat-chai-matchers@1.0.6)(@nomicfoundation/hardhat-network-helpers@1.0.8)(@nomiclabs/hardhat-ethers@2.2.2)(@nomiclabs/hardhat-etherscan@3.1.7)(@typechain/ethers-v5@10.2.1)(@typechain/hardhat@6.1.6)(@types/chai@4.3.5)(@types/mocha@9.1.1)(@types/node@20.1.3)(chai@4.3.7)(ethers@5.7.2)(hardhat-gas-reporter@1.0.9)(hardhat@2.20.0)(solidity-coverage@0.8.2)(ts-node@10.9.1)(typechain@8.1.1)(typescript@5.0.4):
resolution: {integrity: sha512-BoOPbzLQ1GArnBZd4Jz4IU8FY3RY4nUwpXlfymXwxlXNimngkPRJj7ivVNurD7igohEjf90v/Axn2M5WwAdCJQ==}
peerDependencies:
'@ethersproject/abi': ^5.4.7
@@ -617,20 +657,20 @@ packages:
dependencies:
'@ethersproject/abi': 5.7.0
'@ethersproject/providers': 5.7.2
- '@nomicfoundation/hardhat-chai-matchers': 1.0.6(@nomiclabs/hardhat-ethers@2.2.2)(chai@4.3.7)(ethers@5.7.2)(hardhat@2.12.4)
- '@nomicfoundation/hardhat-network-helpers': 1.0.8(hardhat@2.12.4)
- '@nomiclabs/hardhat-ethers': 2.2.2(ethers@5.7.2)(hardhat@2.12.4)
- '@nomiclabs/hardhat-etherscan': 3.1.7(hardhat@2.12.4)
+ '@nomicfoundation/hardhat-chai-matchers': 1.0.6(@nomiclabs/hardhat-ethers@2.2.2)(chai@4.3.7)(ethers@5.7.2)(hardhat@2.20.0)
+ '@nomicfoundation/hardhat-network-helpers': 1.0.8(hardhat@2.20.0)
+ '@nomiclabs/hardhat-ethers': 2.2.2(ethers@5.7.2)(hardhat@2.20.0)
+ '@nomiclabs/hardhat-etherscan': 3.1.7(hardhat@2.20.0)
'@typechain/ethers-v5': 10.2.1(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typechain@8.1.1)(typescript@5.0.4)
- '@typechain/hardhat': 6.1.6(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(@typechain/ethers-v5@10.2.1)(ethers@5.7.2)(hardhat@2.12.4)(typechain@8.1.1)
+ '@typechain/hardhat': 6.1.6(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(@typechain/ethers-v5@10.2.1)(ethers@5.7.2)(hardhat@2.20.0)(typechain@8.1.1)
'@types/chai': 4.3.5
'@types/mocha': 9.1.1
'@types/node': 20.1.3
chai: 4.3.7
ethers: 5.7.2
- hardhat: 2.12.4(ts-node@10.9.1)(typescript@5.0.4)
- hardhat-gas-reporter: 1.0.9(hardhat@2.12.4)
- solidity-coverage: 0.8.2(hardhat@2.12.4)
+ hardhat: 2.20.0(ts-node@10.9.1)(typescript@5.0.4)
+ hardhat-gas-reporter: 1.0.9(hardhat@2.20.0)
+ solidity-coverage: 0.8.2(hardhat@2.20.0)
ts-node: 10.9.1(@types/node@20.1.3)(typescript@5.0.4)
typechain: 8.1.1(typescript@5.0.4)
typescript: 5.0.4
@@ -742,18 +782,19 @@ packages:
'@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1
dev: true
- /@nomiclabs/hardhat-ethers@2.2.2(ethers@5.7.2)(hardhat@2.12.4):
+ /@nomiclabs/hardhat-ethers@2.2.2(ethers@5.7.2)(hardhat@2.20.0):
resolution: {integrity: sha512-NLDlDFL2us07C0jB/9wzvR0kuLivChJWCXTKcj3yqjZqMoYp7g7wwS157F70VHx/+9gHIBGzak5pKDwG8gEefA==}
peerDependencies:
ethers: ^5.0.0
hardhat: ^2.0.0
dependencies:
ethers: 5.7.2
- hardhat: 2.12.4(ts-node@10.9.1)(typescript@5.0.4)
+ hardhat: 2.20.0(ts-node@10.9.1)(typescript@5.0.4)
dev: true
- /@nomiclabs/hardhat-etherscan@3.1.7(hardhat@2.12.4):
+ /@nomiclabs/hardhat-etherscan@3.1.7(hardhat@2.20.0):
resolution: {integrity: sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==}
+ deprecated: The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead
peerDependencies:
hardhat: ^2.0.4
dependencies:
@@ -763,7 +804,7 @@ packages:
chalk: 2.4.2
debug: 4.3.4(supports-color@8.1.1)
fs-extra: 7.0.1
- hardhat: 2.12.4(ts-node@10.9.1)(typescript@5.0.4)
+ hardhat: 2.20.0(ts-node@10.9.1)(typescript@5.0.4)
lodash: 4.17.21
semver: 6.3.0
table: 6.8.1
@@ -780,7 +821,7 @@ packages:
resolution: {integrity: sha512-AGuwhRRL+NaKx73WKRNzeCxOCOCxpaqF+kp8TJ89QzAipSwZy/NoflkWaL9bywXFRhIzXt8j38sfF7KBKCPWLw==}
dev: false
- /@openzeppelin/hardhat-upgrades@1.22.1(@nomiclabs/hardhat-ethers@2.2.2)(@nomiclabs/hardhat-etherscan@3.1.7)(ethers@5.7.2)(hardhat@2.12.4):
+ /@openzeppelin/hardhat-upgrades@1.22.1(@nomiclabs/hardhat-ethers@2.2.2)(@nomiclabs/hardhat-etherscan@3.1.7)(ethers@5.7.2)(hardhat@2.20.0):
resolution: {integrity: sha512-MdoitCTLl4zwMU8MeE/bCj+7JMWBEvd38XqJkw36PkJrXlbv6FedDVCPoumMAhpmtymm0nTwTYYklYG+L6WiiQ==}
hasBin: true
peerDependencies:
@@ -793,13 +834,13 @@ packages:
'@nomiclabs/harhdat-etherscan':
optional: true
dependencies:
- '@nomiclabs/hardhat-ethers': 2.2.2(ethers@5.7.2)(hardhat@2.12.4)
- '@nomiclabs/hardhat-etherscan': 3.1.7(hardhat@2.12.4)
+ '@nomiclabs/hardhat-ethers': 2.2.2(ethers@5.7.2)(hardhat@2.20.0)
+ '@nomiclabs/hardhat-etherscan': 3.1.7(hardhat@2.20.0)
'@openzeppelin/upgrades-core': 1.26.2
chalk: 4.1.2
debug: 4.3.4(supports-color@8.1.1)
ethers: 5.7.2
- hardhat: 2.12.4(ts-node@10.9.1)(typescript@5.0.4)
+ hardhat: 2.20.0(ts-node@10.9.1)(typescript@5.0.4)
proper-lockfile: 4.1.2
transitivePeerDependencies:
- supports-color
@@ -948,7 +989,7 @@ packages:
typescript: 5.0.4
dev: true
- /@typechain/hardhat@6.1.6(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(@typechain/ethers-v5@10.2.1)(ethers@5.7.2)(hardhat@2.12.4)(typechain@8.1.1):
+ /@typechain/hardhat@6.1.6(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(@typechain/ethers-v5@10.2.1)(ethers@5.7.2)(hardhat@2.20.0)(typechain@8.1.1):
resolution: {integrity: sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==}
peerDependencies:
'@ethersproject/abi': ^5.4.7
@@ -963,14 +1004,10 @@ packages:
'@typechain/ethers-v5': 10.2.1(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typechain@8.1.1)(typescript@5.0.4)
ethers: 5.7.2
fs-extra: 9.1.0
- hardhat: 2.12.4(ts-node@10.9.1)(typescript@5.0.4)
+ hardhat: 2.20.0(ts-node@10.9.1)(typescript@5.0.4)
typechain: 8.1.1(typescript@5.0.4)
dev: true
- /@types/async-eventemitter@0.2.1:
- resolution: {integrity: sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==}
- dev: true
-
/@types/bn.js@4.11.6:
resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==}
dependencies:
@@ -999,6 +1036,12 @@ packages:
'@types/node': 8.10.66
dev: true
+ /@types/debug@4.1.12:
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+ dependencies:
+ '@types/ms': 0.7.34
+ dev: true
+
/@types/form-data@0.0.33:
resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==}
dependencies:
@@ -1024,6 +1067,10 @@ packages:
resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
dev: true
+ /@types/ms@0.7.34:
+ resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
+ dev: true
+
/@types/node@10.17.60:
resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==}
dev: true
@@ -1050,6 +1097,13 @@ packages:
resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
dev: true
+ /@types/readable-stream@2.3.15:
+ resolution: {integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==}
+ dependencies:
+ '@types/node': 20.1.3
+ safe-buffer: 5.1.2
+ dev: true
+
/@types/secp256k1@4.0.3:
resolution: {integrity: sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==}
dependencies:
@@ -1060,26 +1114,6 @@ packages:
resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==}
dev: true
- /abort-controller@3.0.0:
- resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
- engines: {node: '>=6.5'}
- dependencies:
- event-target-shim: 5.0.1
- dev: true
-
- /abstract-level@1.0.3:
- resolution: {integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==}
- engines: {node: '>=12'}
- dependencies:
- buffer: 6.0.3
- catering: 2.1.1
- is-buffer: 2.0.5
- level-supports: 4.0.1
- level-transcoder: 1.0.1
- module-error: 1.0.2
- queue-microtask: 1.2.3
- dev: true
-
/acorn-walk@8.2.0:
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
engines: {node: '>=0.4.0'}
@@ -1143,9 +1177,16 @@ packages:
/amdefine@1.0.1:
resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==}
engines: {node: '>=0.4.2'}
+ requiresBuild: true
dev: true
optional: true
+ /ansi-align@3.0.1:
+ resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+ dependencies:
+ string-width: 4.2.3
+ dev: true
+
/ansi-colors@3.2.3:
resolution: {integrity: sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==}
engines: {node: '>=6'}
@@ -1285,22 +1326,10 @@ packages:
engines: {node: '>=8'}
dev: true
- /async-eventemitter@0.2.4:
- resolution: {integrity: sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==}
- dependencies:
- async: 2.6.4
- dev: true
-
/async@1.5.2:
resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==}
dev: true
- /async@2.6.4:
- resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==}
- dependencies:
- lodash: 4.17.21
- dev: true
-
/asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
dev: true
@@ -1333,10 +1362,6 @@ packages:
safe-buffer: 5.2.1
dev: true
- /base64-js@1.5.1:
- resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- dev: true
-
/bcrypt-pbkdf@1.0.2:
resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
dependencies:
@@ -1373,6 +1398,20 @@ packages:
resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
dev: true
+ /boxen@5.1.2:
+ resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-align: 3.0.1
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ cli-boxes: 2.2.1
+ string-width: 4.2.3
+ type-fest: 0.20.2
+ widest-line: 3.1.0
+ wrap-ansi: 7.0.0
+ dev: true
+
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
@@ -1397,15 +1436,6 @@ packages:
resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
dev: true
- /browser-level@1.0.1:
- resolution: {integrity: sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==}
- dependencies:
- abstract-level: 1.0.3
- catering: 2.1.1
- module-error: 1.0.2
- run-parallel-limit: 1.1.0
- dev: true
-
/browser-stdout@1.3.1:
resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
dev: true
@@ -1443,13 +1473,6 @@ packages:
resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==}
dev: true
- /buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
- dev: true
-
/busboy@1.6.0:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
@@ -1483,11 +1506,6 @@ packages:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
dev: true
- /catering@2.1.1:
- resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==}
- engines: {node: '>=6'}
- dev: true
-
/cbor@8.1.0:
resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==}
engines: {node: '>=12.19'}
@@ -1583,23 +1601,16 @@ packages:
safe-buffer: 5.2.1
dev: true
- /classic-level@1.3.0:
- resolution: {integrity: sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==}
- engines: {node: '>=12'}
- requiresBuild: true
- dependencies:
- abstract-level: 1.0.3
- catering: 2.1.1
- module-error: 1.0.2
- napi-macros: 2.2.2
- node-gyp-build: 4.6.0
- dev: true
-
/clean-stack@2.2.0:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'}
dev: true
+ /cli-boxes@2.2.1:
+ resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
+ engines: {node: '>=6'}
+ dev: true
+
/cli-table3@0.5.1:
resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==}
engines: {node: '>=6'}
@@ -1718,12 +1729,6 @@ packages:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: true
- /crc-32@1.2.2:
- resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
- engines: {node: '>=0.8'}
- hasBin: true
- dev: true
-
/create-hash@1.2.0:
resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==}
dependencies:
@@ -2181,11 +2186,6 @@ packages:
strip-hex-prefix: 1.0.0
dev: true
- /event-target-shim@5.0.1:
- resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
- engines: {node: '>=6'}
- dev: true
-
/evp_bytestokey@1.0.3:
resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
dependencies:
@@ -2400,10 +2400,6 @@ packages:
functions-have-names: 1.2.3
dev: true
- /functional-red-black-tree@1.0.1:
- resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
- dev: true
-
/functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
dev: true
@@ -2592,22 +2588,21 @@ packages:
har-schema: 2.0.0
dev: true
- /hardhat-gas-reporter@1.0.9(hardhat@2.12.4):
+ /hardhat-gas-reporter@1.0.9(hardhat@2.20.0):
resolution: {integrity: sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==}
peerDependencies:
hardhat: ^2.0.2
dependencies:
array-uniq: 1.0.3
eth-gas-reporter: 0.2.25
- hardhat: 2.12.4(ts-node@10.9.1)(typescript@5.0.4)
+ hardhat: 2.20.0(ts-node@10.9.1)(typescript@5.0.4)
sha1: 1.1.1
transitivePeerDependencies:
- '@codechecks/client'
dev: true
- /hardhat@2.12.4(ts-node@10.9.1)(typescript@5.0.4):
- resolution: {integrity: sha512-rc9S2U/4M+77LxW1Kg7oqMMmjl81tzn5rNFARhbXKUA1am/nhfMJEujOjuKvt+ZGMiZ11PYSe8gyIpB/aRNDgw==}
- engines: {node: ^14.0.0 || ^16.0.0 || ^18.0.0}
+ /hardhat@2.20.0(ts-node@10.9.1)(typescript@5.0.4):
+ resolution: {integrity: sha512-TtWZ4mKOH5YA+PCDAGAjG7Gub2NA+egAX7RIHq5XnGrEALNXAbyP3S0I9vOE1MWCgZhn+XOFUNfDuHgkBOPoRw==}
hasBin: true
peerDependencies:
ts-node: '*'
@@ -2620,24 +2615,25 @@ packages:
dependencies:
'@ethersproject/abi': 5.7.0
'@metamask/eth-sig-util': 4.0.1
- '@nomicfoundation/ethereumjs-block': 4.2.2
- '@nomicfoundation/ethereumjs-blockchain': 6.2.2
- '@nomicfoundation/ethereumjs-common': 3.1.2
- '@nomicfoundation/ethereumjs-evm': 1.3.2
- '@nomicfoundation/ethereumjs-rlp': 4.0.3
- '@nomicfoundation/ethereumjs-statemanager': 1.0.5
- '@nomicfoundation/ethereumjs-trie': 5.0.5
- '@nomicfoundation/ethereumjs-tx': 4.1.2
- '@nomicfoundation/ethereumjs-util': 8.0.6
- '@nomicfoundation/ethereumjs-vm': 6.4.2
+ '@nomicfoundation/ethereumjs-block': 5.0.4
+ '@nomicfoundation/ethereumjs-blockchain': 7.0.4
+ '@nomicfoundation/ethereumjs-common': 4.0.4
+ '@nomicfoundation/ethereumjs-evm': 2.0.4(@nomicfoundation/ethereumjs-verkle@0.0.2)
+ '@nomicfoundation/ethereumjs-rlp': 5.0.4
+ '@nomicfoundation/ethereumjs-statemanager': 2.0.4(@nomicfoundation/ethereumjs-verkle@0.0.2)
+ '@nomicfoundation/ethereumjs-trie': 6.0.4
+ '@nomicfoundation/ethereumjs-tx': 5.0.4
+ '@nomicfoundation/ethereumjs-util': 9.0.4
+ '@nomicfoundation/ethereumjs-verkle': 0.0.2
+ '@nomicfoundation/ethereumjs-vm': 7.0.4(@nomicfoundation/ethereumjs-verkle@0.0.2)
'@nomicfoundation/solidity-analyzer': 0.1.1
'@sentry/node': 5.30.0
'@types/bn.js': 5.1.1
'@types/lru-cache': 5.1.1
- abort-controller: 3.0.0
adm-zip: 0.4.16
aggregate-error: 3.1.0
ansi-escapes: 4.3.2
+ boxen: 5.1.2
chalk: 2.4.2
chokidar: 3.5.3
ci-info: 2.0.0
@@ -2657,7 +2653,6 @@ packages:
mnemonist: 0.38.5
mocha: 10.2.0
p-map: 4.0.0
- qs: 6.11.1
raw-body: 2.5.2
resolve: 1.17.0
semver: 6.3.0
@@ -2672,6 +2667,7 @@ packages:
ws: 7.5.9
transitivePeerDependencies:
- bufferutil
+ - c-kzg
- supports-color
- utf-8-validate
dev: true
@@ -2818,10 +2814,6 @@ packages:
safer-buffer: 2.1.2
dev: true
- /ieee754@1.2.1:
- resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- dev: true
-
/ignore@5.2.4:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
engines: {node: '>= 4'}
@@ -3042,6 +3034,10 @@ packages:
resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
dev: true
+ /js-sdsl@4.4.2:
+ resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==}
+ dev: true
+
/js-sha3@0.5.7:
resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==}
dev: true
@@ -3148,27 +3144,6 @@ packages:
graceful-fs: 4.2.11
dev: true
- /level-supports@4.0.1:
- resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==}
- engines: {node: '>=12'}
- dev: true
-
- /level-transcoder@1.0.1:
- resolution: {integrity: sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==}
- engines: {node: '>=12'}
- dependencies:
- buffer: 6.0.3
- module-error: 1.0.2
- dev: true
-
- /level@8.0.0:
- resolution: {integrity: sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==}
- engines: {node: '>=12'}
- dependencies:
- browser-level: 1.0.1
- classic-level: 1.3.0
- dev: true
-
/levn@0.3.0:
resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
engines: {node: '>= 0.8.0'}
@@ -3229,14 +3204,14 @@ packages:
/loupe@2.3.6:
resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
+ deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5
dependencies:
get-func-name: 2.0.0
dev: true
- /lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
- dependencies:
- yallist: 3.1.1
+ /lru-cache@10.2.0:
+ resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==}
+ engines: {node: 14 || >=16.14}
dev: true
/lru-cache@6.0.0:
@@ -3258,11 +3233,6 @@ packages:
resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==}
dev: true
- /mcl-wasm@0.7.9:
- resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==}
- engines: {node: '>=8.9.0'}
- dev: true
-
/md5.js@1.3.5:
resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
dependencies:
@@ -3271,15 +3241,6 @@ packages:
safe-buffer: 5.2.1
dev: true
- /memory-level@1.0.0:
- resolution: {integrity: sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==}
- engines: {node: '>=12'}
- dependencies:
- abstract-level: 1.0.3
- functional-red-black-tree: 1.0.1
- module-error: 1.0.2
- dev: true
-
/memorystream@0.3.1:
resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
engines: {node: '>= 0.10.0'}
@@ -3457,11 +3418,6 @@ packages:
yargs-unparser: 1.6.0
dev: true
- /module-error@1.0.2:
- resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==}
- engines: {node: '>=10'}
- dev: true
-
/ms@2.1.1:
resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==}
dev: true
@@ -3480,10 +3436,6 @@ packages:
hasBin: true
dev: true
- /napi-macros@2.2.2:
- resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==}
- dev: true
-
/neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
dev: true
@@ -3980,7 +3932,7 @@ packages:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
- glob: 7.2.0
+ glob: 7.2.3
dev: true
/ripemd160@2.0.2:
@@ -3997,20 +3949,20 @@ packages:
bn.js: 5.2.1
dev: true
- /run-parallel-limit@1.1.0:
- resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==}
- dependencies:
- queue-microtask: 1.2.3
- dev: true
-
/run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies:
queue-microtask: 1.2.3
dev: true
- /rustbn.js@0.2.0:
- resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==}
+ /rust-verkle-wasm@0.0.1:
+ resolution: {integrity: sha512-BN6fiTsxcd2dCECz/cHtGTt9cdLJR925nh7iAuRcj8ymKw7OOaPmCneQZ7JePOJ/ia27TjEL91VdOi88Yf+mcA==}
+ dev: true
+
+ /rustbn-wasm@0.2.0:
+ resolution: {integrity: sha512-FThvYFNTqrEKGqXuseeg0zR7yROh/6U1617mCHF68OVqrN1tNKRN7Tdwy4WayPVsCmmK+eMxtIZX1qL6JxTkMg==}
+ dependencies:
+ '@scure/base': 1.1.1
dev: true
/safe-array-concat@1.0.0:
@@ -4194,7 +4146,7 @@ packages:
resolution: {integrity: sha512-Pr5sCAj1SFqzwFZw1HPKSq0PehlQNdM8GwKyAVYh2DOn7/cCK8LUKD1HeHnKtTgBW7hi9h4nnnan7hpAg5RhWQ==}
dev: true
- /solidity-coverage@0.8.2(hardhat@2.12.4):
+ /solidity-coverage@0.8.2(hardhat@2.20.0):
resolution: {integrity: sha512-cv2bWb7lOXPE9/SSleDO6czkFiMHgP4NXPj+iW9W7iEKLBk7Cj0AGBiNmGX3V1totl9wjPrT0gHmABZKZt65rQ==}
hasBin: true
peerDependencies:
@@ -4210,7 +4162,7 @@ packages:
ghost-testrpc: 0.0.2
global-modules: 2.0.0
globby: 10.0.2
- hardhat: 2.12.4(ts-node@10.9.1)(typescript@5.0.4)
+ hardhat: 2.20.0(ts-node@10.9.1)(typescript@5.0.4)
jsonschema: 1.4.1
lodash: 4.17.21
mocha: 7.1.2
@@ -4605,6 +4557,11 @@ packages:
engines: {node: '>=4'}
dev: true
+ /type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+ dev: true
+
/type-fest@0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
@@ -4805,6 +4762,13 @@ packages:
string-width: 2.1.1
dev: true
+ /widest-line@3.1.0:
+ resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
+ engines: {node: '>=8'}
+ dependencies:
+ string-width: 4.2.3
+ dev: true
+
/word-wrap@1.2.3:
resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
engines: {node: '>=0.10.0'}
@@ -4888,10 +4852,6 @@ packages:
engines: {node: '>=10'}
dev: true
- /yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- dev: true
-
/yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
diff --git a/darc-protocol/test/DARC.ts b/darc-protocol/test/DARC.ts
deleted file mode 100644
index 51156f6f..00000000
--- a/darc-protocol/test/DARC.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { time, loadFixture } from "@nomicfoundation/hardhat-network-helpers";
-import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs";
-import { expect } from "chai";
-import { ethers } from "hardhat";
-
diff --git a/darc-protocol/test/MultiDARCTest/Multi_DARC_call_test.ts b/darc-protocol/test/MultiDARCTest/Multi_DARC_call_test.ts
index 37ee7dda..aa6aa4d7 100644
--- a/darc-protocol/test/MultiDARCTest/Multi_DARC_call_test.ts
+++ b/darc-protocol/test/MultiDARCTest/Multi_DARC_call_test.ts
@@ -80,7 +80,6 @@ describe("test for multi DARC call test", function () {
votingRuleIndex: 0,
notes: "0x70997970C51812dc3A010C7d01b50e0d17dc79C8 should operate",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
}
],
diff --git a/darc-protocol/test/MultiDARCTest/Multi_DARC_call_with_payment_test.ts b/darc-protocol/test/MultiDARCTest/Multi_DARC_call_with_payment_test.ts
index de05f170..50cacd8b 100644
--- a/darc-protocol/test/MultiDARCTest/Multi_DARC_call_with_payment_test.ts
+++ b/darc-protocol/test/MultiDARCTest/Multi_DARC_call_with_payment_test.ts
@@ -78,7 +78,6 @@ describe("test for multi DARC call test with payment", function () {
votingRuleIndex: 0,
notes: "0x70997970C51812dc3A010C7d01b50e0d17dc79C8 should operate",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
}
],
diff --git a/darc-protocol/test/conditionTest/externalCallTest.ts b/darc-protocol/test/conditionTest/externalCallTest.ts
new file mode 100644
index 00000000..891b2cf0
--- /dev/null
+++ b/darc-protocol/test/conditionTest/externalCallTest.ts
@@ -0,0 +1,227 @@
+import { time, loadFixture } from "@nomicfoundation/hardhat-network-helpers";
+import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs";
+import { expect } from "chai";
+import { ethers } from "hardhat";
+import { BigNumber } from "ethers";
+import { ConditionNodeStruct, PluginStruct } from "../../typechain-types/contracts/protocol/DARC";
+
+const programOperatorAddress = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266";
+
+const target1 = "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC";
+
+const target2 = "0x90F79bf6EB2c4f870365E785982E1f101E93b906";
+
+const target3 = "0x870526b7973b56163a6997bb7c886f5e4ea53638";
+
+describe("external oracle external call condition test", function () {
+ it("should pass external oracle condition test", async function () {
+ const TestOracleFactory = await ethers.getContractFactory(
+ "TestOracleContract"
+ );
+ const testOracleContract = await TestOracleFactory.deploy();
+ await testOracleContract.deployed();
+
+ const testOracleContractAddress = testOracleContract.address;
+ testOracleContract.set
+
+ // deploy a darc with conditions
+ const DARCFactory = await ethers.getContractFactory("DARC");
+ const darc = await DARCFactory.deploy();
+ await darc.deployed();
+ await darc.initialize();
+
+ // encoding testOracleContract function is_X_1() with signature
+ // const encodedBytes = ethers.utils.encodedWithSignature
+ const theABI = ["function get_X_plus(uint256 a)"];
+ const abiInterface = new ethers.utils.Interface(theABI);
+ const resultBytes = abiInterface.encodeFunctionData("get_X_plus", [BigNumber.from(100)]);
+
+ const pluginList: PluginStruct[] = [
+
+ // pluigin 1
+ {
+ returnType: BigNumber.from(2),
+ level: 3,
+ conditionNodes:[
+ {
+ id: BigNumber.from(0),
+ nodeType: BigNumber.from(3), // true,
+ conditionExpression: 0,
+ childList: [],
+ logicalOperator: 0,
+ param: {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: [],
+ }
+ }
+ ],
+ votingRuleIndex: 0,
+ notes: "plugin 1",
+ bIsBeforeOperation: true,
+ bIsEnabled: true,
+ },
+
+
+ // plugin 2
+ {
+ returnType: BigNumber.from(4), // yes and skip sandbox
+ level: 10,
+ conditionNodes:[
+ {
+ id: 0,
+ nodeType: 1,
+ logicalOperator: 0,
+ conditionExpression: 181,
+ childList: [],
+ param: {
+ STRING_ARRAY: [],
+ UINT256_2DARRAY: [[200]], // if the value is 200, then the condition is true, then yes and skip sandbox
+ ADDRESS_2DARRAY: [[testOracleContractAddress]],
+ BYTES: resultBytes,
+ }
+ }
+ ],
+ votingRuleIndex: 0,
+ notes: "plugin 2",
+ bIsBeforeOperation: true,
+ bIsEnabled: true
+ }
+ ]
+
+ // create a token class, then add and enable plugin
+ await darc.entrance(
+ {
+ programOperatorAddress: programOperatorAddress,
+ notes: "create token class",
+ operations: [
+ {
+ operatorAddress: programOperatorAddress,
+ opcode: 2, // create token class
+ param: {
+ STRING_ARRAY: ["Class1", "Class2"],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ PLUGIN_ARRAY: [],
+ UINT256_2DARRAY: [
+ [BigNumber.from(0), BigNumber.from(1)],
+ [BigNumber.from(10), BigNumber.from(1)],
+ [BigNumber.from(10), BigNumber.from(1)],
+ ],
+ ADDRESS_2DARRAY: [],
+ BYTES: [],
+ },
+ },
+ {
+ operatorAddress: programOperatorAddress,
+ opcode: 15, // add and enable plugin
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ PLUGIN_ARRAY: pluginList,
+ UINT256_2DARRAY: [],
+ ADDRESS_2DARRAY: [],
+ BYTES: [],
+ },
+ }
+ ],
+ }
+ );
+
+ // now try to set the value of the oracle to 100
+ //await testOracleContract.set_X(100);
+ // try to mint token
+ let bIsException = false;
+ try{
+ const result = await darc.entrance(
+ {
+ programOperatorAddress: programOperatorAddress,
+ notes: "mint token",
+ operations: [
+ {
+ operatorAddress: programOperatorAddress,
+ opcode: 1, // mint token
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ PLUGIN_ARRAY: [],
+ UINT256_2DARRAY: [[0],[100]],
+ ADDRESS_2DARRAY: [[programOperatorAddress]],
+ BYTES: [],
+ },
+ }
+ ],
+ }
+ );
+ }
+ catch (err) {
+ bIsException = true;
+ }
+ expect(bIsException).to.equal(true);
+
+
+ //set value of the oracle to 100, so that this time the oracle will return 200, which will make the condition true
+ await testOracleContract.set_X(100);
+ // try to mint token again
+ const result = await darc.entrance(
+ {
+ programOperatorAddress: programOperatorAddress,
+ notes: "mint token",
+ operations: [
+ {
+ operatorAddress: programOperatorAddress,
+ opcode: 1, // mint token
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ PLUGIN_ARRAY: [],
+ UINT256_2DARRAY: [[0],[100]],
+ ADDRESS_2DARRAY: [[programOperatorAddress]],
+ BYTES: [],
+ },
+ }
+ ],
+ }
+ );
+ expect(true).equal(true);
+
+ bIsException = false;
+ await testOracleContract.set_X(200);
+ try{
+ const result = await darc.entrance(
+ {
+ programOperatorAddress: programOperatorAddress,
+ notes: "mint token",
+ operations: [
+ {
+ operatorAddress: programOperatorAddress,
+ opcode: 1, // mint token
+ param: {
+ STRING_ARRAY: [],
+ BOOL_ARRAY: [],
+ VOTING_RULE_ARRAY: [],
+ PARAMETER_ARRAY: [],
+ PLUGIN_ARRAY: [],
+ UINT256_2DARRAY: [[0],[100]],
+ ADDRESS_2DARRAY: [[programOperatorAddress]],
+ BYTES: [],
+ },
+ }
+ ],
+ }
+ );
+ }
+ catch(err) {
+ bIsException = true;
+ }
+ expect(bIsException).to.equal(true);
+ });
+});
diff --git a/darc-protocol/test/conditionTest/operationLogTest.ts b/darc-protocol/test/conditionTest/operationLogTest.ts
index ff41b23e..48e37004 100644
--- a/darc-protocol/test/conditionTest/operationLogTest.ts
+++ b/darc-protocol/test/conditionTest/operationLogTest.ts
@@ -32,7 +32,6 @@ describe("operation log test", function () {
notes:
"disable OPERATION_BY_OPERATOR_SINCE_LAST_TIME_LESS_THAN(5 seconds)",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes: [
{
diff --git a/darc-protocol/test/operationUnitTest/batch_add_and_enable_plugin_test.ts b/darc-protocol/test/operationUnitTest/batch_add_and_enable_plugin_test.ts
index 39d49330..2acab00c 100644
--- a/darc-protocol/test/operationUnitTest/batch_add_and_enable_plugin_test.ts
+++ b/darc-protocol/test/operationUnitTest/batch_add_and_enable_plugin_test.ts
@@ -99,7 +99,6 @@ describe("test for batch add and enable plugins", function () {
votingRuleIndex: 0,
notes: "0x7099 should not operate",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
}
],
diff --git a/darc-protocol/test/operationUnitTest/batch_add_membership_test.ts b/darc-protocol/test/operationUnitTest/batch_add_membership_test.ts
index 3a016380..431d6e33 100644
--- a/darc-protocol/test/operationUnitTest/batch_add_membership_test.ts
+++ b/darc-protocol/test/operationUnitTest/batch_add_membership_test.ts
@@ -6,7 +6,7 @@ import { BigNumber } from "ethers";
// test for batch mint token instruction on DARC
-describe("batch_add_membership_test", function () {
+describe("batch_add_MEMBERSHIPS_test", function () {
it ("should add membership", async function () {
diff --git a/darc-protocol/test/pluginTest/operator_AND_test.ts b/darc-protocol/test/pluginTest/operator_AND_test.ts
index 31456239..98cd4187 100644
--- a/darc-protocol/test/pluginTest/operator_AND_test.ts
+++ b/darc-protocol/test/pluginTest/operator_AND_test.ts
@@ -32,7 +32,6 @@ describe("operator AND test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "disable all program",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes:[{
id: BigNumber.from(0),
@@ -58,7 +57,6 @@ describe("operator AND test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "allow operatorAddress == target1 | operatorAddress == target2",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes:[
// node 0: boolean operator OR
diff --git a/darc-protocol/test/pluginTest/operator_OR_test.ts b/darc-protocol/test/pluginTest/operator_OR_test.ts
index 659bd2cc..f95b098d 100644
--- a/darc-protocol/test/pluginTest/operator_OR_test.ts
+++ b/darc-protocol/test/pluginTest/operator_OR_test.ts
@@ -30,7 +30,6 @@ describe("operator OR test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "disable all program",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes:[{
id: BigNumber.from(0),
@@ -56,7 +55,6 @@ describe("operator OR test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "allow operatorAddress == target1 | operatorAddress == target2",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes:[
// node 0: boolean operator OR
diff --git a/darc-protocol/test/votingTest/multiAddressVotingTest.ts b/darc-protocol/test/votingTest/multiAddressVotingTest.ts
index e9b90788..3645ab44 100644
--- a/darc-protocol/test/votingTest/multiAddressVotingTest.ts
+++ b/darc-protocol/test/votingTest/multiAddressVotingTest.ts
@@ -57,7 +57,6 @@ describe("multi address voting test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all sandbox_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes:[{
id: BigNumber.from(0),
@@ -140,7 +139,6 @@ describe("multi address voting test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
diff --git a/darc-protocol/test/votingTest/multiClassTokenVotingTest.ts b/darc-protocol/test/votingTest/multiClassTokenVotingTest.ts
index 20bb81bc..be1262e6 100644
--- a/darc-protocol/test/votingTest/multiClassTokenVotingTest.ts
+++ b/darc-protocol/test/votingTest/multiClassTokenVotingTest.ts
@@ -57,7 +57,6 @@ describe("multi class token voting test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all sandbox_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes:[{
id: BigNumber.from(0),
@@ -144,7 +143,6 @@ describe("multi class token voting test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
diff --git a/darc-protocol/test/votingTest/multiItemVotingNegativeTest.ts b/darc-protocol/test/votingTest/multiItemVotingNegativeTest.ts
index 28caa66e..50e4b086 100644
--- a/darc-protocol/test/votingTest/multiItemVotingNegativeTest.ts
+++ b/darc-protocol/test/votingTest/multiItemVotingNegativeTest.ts
@@ -55,7 +55,6 @@ describe("multi item voting test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all sandbox_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes:[{
id: BigNumber.from(0),
@@ -173,7 +172,6 @@ describe("multi item voting test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
@@ -197,7 +195,6 @@ describe("multi item voting test", function () {
votingRuleIndex: BigNumber.from(1),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
@@ -221,7 +218,6 @@ describe("multi item voting test", function () {
votingRuleIndex: BigNumber.from(2),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
@@ -245,7 +241,6 @@ describe("multi item voting test", function () {
votingRuleIndex: BigNumber.from(1),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
diff --git a/darc-protocol/test/votingTest/multiItemVotingTest.ts b/darc-protocol/test/votingTest/multiItemVotingTest.ts
index bd9365a7..7bfa2dc9 100644
--- a/darc-protocol/test/votingTest/multiItemVotingTest.ts
+++ b/darc-protocol/test/votingTest/multiItemVotingTest.ts
@@ -55,7 +55,6 @@ describe("multi item voting test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all sandbox_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes:[{
id: BigNumber.from(0),
@@ -173,7 +172,6 @@ describe("multi item voting test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
@@ -197,7 +195,6 @@ describe("multi item voting test", function () {
votingRuleIndex: BigNumber.from(1),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
@@ -221,7 +218,6 @@ describe("multi item voting test", function () {
votingRuleIndex: BigNumber.from(2),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
@@ -245,7 +241,6 @@ describe("multi item voting test", function () {
votingRuleIndex: BigNumber.from(1),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
diff --git a/darc-protocol/test/votingTest/singleVoteNegativeTest.ts b/darc-protocol/test/votingTest/singleVoteNegativeTest.ts
index e84494d4..cb095593 100644
--- a/darc-protocol/test/votingTest/singleVoteNegativeTest.ts
+++ b/darc-protocol/test/votingTest/singleVoteNegativeTest.ts
@@ -31,7 +31,6 @@ describe("single voting netative test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all sandbox_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes:[{
id: BigNumber.from(0),
@@ -67,7 +66,6 @@ describe("single voting netative test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
diff --git a/darc-protocol/test/votingTest/singleVotingTest.ts b/darc-protocol/test/votingTest/singleVotingTest.ts
index 16a3e171..4884f04b 100644
--- a/darc-protocol/test/votingTest/singleVotingTest.ts
+++ b/darc-protocol/test/votingTest/singleVotingTest.ts
@@ -31,7 +31,6 @@ describe("single voting test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all sandbox_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: true,
conditionNodes:[{
id: BigNumber.from(0),
@@ -67,7 +66,6 @@ describe("single voting test", function () {
votingRuleIndex: BigNumber.from(0),
notes: "all voting_needed",
bIsEnabled: true,
- bIsInitialized: true,
bIsBeforeOperation: false,
conditionNodes:[{
id: BigNumber.from(0),
diff --git a/darc-specs/opcode.md b/darc-specs/opcode.md
deleted file mode 100644
index 12a8a63d..00000000
--- a/darc-specs/opcode.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# DARC Instruction Set Opcode Table
-
-| Opcode ID | Opcode Name | Opcode Parameter | Opcode Notes |
-|-----------|----------------------------------------------|----------------------------------------------------------|------------------------------------------------------------|
-| 0 | UNDEFINED | | Invalid Operation |
-| 1 | BATCH_MINT_TOKENS | ADDRESS_2DARRAY[0] toAddressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray | Batch Mint Token Operation |
-| 2 | BATCH_CREATE_TOKEN_CLASSES | STRING_ARRAY[] nameArray, UINT256_2DARRAY[0] tokenIndexArray, UINT256_2DARRAY[1] votingWeightArray, UINT256_2DARRAY[2] dividendWeightArray | Batch Create Token Class Operation |
-| 3 | BATCH_TRANSFER_TOKENS | ADDRESS_2DARRAY[0] toAddressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray | Batch Transfer Token Operation |
-| 4 | BATCH_TRANSFER_TOKENS_FROM_TO | ADDRESS_2DARRAY[0] fromAddressArray, ADDRESS_2DARRAY[1] toAddressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray | Batch Transfer Token From Addr A to Addr B Operation |
-| 5 | BATCH_BURN_TOKENS | UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray | Batch Burn Token Operation |
-| 6 | BATCH_BURN_TOKENS_FROM | ADDRESS_2DARRAY[0] fromAddressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray | Batch Burn Token From Addr A Operation |
-| 7 | BATCH_ADD_MEMBERSHIP | ADDRESS_2DARRAY[0] memberAddressArray, UINT256_2DARRAY[0] memberRoleArray, STRING_ARRAY memberNameArray | Batch Add Member Operation |
-| 8 | BATCH_SUSPEND_MEMBERSHIP | ADDRESS_2DARRAY[0] memberAddressArray | Batch Suspend Member Operation |
-| 9 | BATCH_RESUME_MEMBERSHIP | ADDRESS_2DARRAY[0] memberAddressArray | Batch Resume Member Operation |
-| 10 | BATCH_CHANGE_MEMBER_ROLES | ADDRESS_2DARRAY[0] memberAddressArray, UINT256_2DARRAY[0] memberRoleArray | Batch Change Member Role Operation |
-| 11 | BATCH_CHANGE_MEMBER_NAMES | ADDRESS_2DARRAY[0] memberAddressArray, STRING_ARRAY memberNameArray | Batch Change Member Name Operation |
-| 12 | BATCH_ADD_PLUGINS | Plugin[] pluginList | Batch Add Emergency Agent Operation |
-| 13 | BATCH_ENABLE_PLUGINS | UINT256_ARRAY[0] pluginIndexArray, BOOL_ARRAY isBeforeOperationArray | Batch Enable Plugin Operation |
-| 14 | BATCH_DISABLE_PLUGINS | UINT256_ARRAY[0] pluginIndexArray, BOOL_ARRAY isBeforeOperationArray | Batch Disable Plugin Operation |
-| 15 | BATCH_ADD_AND_ENABLE_PLUGINS | Plugin[] pluginList | Batch Add and Enable Plugin Operation |
-| 16 | BATCH_SET_PARAMETERS | MachineParameter[] parameterNameArray, UINT256_2DARRAY[0] parameterValueArray | Batch Set Parameter Operation |
-| 17 | BATCH_ADD_WITHDRAWABLE_BALANCES | ADDRESS_2DARRAY[0] addressArray, UINT256_2DARRAY[0] amountArray | Batch Add Withdrawable Balance Operation |
-| 18 | BATCH_REDUCE_WITHDRAWABLE_BALANCES | ADDRESS_2DARRAY[0] addressArray, UINT256_2DARRAY[0] amountArray | Batch Reduce Withdrawable Balance Operation |
-| 19 | BATCH_ADD_VOTING_RULES | VotingRule[] votingRuleList | Batch Add Voting Rules Operation |
-| 20 | BATCH_PAY_TO_MINT_TOKENS | ADDRESS_2DARRAY[0] addressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray, UINT256_2DARRAY[2] priceArray, UINT256_2DARRAY[3] dividendableFlag | Batch Pay to Mint Tokens Operation |
-| 21 | BATCH_PAY_TO_TRANSFER_TOKENS | ADDRESS_2DARRAY[0] toAddressArray, UINT256_2DARRAY[0] tokenClassArray, UINT256_2DARRAY[1] amountArray, UINT256_2DARRAY[2] priceArray, UINT256_2DARRAY[3] dividendableFlag | Pay some cash to transfer tokens Operation (product coins) |
-| 22 | ADD_EMERGENCY | ADDRESS_2DARRAY[0] addressArray | Add an array of address as emergency agents Operation |
-| 23 | RESERVED_ID_23 | | Reserved ID 23 DO NOT USE |
-| 24 | CALL_EMERGENCY | UINT256_2DARRAY[0][0] emergencyAgentIndex | Call emergency agents to handle emergency situations |
-| 25 | CALL_CONTRACT_ABI | ADDRESS_2D[0][0] contractAddress, bytes abi, UINT256_2DARRAY[0][0] value | Call a contract with the given abi Operation |
-| 26 | PAY_CASH | uint256 amount, uint256 paymentType, uint256 dividendable | Pay some cash Operation |
-| 27 | OFFER_DIVIDENDS | | Calculate the dividends and offer to token holders Operation|
-| 28 | RESERVED_ID_28 | | Reserved ID 28 DO NOT USE |
-| 29 | SET_APPROVAL_FOR_ALL_OPERATIONS | ADDRESS_2DARRAY[0][0] targetAddress | Set the approval for all transfer operations by address Operation |
-| 30 | BATCH_BURN_TOKENS_AND_REFUND | UINT256_2D[0] tokenClassArray, UINT256_2D[1] amountArray, UINT256_2D[2] priceArray | Batch Burn tokens and Refund Operation |
-| 31 | ADD_STORAGE_IPFS_HASH | STRING_ARRAY[0][0] IFPSHash | Add storage IPFS hash to the storage list permanently Operation |
-| 32 | VOTE | bool[] voteArray | Vote for a voting pending program Operation |
-| 33 | EXECUTE_PENDING_PROGRAM | | Execute a program that has been voted and approved Operation |
-| 34 | END_EMERGENCY | | Emergency mode termination Operation |
-| 35 | UPGRADE_TO_ADDRESS | ADDRESS_2DARRAY[0][0] targetAddress | Upgrade the contract to a new contract address Operation |
-| 36 | CONFIRM_UPGRAED_FROM_ADDRESS | ADDRESS_2DARRAY[0][0] fromAddress | Accepting current DARCs to be upgraded from the old contract address Operation |