Files
lcbp3/docs/Markdown/LCBP3-DMS Backend Documentation (ฉบับสมบูรณ์)
2025-11-17 16:48:49 +07:00

589 lines
56 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
From: <Saved by Blink>
Snapshot-Content-Location: https://docs.google.com/document/u/0/d/1KfeiWDih7G3I40FtWma7Eab3OUDqeIK3os240-At5cA/mobilebasic?hl=th-TH&pli=1
Subject: =?utf-8?Q?LCBP3-DMS=20Backend=20Documentation=20(=E0=B8=89=E0=B8=9A=E0=B8?=
=?utf-8?Q?=B1=E0=B8=9A=E0=B8=AA=E0=B8=A1=E0=B8=9A=E0=B8=B9=E0=B8=A3=E0=B8?=
=?utf-8?Q?=93=E0=B9=8C)?=
Date: Thu, 16 Oct 2025 23:04:32 +0700
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html";
boundary="----MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----"
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
Content-Type: text/html
Content-ID: <frame-24AE4BF3D668AA12D0DFFD18451FBF94@mhtml.blink>
Content-Transfer-Encoding: binary
Content-Location: https://docs.google.com/document/u/0/d/1KfeiWDih7G3I40FtWma7Eab3OUDqeIK3os240-At5cA/mobilebasic?hl=th-TH&pli=1
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="cid:css-7a31172c-c16d-4379-a847-9072f51a3b81@mhtml.blink" /><link rel="stylesheet" type="text/css" href="cid:css-747ecb2f-f82b-48b3-b9c3-4dd7b63ebcea@mhtml.blink" /><link rel="stylesheet" type="text/css" href="cid:css-a43a30ce-0932-481b-8734-60b84ca204e0@mhtml.blink" /><title>LCBP3-DMS Backend Documentation (ฉบับสมบูรณ์)</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon-2023q4.ico"><meta property="og:title" content="LCBP3-DMS Backend Documentation (ฉบับสมบูรณ์)"><meta property="og:type" content="article"><meta property="og:site_name" content="Google Docs"><meta property="og:url" content="https://docs.google.com/document/u/0/d/1KfeiWDih7G3I40FtWma7Eab3OUDqeIK3os240-At5cA/mobilebasic?hl=th-TH&amp;pli=1&amp;usp=embed_facebook"><meta property="og:description" content="LCBP3-DMS: Backend Documentation (ฉบับสมบูรณ์) เอกสารนี้รวบรวมรายละเอียดทั้งหมดของส่วน Backend สำหรับระบบ LCBP3 Document Management System ซึ่งพัฒนาด้วย NestJS Framework ประกอบด้วยขั้นตอนการติดตั้ง, สถาปัตยกรรม, และซอร์สโค้ดทั้งหมดของโปรเจกต์ 1. ข้อกำหนดเบื้องต้น (Prerequisites) ก่อนเริ่มการติดตั..."><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=0"><meta name="referrer" content="strict-origin-when-cross-origin"></head><body><div><div class="docs-ml-promotion docs-ml-promotion-off-screen" role="alertdialog" aria-labelledby="docs-ml-promotion-aria-label" aria-hidden="true"><div id="docs-ml-promotion-aria-label" style="display:none;">Alert message displayed.</div><div class="docs-ml-promotion-content"><div class="docs-ml-promotion-header"><span class="docs-ml-promotion-app-icon-container" aria-hidden="true"><div class="docs-ml-icon docs-ml-promotion-app-icon"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 36 36"><path fill="none" d="M0 0h36v36H0z"></path><path fill="#fff" d="M10.9 18.4h14.2V21H10.9zM10.9 22.9h10.5v2.6H10.9z"></path><path fill="#1967d2" d="M21.8 9.8l4.5.8 3.7-.8-8.2-8.3-1.2 3.9z"></path><path fill="#fff" d="M10.9 13.9h14.2v2.6H10.9z"></path><path d="M21.8 9.8V1.5H8.2C7 1.5 6 2.5 6 3.8v28.5c0 1.2 1 2.2 2.2 2.2h19.5c1.2 0 2.2-1 2.2-2.2V9.8h-8.1zM21 25.1h-9.8v-1.9H21v1.9zm3.8-4.5H11.2v-1.9h13.5v1.9zm0-4.5H11.2v-1.9h13.5v1.9z" fill="#4285f4"></path></svg></div></span><span class="docs-ml-promotion-text"><div class="docs-ml-promotion-text-heading">Edit with the Docs app</div><div class="docs-ml-promotion-text-body">Make tweaks, leave comments, and share with others to edit at the same time.</div></span></div><div class="docs-ml-promotion-action-row"><span class="docs-ml-promotion-action-container"><span class="docs-ml-promotion-action-button-wrapper docs-ml-promotion-no-button-wrapper" role="button" tabindex="0"><span class="docs-ml-promotion-action-button docs-ml-promotion-no-button">NO THANKS</span></span></span><span class="docs-ml-promotion-action-container"><span class="docs-ml-promotion-action-button-wrapper docs-ml-promotion-yes-button-wrapper" role="button" tabindex="0"><span class="docs-ml-promotion-action-button docs-ml-promotion-yes-button">USE THE APP</span></span></span></div></div></div></div><div id="docs-ml-header-id" class="docs-ml-header"><span class="docs-ml-header-item docs-ml-header-drive-link"><div id="docs-ml-header-drive-link-aria-label" style="display:none;">Go to Drive</div><a href="https://drive.google.com/u/0?usp=docs_web" aria-labelledby="docs-ml-header-drive-link-aria-label" role="button"><div class="docs-ml-header-icon-container"><div class="docs-ml-icon docs-ml-header-icon docs-ml-arrow-back-dir"><div class="docs-ml-img-container docs-ml-img docs-ml-arrow-back-icon"></div></div></div></a></span><span class="docs-ml-header-item docs-ml-header-document-title"><div class="docs-ml-header-document-title-text">LCBP3-DMS Backend Documentation (ฉบับสมบูรณ์)</div></span><div id="docs-ml-header-edit-button-aria-label" style="display:none;">Edit</div><span class="docs-ml-header-item docs-ml-header-edit-button" aria-labelledby="docs-ml-header-edit-button-aria-label" role="button" tabindex="0"><div class="docs-ml-header-icon-container"><div class="docs-ml-icon docs-ml-header-icon"><div class="docs-ml-img-container docs-ml-img docs-ml-edit-icon"></div></div></div></span></div><div class="app-container"><div class="doc-container"><div class="doc"><div class="doc-content" style="background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt"><h1 style="padding-top:12pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:24pt;padding-bottom:12pt;font-family:&quot;Arial&quot;;line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:24pt;font-family:&quot;Arial&quot;;font-style:normal">LCBP3-DMS: Backend Documentation (ฉบับสมบูรณ์)</span></h1><p style="padding-top:0pt;margin:0;color:#000000;padding-left:0;font-size:11pt;padding-bottom:11.2pt;font-family:&quot;Arial&quot;;line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">เอกสารนี้รวบรวมรายละเอียดทั้งหมดของส่วน Backend สำหรับระบบ LCBP3 Document Management System ซึ่งพัฒนาด้วย NestJS Framework ประกอบด้วยขั้นตอนการติดตั้ง, สถาปัตยกรรม, และซอร์สโค้ดทั้งหมดของโปรเจกต์</span></p><h2 style="padding-top:0pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:11.2pt;font-family:&quot;Arial&quot;;line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:&quot;Arial&quot;;font-style:normal">1. ข้อกำหนดเบื้องต้น (Prerequisites)</span></h2><p style="padding:0;margin:0;color:#000000;font-size:11pt;font-family:&quot;Arial&quot;;line-height:1.0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">ก่อนเริ่มการติดตั้งและพัฒนา คุณจะต้องมีเครื่องมือต่อไปนี้ติดตั้งบนเครื่องคอมพิวเตอร์ของคุณ:</span></p><ul class="lst-kix_list_1-0 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Node.js:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">&nbsp;เวอร์ชัน 18.x หรือสูงกว่า</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">NPM</span><span>&nbsp;หรือ </span><span style="font-weight:700">Yarn:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">&nbsp;ตัวจัดการ Package (มาพร้อมกับ Node.js)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">NestJS CLI:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">&nbsp;ติดตั้งผ่านคำสั่ง npm install -g @nestjs/cli</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Git:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">&nbsp;สำหรับการ Clone โปรเจกต์จาก Gitea</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Docker:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">&nbsp;(แนะนำ) สำหรับการรันฐานข้อมูล MariaDB ในสภาพแวดล้อมที่เหมือนกับ Production</span></li></ul><h2 style="padding-top:11.2pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:11.2pt;font-family:&quot;Arial&quot;;line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:&quot;Arial&quot;;font-style:normal">2. ขั้นตอนการติดตั้งและเริ่มใช้งาน (Installation &amp; Setup)</span></h2><ol class="lst-kix_list_2-0 start" start="1" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">Clone โปรเจกต์:</span></li></ol><ul class="lst-kix_list_3-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">คัดลอกโปรเจกต์จาก Gitea repository ของคุณมาไว้ที่เครื่อง</span></li></ul><p style="margin-left:30pt;padding:0;color:#000000;font-size:11pt;font-family:&quot;Arial&quot;;line-height:1.0;margin-top:0;margin-bottom:0;text-align:left;margin-right:0"><span>&lt;!-- end list --&gt;</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Courier&quot;;font-style:normal">git clone [http://git.np-dms.work/your-repo/backend-np-dms.git](http://git.np-dms.work/your-repo/backend-np-dms.git)<br>cd backend-np-dms<br></span></p><ol class="lst-kix_list_2-0" start="2" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">ติดตั้ง Dependencies:</span></li></ol><ul class="lst-kix_list_4-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">ใช้ npm เพื่อติดตั้ง Library ทั้งหมดที่โปรเจกต์ต้องการ</span></li></ul><p style="margin-left:30pt;padding:0;color:#000000;font-size:11pt;font-family:&quot;Arial&quot;;line-height:1.0;margin-top:0;margin-bottom:0;text-align:left;margin-right:0"><span>&lt;!-- end list --&gt;</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Courier&quot;;font-style:normal">npm install<br></span></p><ol class="lst-kix_list_2-0" start="3" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">ตั้งค่า Environment File:</span></li></ol><ul class="lst-kix_list_5-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">สร้างไฟล์ใหม่ชื่อ .env ที่รากของโปรเจกต์</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">คัดลอกเนื้อหาจากไฟล์ .env.example (ถ้ามี) หรือใช้โครงสร้างด้านล่าง แล้วแก้ไขค่าให้ตรงกับสภาพแวดล้อมของคุณ (โดยเฉพาะข้อมูลการเชื่อมต่อฐานข้อมูล)</span></li></ul><p style="margin-left:30pt;padding:0;color:#000000;font-size:11pt;font-family:&quot;Arial&quot;;line-height:1.0;margin-top:0;margin-bottom:0;text-align:left;margin-right:0"><span style="font-weight:700">ไฟล์ .env (ตัวอย่าง):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Courier&quot;;font-style:normal"># Database Configuration<br>DB_TYPE=mysql<br>DB_HOST=localhost<br>DB_PORT=3306<br>DB_USERNAME=your_db_user<br>DB_PASSWORD=your_db_password<br>DB_DATABASE=dms_db<br><br># JWT Configuration<br>JWT_SECRET=your_super_long_and_random_jwt_secret<br><br># Application Configuration<br>API_PORT=3001<br></span></p><ol class="lst-kix_list_2-0" start="4" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">เริ่มต้นฐานข้อมูล:</span></li></ol><ul class="lst-kix_list_6-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">ตรวจสอบให้แน่ใจว่า MariaDB Server ของคุณกำลังทำงาน</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">สร้างฐานข้อมูลชื่อ dms_db (หรือตามที่คุณตั้งค่าใน .env)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">นำไฟล์ SQL Scripts (01_..., 05_..., 06_...) ไปรันในฐานข้อมูลเพื่อสร้างตารางและใส่ข้อมูลเริ่มต้น</span></li></ul><ol class="lst-kix_list_2-0" start="5" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">รันแอปพลิเคชัน (Development Mode):</span></li></ol><ul class="lst-kix_list_7-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">ใช้คำสั่งนี้เพื่อเริ่ม Backend server ในโหมดพัฒนา ซึ่งจะมีการรีสตาร์ทอัตโนมัติเมื่อมีการแก้ไขโค้ด</span></li></ul><p style="margin-left:30pt;padding:0;color:#000000;font-size:11pt;font-family:&quot;Arial&quot;;line-height:1.0;margin-top:0;margin-bottom:0;text-align:left;margin-right:0"><span>&lt;!-- end list --&gt;</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Courier&quot;;font-style:normal">npm run start:dev<br></span></p><ol class="lst-kix_list_2-0" start="6" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">ตรวจสอบการทำงาน:</span></li></ol><ul class="lst-kix_list_8-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">หากทุกอย่างถูกต้อง คุณจะเห็น Log การเริ่มต้นทำงานและเชื่อมต่อฐานข้อมูลใน Terminal</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:&quot;Arial&quot;;margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">เปิดเว็บเบราว์เซอร์แล้วไปที่ http://localhost:3001/api-docs เพื่อดูหน้าเอกสาร API ของ Swagger</span></li></ul><h2 style="padding-top:11.2pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:11.2pt;font-family:&quot;Arial&quot;;line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:&quot;Arial&quot;;font-style:normal">3. สถาปัตยกรรมและโครงสร้างโปรเจกต์</span></h2><p style="padding:0;margin:0;color:#000000;font-size:11pt;font-family:&quot;Arial&quot;;line-height:1.0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">Backend นี้ใช้สถาปัตยกรรมแบบ Modular ของ NestJS ซึ่งจัดระเบียบโค้ดตามฟังก์ชันการทำงาน (Feature) ทำให้ง่ายต่อการจัดการและขยายระบบ</span></p><p style="padding:0;margin:0;color:#000000;font-size:11pt;font-family:&quot;Arial&quot;;line-height:1.0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Arial&quot;;font-style:normal">โครงสร้างโฟลเดอร์หลัก:</span></p><p style="padding:0;margin:0;color:#000000;font-size:11pt;font-family:&quot;Arial&quot;;line-height:1.0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:&quot;Courier&quot;;font-style:normal">src/<br>├── attachments/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 📎 โมดูลจัดการไฟล์แนบ<br>├── audit-logs/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 📋 โมดูลบันทึกการตรวจสอบ<br>├── auth/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 🔑 โมดูลยืนยันตัวตนและจัดการสิทธิ์<br>├── circulations/ &nbsp; &nbsp; &nbsp; &nbsp; # 🔄 โมดูลการเวียนเอกสาร<br>├── common/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 🌐 โฟลเดอร์สำหรับโค้ดที่ใช้ร่วมกัน<br>├── contracts/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 📑 โมดูลจัดการสัญญา<br>├── correspondences/ &nbsp; &nbsp; &nbsp;# 💌 โมดูลจัดการเอกสารหลัก<br>├── dashboard/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 📊 โมดูลสำหรับ API หน้า Dashboard<br>├── drawings/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 🖼️ โมดูลจัดการข้อมูล Drawing<br>├── lookup/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 🗂️ โฟลเดอร์เก็บ Entity ที่เป็น Master Data<br>├── organizations/ &nbsp; &nbsp; &nbsp; &nbsp;# 🏢 โมดูลจัดการองค์กร<br>├── permissions/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 🔐 โมดูลจัดการ Permissions<br>├── projects/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 🏗️ โมดูลจัดการโครงการ<br>├── rbac/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 🧑‍💼 โมดูลจัดการการกำหนดสิทธิ์ (RBAC)<br>├── reports/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 📈 โมดูลสร้างรายงาน<br>├── roles/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 🛡️ โมดูลจัดการ Roles<br>├── tags/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 🏷️ โมดูลจัดการแท็ก<br>├── technical-docs/ &nbsp; &nbsp; &nbsp; # ⚙️ โมดูลเอกสารทางเทคนิค<br>├── users/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 👤 โมดูลจัดการผู้ใช้<br>├── app.module.ts &nbsp; &nbsp; &nbsp; &nbsp; # Root Module ที่รวบรวมทุก Module<br>└── main.ts &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # ไฟล์เริ่มต้นของแอปพลิเคชัน<br></span></p></div></div></div></div></body></html>
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
Content-Type: text/css
Content-Transfer-Encoding: binary
Content-Location: https://themes.googleusercontent.com/fonts/css?kit=kbffV7V9BIH3Ot2AQ2LQRA
@charset "utf-8";
@font-face { font-family: Courier; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/l/font?kit=i7dKIFtyYSaNG9A_JrmedWxeSFI&skey=415f62b718dd1a36&v=v12") format("woff2"); unicode-range: U+0-FF, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
Content-Type: text/css
Content-Transfer-Encoding: binary
Content-Location: cid:css-a43a30ce-0932-481b-8734-60b84ca204e0@mhtml.blink
@charset "utf-8";
@import url("https://themes.googleusercontent.com/fonts/css?kit=kbffV7V9BIH3Ot2AQ2LQRA");
ol.lst-kix_list_7-0 { list-style-type: none; }
ul.lst-kix_list_1-0 { list-style-type: none; }
ol.lst-kix_list_3-0 { list-style-type: none; }
.lst-kix_list_3-0 > li::before { content: "" counter(lst-ctn-kix_list_3-0) ". "; }
ul.lst-kix_list_5-7 { list-style-type: none; }
ul.lst-kix_list_5-8 { list-style-type: none; }
.lst-kix_list_3-1 > li::before { content: "○ "; }
.lst-kix_list_3-2 > li::before { content: "■ "; }
ul.lst-kix_list_5-5 { list-style-type: none; }
ul.lst-kix_list_5-6 { list-style-type: none; }
.lst-kix_list_8-1 > li::before { content: "○ "; }
.lst-kix_list_4-0 > li { counter-increment: lst-ctn-kix_list_4-0 1; }
.lst-kix_list_8-2 > li::before { content: "■ "; }
.lst-kix_list_5-0 > li { counter-increment: lst-ctn-kix_list_5-0 1; }
.lst-kix_list_6-0 > li { counter-increment: lst-ctn-kix_list_6-0 1; }
.lst-kix_list_7-0 > li { counter-increment: lst-ctn-kix_list_7-0 1; }
.lst-kix_list_8-0 > li { counter-increment: lst-ctn-kix_list_8-0 1; }
ul.lst-kix_list_1-3 { list-style-type: none; }
.lst-kix_list_3-5 > li::before { content: "■ "; }
ul.lst-kix_list_1-4 { list-style-type: none; }
ul.lst-kix_list_1-1 { list-style-type: none; }
.lst-kix_list_3-4 > li::before { content: "■ "; }
ul.lst-kix_list_1-2 { list-style-type: none; }
ul.lst-kix_list_5-3 { list-style-type: none; }
ul.lst-kix_list_1-7 { list-style-type: none; }
.lst-kix_list_3-3 > li::before { content: "■ "; }
ul.lst-kix_list_5-4 { list-style-type: none; }
ul.lst-kix_list_1-8 { list-style-type: none; }
ul.lst-kix_list_5-1 { list-style-type: none; }
.lst-kix_list_8-0 > li::before { content: "" counter(lst-ctn-kix_list_8-0) ". "; }
ul.lst-kix_list_1-5 { list-style-type: none; }
ul.lst-kix_list_5-2 { list-style-type: none; }
ul.lst-kix_list_1-6 { list-style-type: none; }
.lst-kix_list_8-7 > li::before { content: "■ "; }
.lst-kix_list_3-8 > li::before { content: "■ "; }
.lst-kix_list_8-5 > li::before { content: "■ "; }
.lst-kix_list_8-6 > li::before { content: "■ "; }
.lst-kix_list_2-0 > li { counter-increment: lst-ctn-kix_list_2-0 1; }
.lst-kix_list_8-3 > li::before { content: "■ "; }
.lst-kix_list_3-6 > li::before { content: "■ "; }
.lst-kix_list_3-7 > li::before { content: "■ "; }
.lst-kix_list_8-4 > li::before { content: "■ "; }
ol.lst-kix_list_5-0.start { counter-reset: lst-ctn-kix_list_5-0 0; }
.lst-kix_list_8-8 > li::before { content: "■ "; }
.lst-kix_list_5-0 > li::before { content: "" counter(lst-ctn-kix_list_5-0) ". "; }
ol.lst-kix_list_6-0 { list-style-type: none; }
ol.lst-kix_list_2-0 { list-style-type: none; }
.lst-kix_list_4-8 > li::before { content: "■ "; }
.lst-kix_list_5-3 > li::before { content: "■ "; }
.lst-kix_list_4-7 > li::before { content: "■ "; }
.lst-kix_list_5-2 > li::before { content: "■ "; }
.lst-kix_list_5-1 > li::before { content: "○ "; }
ul.lst-kix_list_4-8 { list-style-type: none; }
.lst-kix_list_5-7 > li::before { content: "■ "; }
ul.lst-kix_list_8-4 { list-style-type: none; }
ul.lst-kix_list_8-5 { list-style-type: none; }
ul.lst-kix_list_4-6 { list-style-type: none; }
.lst-kix_list_5-6 > li::before { content: "■ "; }
.lst-kix_list_5-8 > li::before { content: "■ "; }
ul.lst-kix_list_8-2 { list-style-type: none; }
ul.lst-kix_list_4-7 { list-style-type: none; }
ul.lst-kix_list_8-3 { list-style-type: none; }
ul.lst-kix_list_8-8 { list-style-type: none; }
ul.lst-kix_list_8-6 { list-style-type: none; }
ul.lst-kix_list_8-7 { list-style-type: none; }
ul.lst-kix_list_4-1 { list-style-type: none; }
.lst-kix_list_5-4 > li::before { content: "■ "; }
ul.lst-kix_list_4-4 { list-style-type: none; }
.lst-kix_list_5-5 > li::before { content: "■ "; }
ul.lst-kix_list_4-5 { list-style-type: none; }
ul.lst-kix_list_8-1 { list-style-type: none; }
ul.lst-kix_list_4-2 { list-style-type: none; }
ul.lst-kix_list_4-3 { list-style-type: none; }
.lst-kix_list_6-1 > li::before { content: "○ "; }
.lst-kix_list_6-3 > li::before { content: "■ "; }
.lst-kix_list_6-0 > li::before { content: "" counter(lst-ctn-kix_list_6-0) ". "; }
.lst-kix_list_6-4 > li::before { content: "■ "; }
.lst-kix_list_3-0 > li { counter-increment: lst-ctn-kix_list_3-0 1; }
ol.lst-kix_list_4-0.start { counter-reset: lst-ctn-kix_list_4-0 0; }
.lst-kix_list_6-2 > li::before { content: "■ "; }
.lst-kix_list_6-8 > li::before { content: "■ "; }
ol.lst-kix_list_8-0.start { counter-reset: lst-ctn-kix_list_8-0 0; }
.lst-kix_list_6-5 > li::before { content: "■ "; }
.lst-kix_list_6-7 > li::before { content: "■ "; }
.lst-kix_list_7-0 > li::before { content: "" counter(lst-ctn-kix_list_7-0) ". "; }
.lst-kix_list_6-6 > li::before { content: "■ "; }
ol.lst-kix_list_5-0 { list-style-type: none; }
.lst-kix_list_2-6 > li::before { content: "■ "; }
.lst-kix_list_2-7 > li::before { content: "■ "; }
.lst-kix_list_7-4 > li::before { content: "■ "; }
.lst-kix_list_7-6 > li::before { content: "■ "; }
.lst-kix_list_2-4 > li::before { content: "■ "; }
.lst-kix_list_2-5 > li::before { content: "■ "; }
.lst-kix_list_2-8 > li::before { content: "■ "; }
.lst-kix_list_7-1 > li::before { content: "○ "; }
.lst-kix_list_7-5 > li::before { content: "■ "; }
.lst-kix_list_7-2 > li::before { content: "■ "; }
.lst-kix_list_7-3 > li::before { content: "■ "; }
ul.lst-kix_list_7-5 { list-style-type: none; }
ul.lst-kix_list_7-6 { list-style-type: none; }
ul.lst-kix_list_7-3 { list-style-type: none; }
ul.lst-kix_list_3-7 { list-style-type: none; }
ul.lst-kix_list_7-4 { list-style-type: none; }
ul.lst-kix_list_3-8 { list-style-type: none; }
ul.lst-kix_list_7-7 { list-style-type: none; }
ul.lst-kix_list_7-8 { list-style-type: none; }
ol.lst-kix_list_3-0.start { counter-reset: lst-ctn-kix_list_3-0 0; }
ul.lst-kix_list_3-1 { list-style-type: none; }
ul.lst-kix_list_3-2 { list-style-type: none; }
.lst-kix_list_7-8 > li::before { content: "■ "; }
ul.lst-kix_list_7-1 { list-style-type: none; }
ul.lst-kix_list_3-5 { list-style-type: none; }
ul.lst-kix_list_7-2 { list-style-type: none; }
ul.lst-kix_list_3-6 { list-style-type: none; }
ul.lst-kix_list_3-3 { list-style-type: none; }
.lst-kix_list_7-7 > li::before { content: "■ "; }
ul.lst-kix_list_3-4 { list-style-type: none; }
.lst-kix_list_4-0 > li::before { content: "" counter(lst-ctn-kix_list_4-0) ". "; }
.lst-kix_list_4-1 > li::before { content: "○ "; }
.lst-kix_list_4-4 > li::before { content: "■ "; }
.lst-kix_list_4-3 > li::before { content: "■ "; }
.lst-kix_list_4-5 > li::before { content: "■ "; }
.lst-kix_list_4-2 > li::before { content: "■ "; }
.lst-kix_list_4-6 > li::before { content: "■ "; }
ol.lst-kix_list_7-0.start { counter-reset: lst-ctn-kix_list_7-0 0; }
ol.lst-kix_list_4-0 { list-style-type: none; }
ul.lst-kix_list_6-6 { list-style-type: none; }
ul.lst-kix_list_6-7 { list-style-type: none; }
ul.lst-kix_list_6-4 { list-style-type: none; }
ul.lst-kix_list_2-8 { list-style-type: none; }
ul.lst-kix_list_6-5 { list-style-type: none; }
ul.lst-kix_list_6-8 { list-style-type: none; }
ul.lst-kix_list_2-2 { list-style-type: none; }
.lst-kix_list_1-0 > li::before { content: "● "; }
ul.lst-kix_list_2-3 { list-style-type: none; }
ul.lst-kix_list_2-1 { list-style-type: none; }
ul.lst-kix_list_6-2 { list-style-type: none; }
ol.lst-kix_list_8-0 { list-style-type: none; }
ul.lst-kix_list_2-6 { list-style-type: none; }
ul.lst-kix_list_6-3 { list-style-type: none; }
.lst-kix_list_1-1 > li::before { content: "○ "; }
.lst-kix_list_1-2 > li::before { content: "■ "; }
ol.lst-kix_list_2-0.start { counter-reset: lst-ctn-kix_list_2-0 0; }
ul.lst-kix_list_2-7 { list-style-type: none; }
ul.lst-kix_list_2-4 { list-style-type: none; }
ul.lst-kix_list_6-1 { list-style-type: none; }
ul.lst-kix_list_2-5 { list-style-type: none; }
.lst-kix_list_1-3 > li::before { content: "■ "; }
.lst-kix_list_1-4 > li::before { content: "■ "; }
.lst-kix_list_1-7 > li::before { content: "■ "; }
.lst-kix_list_1-5 > li::before { content: "■ "; }
.lst-kix_list_1-6 > li::before { content: "■ "; }
.lst-kix_list_2-0 > li::before { content: "" counter(lst-ctn-kix_list_2-0) ". "; }
.lst-kix_list_2-1 > li::before { content: "○ "; }
ol.lst-kix_list_6-0.start { counter-reset: lst-ctn-kix_list_6-0 0; }
.lst-kix_list_1-8 > li::before { content: "■ "; }
.lst-kix_list_2-2 > li::before { content: "■ "; }
.lst-kix_list_2-3 > li::before { content: "■ "; }
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
Content-Type: image/png
Content-Transfer-Encoding: binary
Content-Location: https://ssl.gstatic.com/docs/common/mobileweb_sprite1.png
<EFBFBD>PNG

IHDR$<00><17> <09> UIDATh<54><68>[[lW<19>Ιٛ<13>n<EFBFBD><6E>
8Ik'm\<5C>*V<>EBj<42>51/T<>5<14>P<08><>Z<EFBFBD>&чJ<D187> <09>*c<>h<EFBFBD> ܀<>B<EFBFBD><42><EFBFBD><EFBFBD>)I+<2B><14><>!<21><><EFBFBD>XNH<4E>br<62>:<17><>w<EFBFBD><77><<3C>mvv<76><76>9Ǔx#<23><>6<EFBFBD>=s<><73><EFBFBD><EFBFBD><EFBFBD>?<3F>|{h2ca;<3B>~<7E><><EFBFBD>i7<69>GBT<42>DT<44>vIԶ<1D>z<EFBFBD><7A><1B><>l<1E><>
h<EFBFBD><EFBFBD>b~f<01>ҽ<EFBFBD>*[<5B><>
>*><3E>z˅ۦ<CB85>z<EFBFBD>,<2C><02><><17>3?0u<30><75><EFBFBD>%K/ݚ=<3D>sl, <00><15><>XGfѪ<66>ڎꂒ"<22><><EFBFBD><EFBFBD>ԷU<D4B7>
<EFBFBD>L*ݟ<><DD9F><EFBFBD><EFBFBD>(9 <20>?/<2F>(<28><>ϥ<EFBFBD>db}۽<><DBBD>TAq(<28><>&<26>c~<7E><13>@<40><≯
(<28>$ L <0C>D<EFBFBD><44>ҩ<EFBFBD>:<3A>?slxt4eHY<48>' L];<01><><EFBFBD> <0C><>tzM<7A><4D><EFBFBD><EFBFBD><EFBFBD>c;<3B><><EFBFBD>#)<29><> <20>>b<><62>s<73>{SS<53>L.#<23><>T<<3C>@<40><><EFBFBD>S<EFBFBD>c<00><>$<16>T<EFBFBD><54><EFBFBD> ǝ)<29><>9<EFBFBD><39> 0*e,<01><>Ok<4F>=D<>DAi<41>?<3F>3<06><1B>b<EFBFBD><62>'_ O<>P&<26>^`<60>W<EFBFBD>X<EFBFBD>?<3F>n<EFBFBD>f0<>[ט> 2<>P_"c<><63><05>T<EFBFBD>d<04>"<22>$<24>`i6'Wj<>EŒF<C592> V*4<><01> <04><>+7I<37><49> <20><>;<3B>f<EFBFBD><66>,<2C>Rl<>xL<78><4C><EFBFBD>w<EFBFBD>M<EFBFBD>Õ=f13<31>dt<64>b<EFBFBD> <20><>z<EFBFBD><7A><EFBFBD><EFBFBD>M<EFBFBD><00><><7F><EFBFBD><EFBFBD>}b<><62>-<2D>`"@<40>2<00>)<29>q.w<>JQ<4A>-ޙ<>X=<3D>r1/c<14>aO<61><4F>ڭxf<78>ֆ<EFBFBD><0F>
x <20><11><>ӏU<D38F><55><EFBFBD>b<><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><01><><EFBFBD>X<EFBFBD><58>'Wo<57>}<0F>f<EFBFBD><66><EFBFBD>P<EFBFBD>b3<62>\=~<7E>*<2A><>kULi_<69><5F><EFBFBD>m<18><><EFBFBD>p<EFBFBD>Ie<><65><11>=$<24><><EFBFBD><0E><>S5<53>~<7E><> <00><><EFBFBD><EFBFBD><EFBFBD>z<EFBFBD><7A><1B><>S0McH<63><48>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z&:9<> <09><>([<5B>
<EFBFBD>k<EFBFBD>5<EFBFBD><EFBFBD>|<7C>ǡ<EFBFBD>8<EFBFBD><38><EFBFBD><CBAE>I<1E>$;<3B>=<3D>e?:<3A><>HoFy<46>,<2C> F<01>XQcC<>7 a<><61>N<EFBFBD><4E>#<23>Q3Z<33>GH:<3A><><EFBFBD><EFBFBD>9<EFBFBD>%m@ <09><><04><05> <0B><><EFBFBD>8<EFBFBD>U#<23><><EFBFBD>'<27><>ږ<EFBFBD>K<EFBFBD><4B>N<EFBFBD><>vF±01<30><31>ߜFˮ<46><CBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳN,Pc<14>T^<5E>>z_<7A><5F><EFBFBD><EFBFBD><^<5E><>K<EFBFBD><4B><EFBFBD><EFBFBD><16>Gc<47><63>5y<02><>ۉ<0F>g_<67><5F>I<EFBFBD> <0E><>4<EFBFBD><34>9f<39>1<12><><EFBFBD>|<7C>Y<EFBFBD>ډ<EFBFBD><DA89><EFBFBD><EFBFBD>4FF<46><46><18>,N<><4E><EFBFBD><EFBFBD>GuA)j<>UX<55><58><EFBFBD>d<12><><EFBFBD><EFBFBD><EFBFBD>:<3A><><04><><EFBFBD><EFBFBD><EFBFBD>8A$lk<6C><6B><EFBFBD><EFBFBD>C<EFBFBD><43><EFBFBD>5<EFBFBD>0<14>'<27><00>S<EFBFBD>[<5B>=<3D><02>+ <13><><15><><EFBFBD>tb<74><62><62>ѓfcPg%<05><><EFBFBD><EFBFBD>w<EFBFBD><02><>-<2D>\c<><63><EFBFBD><EFBFBD><19>)m<>*
<0C><><EFBFBD><EFBFBD>"<22><><EFBFBD><<3C><>%i<><69><EFBFBD>1l<><6C>B<EFBFBD>Dc <12>1<EFBFBD><31>(<28><16><>/™<>3s<><73>b<EFBFBD>Ι<><CE99>4 <20>C<><43> <0B>kW!<21>BU<42>de<64>6V<36><14><><EFBFBD><EFBFBD><EFBFBD>$<16><><EFBFBD><EFBFBD> <20>9<EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MX\٩ \<5C>AN1Ba <0C><10>><19><><EFBFBD>O<> \'<27>;2<>LV<4C>(\<5C><>v "<06>]Le<4C><65>6 \Ėe<C496>|<7C><><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><76>$`<60><>`<60>h<EFBFBD><68><EFBFBD><EFBFBD>ʂ)<29><><EFBFBD>g<EFBFBD><04>z<EFBFBD>EN <0C>2<18><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W_V<5F><56>nh<6E><15><><EFBFBD>h<EFBFBD><68>p<EFBFBD>~
`<60><>*<2A>,#<23>rDv <0B>N<EFBFBD>jU,b<><62>O -a<><61>-<2D><11><>S<17>T?<3F><><EFBFBD><EFBFBD><EFBFBD>+<2B>%<25><>ߘqw2<77><18><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD>ȋ<EFBFBD><<3C>#j<>e\<5C>(܃<>P<EFBFBD><50><08>T<EFBFBD>bC<>1<EFBFBD>BD<42>P1<><<3C>&<26><00><>x<EFBFBD>ܞeU<65>G<EFBFBD>cH<63><11><>@cd<63><64>p<EFBFBD><70> c#<23><><EFBFBD>g<EFBFBD>93<39><33>#;<3B><><EFBFBD><EFBFBD>^K@Kct$<1A> <20><><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF>1<EFBFBD><31><EFBFBD><EFBFBD><00>i0yO<79><4F>Zh@<40><05><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D>..M.<2E>'|<7C>f|<7C>F<EFBFBD><19>Ō<17>s
<EFBFBD> <0B><>M<> ̂д<CC82>f<01>k<EFBFBD>i0[o&0<1F><><EFBFBD><EFBFBD>T`<60>l` <01><>B'<27>
L<EFBFBD>Zfb<EFBFBD>S<EFBFBD><EFBFBD><EFBFBD><EFBFBD>~<7E>8<EFBFBD><38>X<EFBFBD>'7"<22><>l<EFBFBD><6C>[S<><53><EFBFBD><1F><>7<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>;<3B>3<EFBFBD><33>A6 <20><><EFBFBD><EFBFBD><EFBFBD><ED8280><EFBFBD>x<EFBFBD><78>gW<67><57>5<EFBFBD>l|k?X<><58>Fk?H<<3C>t<EFBFBD><74>w<EFBFBD>{<7B>@<40>.ڀ`Qg<51><67>b<>d突M<E7AA81><4D>.(]#<23><>%@<40><><EFBFBD>m<7F>T<EFBFBD><54><07>Ó<1A><00><>D<EFBFBD>p<EFBFBD>y*<2A><>냉C<EB8389><43><EFBFBD><EFBFBD>AA`<60><><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD><4B><EFBFBD><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD><1A>0A+><3E><>p^[:<3A>n<EFBFBD><6E><EFBFBD><EFBFBD>?<3F><0E>b<EFBFBD>,
L<EFBFBD>/c@<40>ұ<EFBFBD>+&3<><33><6C><0<>]<5D>)<>Khd <14><><17><>VWmI7+<2B>c\,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><02><d[.<2E><>6f<36> N<><4E><1C><><EFBFBD><EFBFBD> <02>Xc<58>!<21>M<EFBFBD><02><>O$<24><><EFBFBD>ˀ[`u<15>a/+{<7B>B<EFBFBD>V<EFBFBD>)+<2B>K<EFBFBD>B<>A<14>JB<4A><42><E<06><><EFBFBD>n<>PJ><3E><15>ݮP*?Z/0<08> u|Ծ<01><>UB)<11>]<5D>+<2B><>K<EFBFBD>Ɣ8s<><73><11><>?<05><>Z<EFBFBD>+r`<60><EFBFBD>e <0B>M<>Զ2<D4B6>C<11><><EFBFBD>y<EFBFBD>|MfS&9ѽ<02>̄<EFBFBD>i/<01><>fP<66>'<27><><07><>
<EFBFBD>սµ<EFBFBD>[<><DF8C>X<EFBFBD><58>?V<>/$ 5<>c<EFBFBD>,<12>b1<62><31><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><48>B<EFBFBD><42>S<EFBFBD><53><EFBFBD>ȿ<>E<EFBFBD><45><EFBFBD><EFBFBD>+5@<40>{
<EFBFBD><EFBFBD>4(<28><1C>:<14><>]<5D><<3C><>A<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD>Rc<52>X<EFBFBD><58><EFBFBD><EFBFBD>,T<>"<22><>*5?<3F>9P<39><03><>LF<11><>!<21>ɀe,<2C>X<><58><EFBFBD>x#<23><><EFBFBD><EFBFBD>f(<28>i
<EFBFBD>u<EFBFBD><EFBFBD>u<EFBFBD>:d<><64>@No<4E>.6<10><><EFBFBD><EFBFBD><EFBFBD>yv-u5<75><08>B<42><7F>S<EFBFBD><53>
7<05><> <20>E<EFBFBD><45>˲<EFBFBD><CBB2>z<01><>ų<EFBFBD><C5B3><EFBFBD>+l`<60><><EFBFBD><EFBFBD>tK+lY<6C>$<24><><EFBFBD><EFBFBD>i<EFBFBD><10>"<22>{<7B> ̧<> <09>#-00<>6 <18><><EFBFBD><EFBFBD>~<7E>e7<>y)j<>j<EFBFBD><6A>u<>:W[o<>Fb-kV<6B><1F><>`ac%`IEND<4E>B`<60>
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
Content-Type: text/css
Content-Transfer-Encoding: binary
Content-Location: https://fonts.googleapis.com/css?family=Google+Sans
@charset "utf-8";
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJl1pynAESo4b4o.woff2") format("woff2"); unicode-range: U+308, U+530-58F, U+2010, U+2024, U+25CC, U+FB13-FB17; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJl3pynAESo4b4o.woff2") format("woff2"); unicode-range: U+951-952, U+964-965, U+980-9FE, U+1CD0, U+1CD2, U+1CD5-1CD6, U+1CD8, U+1CE1, U+1CEA, U+1CED, U+1CF2, U+1CF5-1CF7, U+200C-200D, U+20B9, U+25CC, U+A8F1; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlKpynAESo4b4o.woff2") format("woff2"); unicode-range: U+2C7, U+2D8-2D9, U+2DB, U+307, U+1400-167F, U+18B0-18F5, U+25CC, U+11AB0-11ABF; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: local("Google Sans Regular"), local("GoogleSans-Regular"), url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlopynAESo4b4o.woff2") format("woff2"); unicode-range: U+460-52F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: local("Google Sans Regular"), local("GoogleSans-Regular"), url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlhpynAESo4b4o.woff2") format("woff2"); unicode-range: U+301, U+400-45F, U+490-491, U+4B0-4B1, U+2116; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlkpynAESo4b4o.woff2") format("woff2"); unicode-range: U+900-97F, U+1CD0-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B09; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJl0pynAESo4b4o.woff2") format("woff2"); unicode-range: U+30E, U+1200-1399, U+2D80-2DDE, U+AB01-AB2E, U+1E7E0-1E7E6, U+1E7E8-1E7EB, U+1E7ED-1E7EE, U+1E7F0-1E7FE; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJl6pynAESo4b4o.woff2") format("woff2"); unicode-range: U+589, U+10A0-10FF, U+1C90-1CBA, U+1CBD-1CBF, U+205A, U+2D00-2D2F, U+2E31; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: local("Google Sans Regular"), local("GoogleSans-Regular"), url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlppynAESo4b4o.woff2") format("woff2"); unicode-range: U+1F00-1FFF; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: local("Google Sans Regular"), local("GoogleSans-Regular"), url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlmpynAESo4b4o.woff2") format("woff2"); unicode-range: U+370-377, U+37A-37F, U+384-38A, U+38C, U+38E-3A1, U+3A3-3FF; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJl-pynAESo4b4o.woff2") format("woff2"); unicode-range: U+951-952, U+964-965, U+A80-AFF, U+200C-200D, U+20B9, U+25CC, U+A830-A839; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlGpynAESo4b4o.woff2") format("woff2"); unicode-range: U+951-952, U+964-965, U+A01-A76, U+200C-200D, U+20B9, U+25CC, U+262C, U+A830-A839; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: local("Google Sans Regular"), local("GoogleSans-Regular"), url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlnpynAESo4b4o.woff2") format("woff2"); unicode-range: U+307-308, U+590-5FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlupynAESo4b4o.woff2") format("woff2"); unicode-range: U+1780-17FF, U+19E0-19FF, U+200C-200D, U+25CC; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlspynAESo4b4o.woff2") format("woff2"); unicode-range: U+E81-EDF, U+200C-200D, U+25CC; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJl9pynAESo4b4o.woff2") format("woff2"); unicode-range: U+307, U+323, U+951-952, U+964-965, U+D00-D7F, U+1CDA, U+1CF2, U+200C-200D, U+20B9, U+25CC, U+A830-A832; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJl8pynAESo4b4o.woff2") format("woff2"); unicode-range: U+951-952, U+964-965, U+B01-B77, U+1CDA, U+1CF2, U+200C-200D, U+20B9, U+25CC; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJl4pynAESo4b4o.woff2") format("woff2"); unicode-range: U+964-965, U+D81-DF4, U+1CF2, U+200C-200D, U+25CC, U+111E1-111F4; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJkLpynAESo4b4o.woff2") format("woff2"); unicode-range: U+1-C, U+E-1F, U+7F-9F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlzpynAESo4b4o.woff2") format("woff2"); unicode-range: U+964-965, U+B82-BFA, U+200C-200D, U+20B9, U+25CC; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJl5pynAESo4b4o.woff2") format("woff2"); unicode-range: U+951-952, U+964-965, U+C00-C7F, U+1CDA, U+1CF2, U+200C-200D, U+25CC; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlxpynAESo4b4o.woff2") format("woff2"); unicode-range: U+2D7, U+303, U+331, U+E01-E5B, U+200C-200D, U+25CC; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: local("Google Sans Regular"), local("GoogleSans-Regular"), url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlqpynAESo4b4o.woff2") format("woff2"); unicode-range: U+102-103, U+110-111, U+128-129, U+168-169, U+1A0-1A1, U+1AF-1B0, U+300-301, U+303-304, U+308-309, U+323, U+329, U+1EA0-1EF9, U+20AB; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: local("Google Sans Regular"), local("GoogleSans-Regular"), url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJlrpynAESo4b4o.woff2") format("woff2"); unicode-range: U+100-2BA, U+2BD-2C5, U+2C7-2CC, U+2CE-2D7, U+2DD-2FF, U+304, U+308, U+329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Google Sans"; font-style: normal; font-weight: 400; src: local("Google Sans Regular"), local("GoogleSans-Regular"), url("https://fonts.gstatic.com/s/googlesans/v65/4Ua_rENHsxJlGDuGo1OIlJfC6l_24rlCK1Yo_Iqcsih3SAyH6cAwhX9RFD48TE63OOYKtrwEIJllpynAESo4.woff2") format("woff2"); unicode-range: U+0-FF, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
Content-Type: text/css
Content-Transfer-Encoding: binary
Content-Location: cid:css-747ecb2f-f82b-48b3-b9c3-4dd7b63ebcea@mhtml.blink
@charset "utf-8";
@import url("https://fonts.googleapis.com/css?family=Google+Sans");
.docs-ml-promotion { z-index: 1002; }
.docs-ml-header { z-index: 1; }
.docs-ml-icon { direction: ltr; display: inline-block; text-align: left; overflow: hidden; position: relative; vertical-align: middle; }
.docs-ml-img::before { content: url("https://ssl.gstatic.com/docs/common/mobileweb_sprite1.png"); }
.docs-ml-img-container { height: 156px; position: absolute; width: 36px; }
.docs-ml-docs-logo-icon { left: 0px; top: -36px; }
.docs-ml-sheets-logo-icon { left: 0px; top: 0px; }
.docs-ml-slides-logo-icon { left: 0px; top: -96px; }
.docs-ml-arrow-back-icon { left: 0px; top: -132px; }
.docs-ml-edit-icon { left: 0px; top: -72px; }
@media screen and (-webkit-min-device-pixel-ratio: 2) {
.docs-ml-img { content: url("https://ssl.gstatic.com/docs/common/mobileweb_sprite1.png"); }
.docs-ml-img-container { height: 156px; position: absolute; width: 36px; }
.docs-ml-docs-logo-icon { left: 0px; top: -36px; }
.docs-ml-sheets-logo-icon { left: 0px; top: 0px; }
.docs-ml-slides-logo-icon { left: 0px; top: -96px; }
.docs-ml-arrow-back-icon { left: 0px; top: -132px; }
.docs-ml-edit-icon { left: 0px; top: -72px; }
}
.docs-ml-header { background: rgb(250, 250, 250); border-bottom: 1px solid rgb(203, 203, 203); box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px; box-sizing: border-box; font-family: "Google Sans", Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif; padding: 4px 0px; position: fixed; left: 0px; top: 0px; width: 100%; }
.docs-ml-header-icon { height: 24px; opacity: 0.6; width: 24px; }
.docs-ml-header-icon-container { padding: 12px; }
.docs-ml-header-item { display: inline-block; vertical-align: middle; }
.docs-ml-header-drive-link { padding-left: 4px; }
body[dir="rtl"] .docs-ml-arrow-back-dir { transform: scaleX(-1); }
.docs-ml-header-document-title { box-sizing: border-box; line-height: 24px; padding: 0px 12px; width: calc(100% - 104px); }
.docs-ml-header-document-title-text { font-size: 20px; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.docs-ml-header-edit-button { float: right; padding-right: 4px; }
.docs-ml-promotion { background: rgb(255, 255, 255); bottom: 0px; box-shadow: rgba(0, 0, 0, 0.4) 0px 4px 12px; font-family: Arial, Helvetica, sans-serif; left: 0px; position: fixed; width: 100%; }
.docs-ml-promotion-off-screen { transform: translateY(100%); }
.docs-ml-promotion-shown { transform: translateY(0px); transition: transform 333ms cubic-bezier(0.4, 0, 0.2, 1); }
.docs-ml-promotion-dismissed { transform: translateY(100%); box-shadow: none; }
.docs-ml-promotion-no-horizontal-scroll { overflow-x: hidden; }
.docs-ml-promotion-header { display: table; padding: 24px 24px 0px; }
.docs-ml-promotion-app-icon-container { display: table-cell; }
.docs-ml-promotion-app-icon { height: 36px; width: 36px; }
@media (min-width: 600px) {
.docs-ml-promotion-app-icon { transform: scale(1.33); }
}
.docs-ml-promotion-text { display: table-cell; padding-left: 20px; vertical-align: top; }
.docs-ml-promotion-text-heading { color: rgba(0, 0, 0, 0.87); font-size: 16px; font-weight: 700; padding-bottom: 7px; }
.docs-ml-promotion-text-body { color: rgba(0, 0, 0, 0.87); font-size: 14px; }
.docs-ml-promotion-action-row { float: right; margin-top: 6px; padding: 8px 24px; }
.docs-ml-promotion-action-row-desktop { margin-top: 6px; }
.docs-ml-promotion-action-container { display: inline-block; height: 48px; margin: 6px 4px; vertical-align: middle; }
.docs-ml-promotion-action-button { display: inline-block; font-size: 14px; font-weight: 500; padding: 9px 12px; vertical-align: middle; }
.docs-ml-promotion-action-button-wrapper:focus { outline-color: rgb(214, 214, 214); }
.docs-ml-promotion-action-button.docs-ml-promotion-yes-button { background-color: rgb(66, 133, 244); border-radius: 4px; color: rgb(250, 250, 250); border: 1px solid transparent; }
.docs-ml-promotion-action-button.docs-ml-promotion-yes-button:active { background-color: rgb(25, 103, 210); }
.docs-ml-promotion-action-button.docs-ml-promotion-no-button { background-color: rgb(250, 250, 250); color: rgb(95, 99, 104); border-radius: 4px; border: 1px solid rgb(218, 220, 224); }
.docs-ml-promotion-action-button.docs-ml-promotion-no-button:active { background-color: rgb(245, 245, 245); }
.docs-ml-promotion.desktop { text-align: center; }
@media (orientation: portrait) {
.docs-ml-promotion.desktop { padding-top: 56px; padding-bottom: 80px; }
}
@media (orientation: landscape) {
.docs-ml-promotion.desktop { padding-top: 36px; padding-bottom: 56px; }
}
.docs-ml-promotion-heading-desktop { font-family: "Google Sans"; font-size: 18px; font-weight: 700; color: rgb(32, 33, 36); padding-top: 18px; padding-bottom: 10px; line-height: 1.5; max-width: 360px; margin: 0px auto; }
@media (orientation: landscape) {
.docs-ml-promotion-heading-desktop { padding-top: 0px; max-width: none; }
}
.docs-ml-promotion-text-body-desktop { font-size: 14px; line-height: 1.5; color: rgb(95, 99, 104); padding-bottom: 10px; }
.docs-icon.docs-ml-promotion-desktop-icon { height: 40px; width: 40px; transform: scale(2.5); transform-origin: center top; }
.docs-icon-ml-promotion-icon-container-desktop { height: 100px; width: 100px; margin-left: auto; margin-right: auto; }
@media (orientation: landscape) {
.docs-icon-ml-promotion-icon-container-desktop { display: inline-block; vertical-align: top; }
.docs-ml-promotion-description-desktop { display: inline-block; vertical-align: top; text-align: left; padding-left: 39px; max-width: 645px; }
}
@media (orientation: landscape) {
.docs-ml-promotion-action-row-desktop { margin-left: -8px; }
}
.docs-ml-promotion-action-row-desktop .docs-ml-promotion-action-container { margin: 6px 8px; font-family: "Google Sans"; }
.docs-ml-promotion-action-row-desktop .docs-ml-promotion-action-button-wrapper:focus { outline: none; }
.docs-ml-promotion-action-button.docs-ml-promotion-yes-button.docs-ml-promotion-app-themed { border-radius: 4px; box-shadow: none; box-sizing: border-box; font-family: "Google Sans", Roboto, RobotoDraft, Helvetica, Arial, sans-serif; font-weight: 500; font-size: 14px; height: 36px; letter-spacing: 0.25px; line-height: 16px; padding: 9px 24px 11px; background: rgb(26, 115, 232); color: rgb(255, 255, 255); border: 1px solid transparent !important; }
.docs-ml-promotion-action-button.docs-ml-promotion-no-button.docs-ml-promotion-app-themed { border-radius: 4px; box-shadow: none; box-sizing: border-box; font-family: "Google Sans", Roboto, RobotoDraft, Helvetica, Arial, sans-serif; font-weight: 500; font-size: 14px; height: 36px; letter-spacing: 0.25px; line-height: 16px; padding: 9px 24px 11px; background: rgb(255, 255, 255); color: rgb(26, 115, 232); border: 1px solid rgb(218, 220, 224) !important; }
.docs-ml-promotion-action-button-wrapper:focus .docs-ml-promotion-action-button.docs-ml-promotion-yes-button.docs-ml-promotion-app-themed { color: rgb(255, 255, 255); background: rgb(80, 148, 237); box-shadow: rgba(66, 133, 244, 0.15) 0px 1px 3px 1px; }
.docs-ml-promotion-action-button-wrapper:focus .docs-ml-promotion-action-button.docs-ml-promotion-no-button.docs-ml-promotion-app-themed { border-radius: 4px; box-shadow: none; box-sizing: border-box; font-family: "Google Sans", Roboto, RobotoDraft, Helvetica, Arial, sans-serif; font-weight: 500; font-size: 14px; height: 36px; letter-spacing: 0.25px; line-height: 16px; padding: 9px 24px 11px; background: rgb(233, 241, 254); border: 1px solid rgb(193, 216, 251) !important; }
.docsshared-no-download .docsshared-no-select-when-no-download, .docsshared-no-select { -webkit-user-drag: none; user-select: none; }
.docsshared-disable-image-copy canvas, .docsshared-disable-image-copy image, .docsshared-disable-image-copy img { pointer-events: none; }
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby----
Content-Type: text/css
Content-Transfer-Encoding: binary
Content-Location: cid:css-7a31172c-c16d-4379-a847-9072f51a3b81@mhtml.blink
@charset "utf-8";
html { overflow: auto; }
body { margin: 0px; overflow: hidden; overflow-wrap: break-word; }
.app-container { height: 100%; margin-top: 57px; overflow: auto; }
.doc { padding: 20px 12px 0px; position: relative; }
.doc .doc-content { margin: auto; padding: 24px 0px !important; max-width: 770px !important; }
------MultipartBoundary--VhiUdJuxlxmxWrLaXiSlRP2gfR2PuYkGvhdYgSLHby------